Вопросы по LCL
Модератор: Модераторы
тогда экшен не будет доступен из меню. Может есть какойнибудь механизм только с шорткатами, без Enable:=false?
Проверяйте на фокус в методе Эксекуте
Код: Выделить всё
procedure TForm1.Action1Execute(Sender: TObject);
begin
if Edit1.Focused then
Exit;
...
end;
тогда из меню работать тоже не будет). сделаю по первому варианту
Лучше создать несколько ActionList со своими экшнами для каждой из частей UI и переключать их свойство TActionList.State в зависимости от перехода фокуса.
UI все время один, но к нему иногда добавляются немодальные мелочи, разный набор экшенов по моему смысла делать нет.
По задумке весь интерфейс читается из конфигурационных файлов, чтобы юзер мог переделать под себя. Если усложнить полбзователю жизнь еще и группировками в этих файлах - он ниче не сможет настроить и задумка пропадет.
По задумке весь интерфейс читается из конфигурационных файлов, чтобы юзер мог переделать под себя. Если усложнить полбзователю жизнь еще и группировками в этих файлах - он ниче не сможет настроить и задумка пропадет.
zub писал(а):Как запретить некоторому TAction выполняться по шорткату?
Например есть экшен с шорткатом на кнопку delete - удаляет выделенный пользователем объект на чертеже. Нужно сделать чтоб когда фокус например в какомлибо TEdit - экшен не выполнялся по нажатию delete, а из меню и тулбаров был доступен.
https://forums.embarcadero.com/thread.j ... &tstart=89
Сам не пробовал, но судя по wiki должно поддерживаться в Lazarus.
Спасибо! попробую
Добавлено спустя 27 минут 15 секунд:
Работает
Добавлено спустя 27 минут 15 секунд:
Работает
Снова появились вопросы, на этот раз по TListView.
имеется ListView с MultiSelect:=true, ViewStyle:=vsReport, RowSelect:=true. Как заставить его не сбрасывать текущее выделение и не выделять кликнутую строку при кликах в некоторых столбцах?
Добавлено спустя 20 часов 19 минут 15 секунд:
посмотрел в VCL, там всё что мне надо делается в ListView.OnChanging. почему ListView.OnChanging нет в LCL? других способов управления select`ом вроде нет.
имеется ListView с MultiSelect:=true, ViewStyle:=vsReport, RowSelect:=true. Как заставить его не сбрасывать текущее выделение и не выделять кликнутую строку при кликах в некоторых столбцах?
Добавлено спустя 20 часов 19 минут 15 секунд:
посмотрел в VCL, там всё что мне надо делается в ListView.OnChanging. почему ListView.OnChanging нет в LCL? других способов управления select`ом вроде нет.
Еще не понял как поймать клик на иконке в csOwnerDraw`нутом TComboBoxe`е? Изза такой "мелочи" придется городить свой TComboBox?
>>Ловите просто клик и проверяйте координаты курсора.
а как запретить выделение кликнутого итема и сворачивание списка? мне нужно чтоб при клике на иконке рядом с итемом происходило некое действие, но итем не становился выбраным и развернутое окно не сворачиволось
а как запретить выделение кликнутого итема и сворачивание списка? мне нужно чтоб при клике на иконке рядом с итемом происходило некое действие, но итем не становился выбраным и развернутое окно не сворачиволось
если сделать так:
То работает только для Пробела и клавиши Enter, почему не сработало с VK_LBUTTON не понятно....
Смысл прост, при клике(ну работает только при клике Пробелом или Энтером) мы как бы обманываем ComboBox1 и говорим, мы ничего не нажимали
Списко констант находится в модуле LCLType. Так что если решите проблему, будет интересно узнать почему не сработало с ЛКМ.
Код: Выделить всё
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_LBUTTON) or
(Key = VK_SPACE) or
(Key = VK_RETURN)
then Key:=0;
end;
То работает только для Пробела и клавиши Enter, почему не сработало с VK_LBUTTON не понятно....
Смысл прост, при клике(ну работает только при клике Пробелом или Энтером) мы как бы обманываем ComboBox1 и говорим, мы ничего не нажимали
Списко констант находится в модуле LCLType. Так что если решите проблему, будет интересно узнать почему не сработало с ЛКМ.
То работает только для Пробела и клавиши Enter, почему не сработало с VK_LBUTTON не понятно....
насколько я понял проблему можно решить только сделав свой комбобокс, выделение итема и сворачивание окна делает графсистема ОС и с помошью LCL это не проконтролировать((
насколько я понял проблему можно решить только сделав свой комбобокс, выделение итема и сворачивание окна делает графсистема ОС и с помошью LCL это не проконтролировать((
Ну по идее как бы да, но ведь ОС должна свернуть (закрыть) его когда? Когда мы типа выбрали элемент.. можем мы его выбрать Либо ЛКМ, Либо пробелом ну и наконец энтером. в последних двух вариациях все сработало. Почему? - ведь ОС посылается сигнал, то что Мы ВЫБРАЛИ иди работай, ОС бегом пытается нам услужить и сворачивает все это дело. Но если мы в момент нажатия (выделения) обманываем и говорим а мы ничего не сделали... ОС и не должна ничего получить ни кокого уведомления мол произошло ВЫДЕЛЕНИЕ... Правильно?.. ну вроде по логике все вроде хорошо. Так почему обман с ЛКМ не проходит.? Получается что обработка Мыши и клавиатуры в ComboBox1 реализованы по разному, либо сообщение которое пришло от VK_LBUTTON прошло мимо ComboBox1KeyDown.... вот тут мне кажется зарыта кошка...
Поставте точку остановки на этом методе.. при клике пробелом, Энтера вы поподаете в этот обработчик, а при ЛКМ нет... тобишь VK_LBUTTON вообще мы не отловили.... а должны были (наверное) вот еслиб отловили То все было бы хорошо.
клик по распахнутому окошку приходит соответственно этому окошку, в комбобокс он не приходит. Все зависит от глубины перехвата событий LCL`ю, в данном случае она (глубина перехвата
) не достаточна. В VCl насолько я понял дела обстоят также((
во вложении на гиф-анимации поведение которое мне бы хотелось получить
во вложении на гиф-анимации поведение которое мне бы хотелось получить
У вас нет необходимых прав для просмотра вложений в этом сообщении.
