Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Горячие клавиши ShortCut  [new]
neteurt
Member

Откуда:
Сообщений: 81
Здравствуйте, на кнопку повесил событие Action, в событие выставлено свойство ShortCut.
Проблема в том если форма открыта одна(форма1), тогда событие идеально отрабатывается при нажатие клавиши, если открыть еще одну форму(форма2) и нажать клавишу тогда событие выполнится с формы1 а не с формы2 как это должно быть. Подскажите как это можно исправить?
19 июн 20, 12:44    [22153587]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
alekcvp
Member

Откуда:
Сообщений: 2178
neteurt
Здравствуйте, на кнопку повесил событие Action, в событие выставлено свойство ShortCut.
Проблема в том если форма открыта одна(форма1), тогда событие идеально отрабатывается при нажатие клавиши, если открыть еще одну форму(форма2) и нажать клавишу тогда событие выполнится с формы1 а не с формы2 как это должно быть. Подскажите как это можно исправить?

Прописать в Action.OnUpdate что она включена только когда активна первая форма.
19 июн 20, 12:46    [22153591]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
neteurt
Member

Откуда:
Сообщений: 81
alekcvp,
procedure Form1.actGoFilterUpdate(Sender: TObject);
begin
  inherited;
  if Form1.Active then
  begin
    actGoFilter.ShortCut := F7;
  end;

end;


procedure Form2.actGoFilterUpdate(Sender: TObject);
begin
  inherited;
  if Form2.Active then
  begin
    actGoFilter.ShortCut := F7;
  end;

end;


Так?
только возникает еще ошибка
Incompatible types: 'TShortCut' and 'string'
19 июн 20, 13:00    [22153609]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
kapas
Member

Откуда:
Сообщений: 6
...
System.Classes.TShortCut = Low(Word)..High(Word);
...
Для вашего случая (F7):
actGoFilter.ShortCut := 118;
19 июн 20, 13:17    [22153621]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
neteurt
Member

Откуда:
Сообщений: 81
kapas,

System.Classes.TShortCut = Low(Word)..High(Word); 

это для чего?
19 июн 20, 13:19    [22153623]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Vizit0r
Member

Откуда: Одесса
Сообщений: 788
neteurt
kapas,

System.Classes.TShortCut = Low(Word)..High(Word); 

это для чего?


это чтобы было понятно, какого тип у TShortCut
19 июн 20, 13:29    [22153625]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
neteurt
Member

Откуда:
Сообщений: 81
как правильно написать проверку на активность формы?
  if Form2.Active then
  begin
    actGoFilter.ShortCut := 118;
  end;

получаю ошибку "access violation at address"
19 июн 20, 13:35    [22153628]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50381

Правильнее всего будет выкинуть Action вообще. Повесить ShortCut прямо на соответствующий
пункт меню каждой из форм.

Posted via ActualForum NNTP Server 1.5

19 июн 20, 13:46    [22153647]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 12682
kapas
...
System.Classes.TShortCut = Low(Word)..High(Word);
...
Для вашего случая (F7):
actGoFilter.ShortCut := 118;

Для любого случая
XXX.ShortCut:=menus.TextToShortCut('F7');
19 июн 20, 13:53    [22153653]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 12682
Dimitry Sibiryakov
Правильнее всего будет выкинуть Action вообще.
Правильнее управлять через ActionList.State
19 июн 20, 13:54    [22153657]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50381

Соколинский Борис
Правильнее управлять через ActionList.State

Могло бы быть правильнее, если бы TActionList не программировали криворукие индусские
студенты.

Posted via ActualForum NNTP Server 1.5

19 июн 20, 14:00    [22153666]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
neteurt
Member

Откуда:
Сообщений: 81
я уже все варианты перепробовал, но все равно срабатывает событие с другой формы
19 июн 20, 14:21    [22153682]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 12682
Dimitry Sibiryakov
Могло бы быть правильнее, если бы TActionList не программировали криворукие индусские студенты.
Я там только один баг знаю, который легко лечится.
19 июн 20, 14:44    [22153699]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50381

Соколинский Борис
который легко лечится.

Как исцелить пожирание процессора бесконечным циклом опроса состояния в OnIdle?

Posted via ActualForum NNTP Server 1.5

19 июн 20, 14:48    [22153701]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
alekcvp
Member

Откуда:
Сообщений: 2178
neteurt,

procedure Form1.actGoFilterUpdate(Sender: TObject);
begin
  inherited;
  actGoFilter.Enabled := Active;
end;

Теоретически этого должно хватить.
Dimitry Sibiryakov

Соколинский Борис
который легко лечится.

Как исцелить пожирание процессора бесконечным циклом опроса состояния в OnIdle?

А это в какой версии дельфей?

Сообщение было отредактировано: 19 июн 20, 15:59
19 июн 20, 16:01    [22153775]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50381

alekcvp
А это в какой версии дельфей?

Практически сразу с появления ActionList. В 2006 это ещё не так заметно, а в ХЕ оно уже
может сожрать и 4% от старенького ноутбука.

Posted via ActualForum NNTP Server 1.5

19 июн 20, 16:21    [22153794]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
alekcvp
Member

Откуда:
Сообщений: 2178
Dimitry Sibiryakov

alekcvp
А это в какой версии дельфей?

Практически сразу с появления ActionList. В 2006 это ещё не так заметно, а в ХЕ оно уже
может сожрать и 4% от старенького ноутбука.

Ну хз, у меня в 10.3 не жрёт. Правда у меня и не старенький ноутбук.
Но тут проблема явно не в ActionList'е.
19 июн 20, 16:39    [22153815]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
neteurt
Member

Откуда:
Сообщений: 81
alekcvp, не помогло, да и данный код включит все Actions по порядку, сразу на первой форме, потом на второй и т.д.
формы открываются в виде в кладок в компоненте PageControl
19 июн 20, 16:51    [22153825]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 12682
Dimitry Sibiryakov
Как исцелить пожирание процессора бесконечным циклом опроса состояния в OnIdle?
Это фича, баг есть при уничтожении run-time добавляемых фреймов.

Согласен, фича так себе. Но, с другой стороны я не вижу корректного способа отслеживать все возможные изменения, которые могут понадобиться для корректной работы.
Например, как он узнает, что после выполнения потока нужно обновится? Или события, не связанного с WM_XXX?

Сообщение было отредактировано: 19 июн 20, 17:16
19 июн 20, 17:17    [22153841]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50381

Соколинский Борис
Например, как он узнает, что после выполнения потока нужно обновится?

Я бы сказал "никак". Не его это дело, а кода, обрабатывающего результат завершения потока.

Но курс партии на "каждая домохозяйка должна быть способной создать хоть как-то работающее
приложение в Дельфи" со мной не согласен.

Posted via ActualForum NNTP Server 1.5

19 июн 20, 17:25    [22153850]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 12682
Dimitry Sibiryakov, я тоже не согласен.
С трудом представляю себе архитектуру сложного приложения, где бы такой способ не вызывал лишний геморрой и баги.
19 июн 20, 17:30    [22153859]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50381
Соколинский Борис
С трудом представляю себе архитектуру сложного приложения

Обычная модульная архитектура. Поток, вещь в себе, по завершении рапортует своему
контролёру "я завершился", а что тот сделает - ему безразлично. Контролёр же знает кому
надо разослать уведомления о завершении потока, чтобы какие-нибудь кнопки или пункты меню
изменили своё состояние. Всё. Совершенно никому не нужно 20 раз в секунду опрашивать всех
и изменять состояние всех.

PS: Более глобально это называется "event-driven architecture", которую почему-то может вкурить не каждый.

Сообщение было отредактировано: 19 июн 20, 17:48
19 июн 20, 17:46    [22153878]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 12682
Dimitry Sibiryakov
Контролёр же знает кому надо разослать уведомления о завершении потока, чтобы какие-нибудь кнопки или пункты меню изменили своё состояние
Теперь представим себе приложение, в котором 100500 разных контролах в разных формах. Чтобы это все корректно работало, они должны регистрироваться в диспетчере рассылок оповещений (я Вася, жду новостей от Пети).
Соответственно, должно быть 100500 идентификаторов Петей, и даже если базовый функционал прописан в родительской форме, на каждой дочерней должен быть перекрыт обработчик. Это и есть геморрой.
19 июн 20, 17:55    [22153881]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50381

Соколинский Борис
Теперь представим себе приложение, в котором 100500 разных контролах в разных формах.

И все они ждут оповещений от одного и того же потока и все открыты одновременно.
Байтораздирающее зрелище.

Posted via ActualForum NNTP Server 1.5

19 июн 20, 18:14    [22153898]     Ответить | Цитировать Сообщить модератору
 Re: Горячие клавиши ShortCut  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 12682
Dimitry Sibiryakov
И все они ждут оповещений от одного и того же потока и все открыты одновременно.
Вполне возможно, если этот поток, к примеру, отслеживает, не выдернули ли E-Token.
19 июн 20, 18:25    [22153902]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить