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 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;


Страницы:   1 2

Наверх

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