Текущий архив: 2005.07.31;
Скачать: CL | DM;
ВнизСоздание формы по hot key Найти похожие ветки
← →
Viktop (2005-07-13 11:33) [0]Назначил горячую клавишу (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 11:37) [1]сделай sbFormSearch полем класса формы TfmMain
вместо
sbFormSearch.Free
пиши
FreeAndNil(sbFormSearch)
← →
_dimka © (2005-07-13 11:38) [2]
> Назначил горячую клавишу (F3), по нажатию на которую создаётся
> форма. Нажимаю F3 и форма создаётся, но если нажать ещё
> раз, то появится ещё одна форма. Как этого избежать
ну например убрать
> sbFormSearch := TfmSearch.Create(Application);
> try
> sbFormSearch.ShowModal;
> finally
> sbFormSearch.Free;
> end;
а прсто поставить
sbFormSearch.ShowModal;
← →
_dimka © (2005-07-13 11:40) [3]ну например убрать
> sbFormSearch := TfmSearch.Create(Application);
> try
> sbFormSearch.ShowModal;
> finally
> sbFormSearch.Free;
> end;
и аоставить sbFormSearch.ShowModal;
← →
_dimka © (2005-07-13 11:42) [4]Извините первый клиент выдал 406 ошибку я думал что не отправилось :)
← →
Viktop (2005-07-13 12:10) [5]to Digitman
Всё равно появляется (если нажимать F3 подряд, не закрывая появившегося окна)
← →
Digitman © (2005-07-13 12:16) [6]
> Viktop (13.07.05 12:10) [5]
приводи код
← →
Viktop (2005-07-13 12:35) [7]В Futo-create form стоит fmMain, в Available - fmSearch.
Регистрирую Hot keyprocedure 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:39) [8]ну и где ты в этом коде выполнил рекомендации из [1] ?
они были тебе даны с учетом
> if (msg.hotkey = 1) and (sbFormSearch=nil)
> then
← →
Kolan © (2005-07-13 12:44) [9]А нельзя сделать переменную:
var
IsHotKeyFormCreated: Boolean;
{...}
procedure TfmMain.WMHotkey(var msg: TWMHotkey);
var
sbFormSearch: TfmSearch;
begin
if (msg.hotkey = 1) then
begin
if not IsHotKeyFormShown then
begin
sbFormSearch := TfmSearch.Create(Application);
try
sbFormSearch.ShowModal;
finally
sbFormSearch.Free;
end;
end;
end;
end;
а при закрытии:IsHotKeyFormCreated := False;
← →
Kolan © (2005-07-13 12:46) [10]Внутри if then забыл вставить
IsHotKeyFormCreated := True;
и там где жирным выделено
IsHotKeyFormShown = IsHotKeyFormCreated
← →
Viktop (2005-07-13 13:02) [11]to Digitman
тогда вобще не создаётся
to Kolan
Глобальная переменная на КРАЙНИЙ случай
← →
HSolo © (2005-07-13 13:18) [12]В WMHotkey ищите Вашу форму поиска в Screen.Forms; если не нашли - создавайте, а нашли - просто показывайте.
← →
Viktop (2005-07-13 13:22) [13]Видно у меня руки кривые :(
Писал так:function IsFormOpen(const FormName : string): Boolean;
var
i: Integer;
begin
Result := False;
for i := Screen.FormCount - 1 DownTo 0 do
if (Screen.Forms[i].Name = FormName) then
begin
Result := True;
Break;
end;
end;
безрезультатно. Может, что не то писал в FormName
← →
Kolan © (2005-07-13 13:22) [14]
> HSolo © (13.07.05 13:18) [12]
Лучьше помойму глобальная переменная. Чем все формы перебирать.
Кстати Лучьше использоватьGlobalAddAtom
А не простоRegisterHotkey(Handle, 1, 0, VK_F3);
← →
Viktop (2005-07-13 13:26) [15]Видно придётся прибегнуть к временному решению :((
← →
HSolo © (2005-07-13 13:30) [16]>Kolan © (13.07.05 13:22) [14]
>Лучьше помойму глобальная переменная. Чем все формы перебирать.
Их так много? Созданных в данный момент?
← →
Viktop (2005-07-13 13:38) [17]Перебираются все формы на экране
← →
Kolan © (2005-07-13 13:42) [18]
> HSolo © (13.07.05 13:30) [16]
Хто знает
← →
HSolo © (2005-07-13 14:30) [19]> Перебираются все формы на экране
Не все, и не на экране, а только СОЗДАННЫЕ Вашим приложением.
← →
Digitman © (2005-07-13 15:08) [20]
> Viktop (13.07.05 13:02) [11]
> тогда вобще не создаётся
раз не создается, значит не выполняется условие sbFormSearch=nil
ты сделал sbFormSearch полем класса формы или не сделал ?!
← →
Viktop (2005-07-13 16:53) [21]Как сделать полем класса формы?
Вобщето я сделал с помощью [13], но можно попробовать и другой вариант
← →
Digitman © (2005-07-13 16:57) [22]
> Как сделать полем класса формы?
ты не понимаешь различия между локальной переменной подпрограммы и полем класса ? ...
> Вобщето я сделал с помощью [13],
к оригинальной теме эта байда НЕ имеет никакого отношения
← →
Viktop (2005-07-13 17:04) [23]Что такое локальная переменная я знаю, а как сделать полем класса - нет. Объясни вкратце
← →
Digitman © (2005-07-13 17:07) [24]type
TSomeClass = class(..)
..
FSomeField: TSomeType; //это и есть поле класса
..
end;
← →
Viktop (2005-07-13 17:10) [25]Так вот как это называется :)
← →
Digitman © (2005-07-13 17:12) [26]
> Viktop (13.07.05 17:10) [25]
угу..
"Так вот ты какой, оказывается, дедушка Ленин !" (с)
← →
Viktop (2005-07-13 17:18) [27]А памяти это больше отжирать не будет?
← →
Digitman © (2005-07-13 17:26) [28]
> Viktop (13.07.05 17:18) [27]
обязательно !!!
как только сделаешь полем класса, так сразу и никакой памяти на компьютере тебе не хватит)))
какое тебе нафих "отжирание", если ты не ориентируешься даже в БАЗОВЫХ понятиях ?!
бегом марш буквари штудировать !
Страницы: 1 вся ветка
Текущий архив: 2005.07.31;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.061 c