![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Невозможно сделать повторное создание формы. [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;