![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание формы по hot key [WinXP]
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 17:26:00) [1]
> Viktop (13.07.05 17:18) [27]
обязательно !!!
как только сделаешь полем класса, так сразу и никакой памяти на компьютере тебе не хватит)))
какое тебе нафих "отжирание", если ты не ориентируешься даже в БАЗОВЫХ понятиях ?!
бегом марш буквари штудировать !
Viktop (2005-07-13 17:18:00) [2]А памяти это больше отжирать не будет?
Digitman (2005-07-13 17:12:00) [3]
> Viktop (13.07.05 17:10) [25]
угу..
"Так вот ты какой, оказывается, дедушка Ленин !" (с)
Viktop (2005-07-13 17:10:00) [4]Так вот как это называется :)
Digitman (2005-07-13 17:07:00) [5]type
TSomeClass = class(..)
..
FSomeField: TSomeType; //это и есть поле класса
..
end;
Viktop (2005-07-13 17:04:00) [6]Что такое локальная переменная я знаю, а как сделать полем класса - нет. Объясни вкратце
Digitman (2005-07-13 16:57:00) [7]
> Как сделать полем класса формы?
ты не понимаешь различия между локальной переменной подпрограммы и полем класса ? ...
> Вобщето я сделал с помощью [13],
к оригинальной теме эта байда НЕ имеет никакого отношения
Viktop (2005-07-13 16:53:00) [8]Как сделать полем класса формы?
Вобщето я сделал с помощью [13], но можно попробовать и другой вариант
Digitman (2005-07-13 15:08:00) [9]
> Viktop (13.07.05 13:02) [11]
> тогда вобще не создаётся
раз не создается, значит не выполняется условие sbFormSearch=nil
ты сделал sbFormSearch полем класса формыили не сделал ?!
HSolo (2005-07-13 14:30:00) [10]> Перебираются все формы на экране
Не все, и не на экране, а только СОЗДАННЫЕ Вашим приложением.
Kolan (2005-07-13 13:42:00) [11]
> HSolo © (13.07.05 13:30) [16]
Хто знает
Viktop (2005-07-13 13:38:00) [12]Перебираются все формы на экране
HSolo (2005-07-13 13:30:00) [13]>Kolan © (13.07.05 13:22) [14]
>Лучьше помойму глобальная переменная. Чем все формы перебирать.
Их так много? Созданных в данный момент?
Viktop (2005-07-13 13:26:00) [14]Видно придётся прибегнуть к временному решению :((
Kolan (2005-07-13 13:22:00) [15]
> HSolo © (13.07.05 13:18) [12]
Лучьше помойму глобальная переменная. Чем все формы перебирать.
Кстати Лучьше использоватьGlobalAddAtom
А не просто
RegisterHotkey(Handle, 1, 0, VK_F3);
Viktop (2005-07-13 13:22:00) [16]Видно у меня руки кривые :(
Писал так:
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
HSolo (2005-07-13 13:18:00) [17]В WMHotkey ищите Вашу форму поиска в Screen.Forms; если не нашли - создавайте, а нашли - просто показывайте.
Viktop (2005-07-13 13:02:00) [18]to Digitman
тогда вобще не создаётся
to Kolan
Глобальная переменная на КРАЙНИЙ случай
Kolan (2005-07-13 12:46:00) [19]Внутри if then забыл вставить
IsHotKeyFormCreated := True;
и там где жирным выделено
IsHotKeyFormShown = IsHotKeyFormCreated
Kolan (2005-07-13 12:44:00) [20]А нельзя сделать переменную:
var
IsHotKeyFormCreated: Boolean;
{...}
procedure TfmMain.WMHotkey(var msg: TWMHotkey);
var
sbFormSearch: TfmSearch;
begin
if (msg.hotkey = 1) then
begin
if not IsHotKeyFormShownthen
begin
sbFormSearch := TfmSearch.Create(Application);
try
sbFormSearch.ShowModal;
finally
sbFormSearch.Free;
end;
end;
end;
end;
а при закрытии:
IsHotKeyFormCreated := False;