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

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

Создание формы по hot key [WinXP]


Страницы:   1 2

Viktop ©   (2005-07-13 11:33:00) 

Назначил горячую клавишу (F3), по нажатию на которую создаётся форма. Нажимаю F3 и форма создаётся, но если нажать ещё раз, то появится ещё одна форма. Как этого избежать
procedure TfmMain.WMHotkey(var msg: TWMHotkey);
var
 sbFormSearch: TfmSearch;
begin
 if (msg.hotkey = 1) then
 begin
   sbFormSearch := TfmSearch.Create(Application);
   try
     sbFormSearch.ShowModal;
   finally
     sbFormSearch.Free;
   end;
 end;
end;


Пробовал ставить условие if (msg.hotkey = 1) and (sbFormSearch=nil) then, но тогда форма вобще не создаётся.


Digitman   (2005-07-13 12:39:00) [21]

ну и где ты в этом коде выполнил рекомендации из [1] ?
они были тебе даны с учетом


> if (msg.hotkey = 1) and (sbFormSearch=nil)
> then


Viktop   (2005-07-13 12:35:00) [22]

В Futo-create form стоит fmMain, в Available - fmSearch.
Регистрирую Hot key
procedure TfmMain.FormCreate(Sender: TObject);
begin
 RegisterHotkey(Handle, 1, 0, VK_F3);
end;

привожу ещё раз код
private // в секции объявлений формы
 procedure WMHotkey( var msg: TWMHotkey ); message WM_HOTKEY;

procedure TfmMain.WMHotkey(var msg: TWMHotkey);
var
 sbFormSearch: TfmSearch;
begin
 if (msg.hotkey = 1) then
 begin
   sbFormSearch := TfmSearch.Creat e(Application);
   try
     sbFormSearch.ShowModal;
   finally
     FreeAndNil(sbFormSearch)
   end;
 end;
end;

Нажимаю F3, нажимаю F3 ещё раз (предыдущее окно поиска не закрываю) и появляется ещё одно окно поиска.
FreeAndNil(sbFormSearch) форма освободится только после закрытия предыдущей.
Есть временное решение:
procedure TfmMain.WMHotkey(var msg: TWMHotkey);
var
 sbFormSearch: TfmSearch;
begin
 if (msg.hotkey = 1) then
 begin
   sbFormSearch := TfmSearch.Create(Application);
   try
     UnRegisterHotkey(Handle, 1);
     sbFormSearch.ShowModal;
   finally
     sbFormSearch.Free;
     RegisterHotkey(Handle, 1, 0, VK_F3);
   end;
 end;
end;


Digitman   (2005-07-13 12:16:00) [23]


> Viktop   (13.07.05 12:10) [5]


приводи код


Viktop   (2005-07-13 12:10:00) [24]

to Digitman
Всё равно появляется (если нажимать F3 подряд, не закрывая появившегося окна)


_dimka   (2005-07-13 11:42:00) [25]

Извините первый клиент выдал 406 ошибку я думал что не отправилось :)


_dimka   (2005-07-13 11:40:00) [26]

ну например убрать

>    sbFormSearch := TfmSearch.Create(Application);
>    try
>      sbFormSearch.ShowModal;
>    finally
>      sbFormSearch.Free;
>    end;

и аоставить sbFormSearch.ShowModal;


_dimka   (2005-07-13 11:38:00) [27]


> Назначил горячую клавишу (F3), по нажатию на которую создаётся
> форма. Нажимаю F3 и форма создаётся, но если нажать ещё
> раз, то появится ещё одна форма. Как этого избежать

ну например убрать

>    sbFormSearch := TfmSearch.Create(Application);
>    try
>      sbFormSearch.ShowModal;
>    finally
>      sbFormSearch.Free;
>    end;

а прсто поставить

sbFormSearch.ShowModal;


Digitman   (2005-07-13 11:37:00) [28]

сделай sbFormSearch полем класса формы TfmMain

вместо
sbFormSearch.Free
пиши
FreeAndNil(sbFormSearch)


Страницы:   1 2

Наверх

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