Delphi 7 закрытие доступной модальной формы Onactivate при определенных условиях - PullRequest
3 голосов
/ 03 января 2012

я работаю над проектом, используя delphi 7 , проект является проектом обслуживания, и я не являюсь первоначальным кодировщиком проекта, у меня есть ситуация, когда мне нужно закрыть доступно Форма после того, как она была создана с помощью кода в определенных ситуациях. Форма является моделью

. Вот пример кода этого

       var 
       frmStratum : TfrmStratum;
       begin
          if not assigned(frmStratum) then myMainForm.OnExecute(PropAction);
        end; 

внутри myMainForm.OnExecute (PropAction);у меня есть

frmStratum := TfrmStratum.Create(Self, Self as IStratum,inttostr(m_surveyno),Module,m_stations,false);

теперь процедура TfrmStratum.FormActivate из TfrmStratum я делаю много калькуляций и пишу в базу данных

var
  if (bMassStratumExport) AND (bDoneOne)  then
  begin
             //write to database..
  end;

сейчася должен сделать это по крайней мере 20 раз , то есть

1. Create the form
2. onactivate do database writing
3. close TfrmStratum

, так как это модальная форма, которую я не могу закрыть, если ниже, где я ее создаю, поэтому я хотел закрыть ее, активировать каккак только шаг 2 сделан

, теперь я попробовал это

  if (bMassStratumExport) AND (bDoneOne) AND NOT (bReadyToclose) then
 begin
    //do database writing
    if bNowClo then frmStratum.close;
 end

РЕДАКТИРОВАТЬ: (отредактировано, чтобы сделать вопрос более ясным)

Onactivate формы (frmStratum), я хочу закрыть модальную форму (frmStratum), поэтому я делаю это

procedure TfrmStratum.FormActivate(Sender: TObject);
 begin
  if (bMassStratumExport) AND (bDoneOne) AND NOT (bReadyToclose) then
    begin
      //do database writing
      if bNowClo then self.close;// i need to close the form after after doing database write
    end
  end;

, но элемент управления во время ошибок переходит к self.close, но этоне закрывает форму.как с этим справиться?

Ответы [ 2 ]

5 голосов
/ 04 января 2012

Раньше, когда мне нужно было закрывать форму во время активации, я отправлял себе сообщение вместо вызова self.close.

PostMessage(Self.Handle, WM_CLOSE, 0, 0);

Я пытался найти свой исходный источник, который указывал мне в этом направлениино я не смог найти это.

PostMessage вернется немедленно и не будет ждать обработки сообщения.После завершения функции OnActivate и обработки цикла обработки сообщения Delphi в вашей форме будет вызвано сообщение close.

5 голосов
/ 03 января 2012

Предполагая, что его frmStatum является недействительным, это дает вам исключение A / V

if bNowClo затем self.close;

...