powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Горячие клавиши ShortCut
25 сообщений из 29, страница 1 из 2
Горячие клавиши ShortCut
    #39970839
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, на кнопку повесил событие Action, в событие выставлено свойство ShortCut.
Проблема в том если форма открыта одна(форма1), тогда событие идеально отрабатывается при нажатие клавиши, если открыть еще одну форму(форма2) и нажать клавишу тогда событие выполнится с формы1 а не с формы2 как это должно быть. Подскажите как это можно исправить?
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970841
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neteurt
Здравствуйте, на кнопку повесил событие Action, в событие выставлено свойство ShortCut.
Проблема в том если форма открыта одна(форма1), тогда событие идеально отрабатывается при нажатие клавиши, если открыть еще одну форму(форма2) и нажать клавишу тогда событие выполнится с формы1 а не с формы2 как это должно быть. Подскажите как это можно исправить?

Прописать в Action.OnUpdate что она включена только когда активна первая форма.
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970851
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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'
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970861
kapas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
System.Classes.TShortCut = Low(Word)..High(Word);
...
Для вашего случая (F7):
actGoFilter.ShortCut := 118;
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970863
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kapas,

Код: pascal
1.
System.Classes.TShortCut = Low(Word)..High(Word); 


это для чего?
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970865
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neteurt
kapas,

Код: pascal
1.
System.Classes.TShortCut = Low(Word)..High(Word); 


это для чего?


это чтобы было понятно, какого тип у TShortCut
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970867
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как правильно написать проверку на активность формы?
Код: pascal
1.
2.
3.
4.
  if Form2.Active then
  begin
    actGoFilter.ShortCut := 118;
  end;


получаю ошибку "access violation at address"
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970883
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильнее всего будет выкинуть Action вообще. Повесить ShortCut прямо на соответствующий
пункт меню каждой из форм.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970886
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapas
...
System.Classes.TShortCut = Low(Word)..High(Word);
...
Для вашего случая (F7):
actGoFilter.ShortCut := 118;

Для любого случая
Код: pascal
1.
XXX.ShortCut:=menus.TextToShortCut('F7');
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970889
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Правильнее всего будет выкинуть Action вообще.
Правильнее управлять через ActionList.State
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970893
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисПравильнее управлять через ActionList.State

Могло бы быть правильнее, если бы TActionList не программировали криворукие индусские
студенты.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970907
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я уже все варианты перепробовал, но все равно срабатывает событие с другой формы
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970920
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Могло бы быть правильнее, если бы TActionList не программировали криворукие индусские студенты.
Я там только один баг знаю, который легко лечится.
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970922
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борискоторый легко лечится.

Как исцелить пожирание процессора бесконечным циклом опроса состояния в OnIdle?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970976
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neteurt,

Код: pascal
1.
2.
3.
4.
5.
procedure Form1.actGoFilterUpdate(Sender: TObject);
begin
  inherited;
  actGoFilter.Enabled := Active;
end;


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

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

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

А это в какой версии дельфей?
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39970990
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpА это в какой версии дельфей?

Практически сразу с появления ActionList. В 2006 это ещё не так заметно, а в ХЕ оно уже
может сожрать и 4% от старенького ноутбука.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39971001
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

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

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

Ну хз, у меня в 10.3 не жрёт. Правда у меня и не старенький ноутбук.
Но тут проблема явно не в ActionList'е.
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39971006
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp, не помогло, да и данный код включит все Actions по порядку, сразу на первой форме, потом на второй и т.д.
формы открываются в виде в кладок в компоненте PageControl
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39971019
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Как исцелить пожирание процессора бесконечным циклом опроса состояния в OnIdle?
Это фича, баг есть при уничтожении run-time добавляемых фреймов.

Согласен, фича так себе. Но, с другой стороны я не вижу корректного способа отслеживать все возможные изменения, которые могут понадобиться для корректной работы.
Например, как он узнает, что после выполнения потока нужно обновится? Или события, не связанного с WM_XXX?
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39971022
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисНапример, как он узнает, что после выполнения потока нужно обновится?

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

Но курс партии на "каждая домохозяйка должна быть способной создать хоть как-то работающее
приложение в Дельфи" со мной не согласен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39971027
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, я тоже не согласен.
С трудом представляю себе архитектуру сложного приложения, где бы такой способ не вызывал лишний геморрой и баги.
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39971036
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисС трудом представляю себе архитектуру сложного приложения

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

PS: Более глобально это называется "event-driven architecture", которую почему-то может вкурить не каждый.
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39971038
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Контролёр же знает кому надо разослать уведомления о завершении потока, чтобы какие-нибудь кнопки или пункты меню изменили своё состояние
Теперь представим себе приложение, в котором 100500 разных контролах в разных формах. Чтобы это все корректно работало, они должны регистрироваться в диспетчере рассылок оповещений (я Вася, жду новостей от Пети).
Соответственно, должно быть 100500 идентификаторов Петей, и даже если базовый функционал прописан в родительской форме, на каждой дочерней должен быть перекрыт обработчик. Это и есть геморрой.
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39971046
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисТеперь представим себе приложение, в котором 100500 разных контролах в разных формах.

И все они ждут оповещений от одного и того же потока и все открыты одновременно.
Байтораздирающее зрелище.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Горячие клавиши ShortCut
    #39971047
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
И все они ждут оповещений от одного и того же потока и все открыты одновременно.
Вполне возможно, если этот поток, к примеру, отслеживает, не выдернули ли E-Token.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Горячие клавиши ShortCut
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]