Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Невозможно сделать повторное создание формы. [Delphi, Windows]


Linec ©   (2005-09-20 14:02:00) 

У меня программа написана на обычном Delphi, но я хочу создавать форму написанную на KOL (например настройки).

procedure TOption.Create;
begin
 form:=newform(applet,'Option');
 run(form);
end;

При первом вызове этой процедуры форма создается нормально. Потом пользователь выходит из нее, закрыв форму. Затем если попытаться вызвать снову эту процедуры, то форма появляется и сразу пропадает (сама закрывается).

Я пробовал ставить после run(form);
 form.free;
 applet.free;
а также очищал очередь сообщений от клавиатуры и мышки, но это не помогает.

Простое скрытие формы меня не удовлетворяет. Надо, чтобы форма полностью закрывалась, освобождая ресурсы. Но затем могла быть создана снова.
Если кто знает пожалуйста подскажите.


ECM   (2005-09-23 10:53:00) [1]

Я имел ввиду что ошибка где-то у Вас
Вот мой тестовый проект

http://www.fastfile.ru/file/KOLVCLTestPrj.zip

там ничего лишнего - нет никаких AV

:)


ECM   (2005-09-22 18:30:00) [2]


> А из-за чего такое происходит?

Ошибка в 17-й строке...


Linec   (2005-09-21 16:56:00) [3]

А из-за чего такое происходит?


Linec   (2005-09-20 19:52:00) [4]

Получилось, но при попытке свернуть окно происходит ошибка Access violation.


ECM   (2005-09-20 15:58:00) [5]

З.Ы. Frm (в моем примере) => Form (у Вас)


ECM   (2005-09-20 15:56:00) [6]

Один из вариантов:


var
 bExit: Boolean;

function MyWndProc( Sender: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
begin
 Result := FALSE;
 if Msg.message = WM_CLOSE then bExit := TRUE;
end;

procedure TOption.Create;
var
 Frm: PControl;
 Msg: TMsg;
begin
 Frm := NewForm(Applet,'Option');
 Frm.AttachProc(@MyWndProc);
 Frm.Show;
 bExit := FALSE;
 while not bExit do begin
   WaitMessage();
   {
   if PeekMessage( Msg, 0, 0, 0, PM_REMOVE ) then
   begin
     TranslateMessage( Msg );
     DispatchMessage( Msg );
   end;
   }
   Frm.ProcessMessage;
 end;
 Frm.Free;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо