Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.05.2011, 21:47
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию В форме ничего не отображается

Пожалуйста помогите разобраться, очень необходимо. Проблема описана после кода.

Код:
procedure TForm1.Button2Click(Sender: TObject);
label 10;
var
A1,A2,A4,l,m,n:integer;
A3:string;
yb:byte;
a,g:real;
begin
  if Checkbox1.Checked then
    Form3.Show
  else
    Form2.Show;
  if (hCOM=0) or (hCOM=INVALID_HANDLE_VALUE) then exit;
  PurgeComm(hCOM,PURGE_RXCLEAR);
  A1:=strtoint(Edit1.Text);
  A2:=abs(A1);
  A3:=DEC2HEX(A2);
  A4:=Hex2Byte(A3);
  xb:=A4;
  WriteFile(hCOM,xb,1,xn,nil);
  told:=Time;
  ttime:=Time;
  if MilliSecondsBetween(told,ttime)<=500 then
    begin
      if A1<0 then
        yb:=$CC
      else
        yb:=$AA;
    end;
  WriteFile(hCOM,yb,1,xn,nil);
  if Checkbox1.Checked then
  begin
    a:=0;
    m:=0;
    for n:=1 to 2*A2 do
      10:
      begin
        if ReadFile(hCOM,k,1,xn,nil) then
          begin
            st:=hexb(k);
            l:=HEX2DEC(st);
            a:=a+l;
            m:=m+1;
            if m=3 then
              begin
                a:=a/3;
                Form1.Memo1.Lines.Add(floattostr(a));
                g:=n/2;
                Form1.Memo2.Lines.Add(floattostr(g));
                a:=0;
                m:=0;
              end
            else goto 10;
          end;
      end;
   end;
end;

В программе, когда стоит флажок в Checkbox1 должна появляться Форма 3 и в ней текст, а когда не стоит флажок, аналогично Форма2. Проблема в том, что, если флажок не стоит, то все отлично работает, а если стоит, то форма три появляется, но пустая (без текста, который в ней написан), а текст появляется только по окончании цикла

Код:
for n:=1 to 2*A2 do

помогите разобраться пожалуйста в чем дело.
Ответить с цитированием
  #2  
Старый 16.05.2011, 21:52
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

В обработчике какого события у вас исполняется этот цикл?
Ответить с цитированием
  #3  
Старый 16.05.2011, 22:02
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию

Когда нажимаю на кнопку Button2, это все код этой кнопки. По средствам этого цикла в программу приходят данные, отправляемые микроконтроллером.
Ответить с цитированием
  #4  
Старый 16.05.2011, 22:13
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Попробуйте сначала выполнять цикл, а потом показывать форму
Ответить с цитированием
  #5  
Старый 16.05.2011, 22:36
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию

Пробовал, но тогда у меня получается, что окно выскакивает, после того, как прошел цикл (и все данные с микроконтроллера приняты), а мне надо, чтобы окно появилось во время приема, оно несет смысл предупреждение, что мол, когда программа принимает, не надо ничего нажимать, так как это повлечет за собой повисание программы.
Ответить с цитированием
  #6  
Старый 16.05.2011, 23:33
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию

Вроде придумал как обойти это все дело, но что-то все равно не выходит. Подскажите а как сделать, так чтобы кнопка начала выполнять все свои функции после того как я закрою Форму2. Я попробовал


Код:
procedure TForm1.Button2Click(Sender: TObject);
label 10;
var
A1,A2,A4,l,m,n:integer;
A3:string;
yb:byte;
a,g:real;
begin
 Form2.Show;
 if Form2.Close then
  begin
   тут все остальное тело программы
  end;
end;

Но у меня ошибку выдает в

Код:
 if Form2.Close then
Ответить с цитированием
  #7  
Старый 17.05.2011, 00:29
Человек_Борща Человек_Борща вне форума
Новичок
 
Регистрация: 17.09.2010
Адрес: Беларусь, г. Минск
Сообщения: 58
Версия Delphi: 7, 2010,XE
Репутация: 10
По умолчанию

О господи-исуси...

FormN.Close - это процедура.

Если хочешь делать что-то в момент выхода.. делай это в событии формы OnCloseQuerty
Ответить с цитированием
  #8  
Старый 17.05.2011, 01:50
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию

Да ладно уж, так уж и господи-исуси, это ж раздел для начинающих.
Спасибо за совет. Вроде бы помогло, завтра проверю
Ответить с цитированием
  #9  
Старый 17.05.2011, 01:56
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Просто в первоначальном варианте тебе в цикл надо было добавить Application.ProcessMessages. Просто форма не могла отрисоваться, т.к. была занята циклом.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:22.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025