Вопросы по LCL
Модератор: Модераторы
Re: Вопросы по LCL
тогда экшен не будет доступен из меню. Может есть какойнибудь механизм только с шорткатами, без Enable:=false?
Re: Вопросы по LCL
Проверяйте на фокус в методе Эксекуте
Код: Выделить всё
procedure TForm1.Action1Execute(Sender: TObject);
begin
if Edit1.Focused then
Exit;
...
end;
Re: Вопросы по LCL
тогда из меню работать тоже не будет). сделаю по первому варианту
Re: Вопросы по LCL
Лучше создать несколько ActionList со своими экшнами для каждой из частей UI и переключать их свойство TActionList.State в зависимости от перехода фокуса.
Re: Вопросы по LCL
UI все время один, но к нему иногда добавляются немодальные мелочи, разный набор экшенов по моему смысла делать нет.
По задумке весь интерфейс читается из конфигурационных файлов, чтобы юзер мог переделать под себя. Если усложнить полбзователю жизнь еще и группировками в этих файлах - он ниче не сможет настроить и задумка пропадет.
По задумке весь интерфейс читается из конфигурационных файлов, чтобы юзер мог переделать под себя. Если усложнить полбзователю жизнь еще и группировками в этих файлах - он ниче не сможет настроить и задумка пропадет.
Re: Вопросы по LCL
zub писал(а):Как запретить некоторому TAction выполняться по шорткату?
Например есть экшен с шорткатом на кнопку delete - удаляет выделенный пользователем объект на чертеже. Нужно сделать чтоб когда фокус например в какомлибо TEdit - экшен не выполнялся по нажатию delete, а из меню и тулбаров был доступен.
https://forums.embarcadero.com/thread.j ... &tstart=89
Сам не пробовал, но судя по wiki должно поддерживаться в Lazarus.
Re: Вопросы по LCL
Спасибо! попробую
Добавлено спустя 27 минут 15 секунд:
Работает
Добавлено спустя 27 минут 15 секунд:
Работает
Re: Вопросы по LCL
Снова появились вопросы, на этот раз по 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`ом вроде нет.
Re: Вопросы по LCL
Еще не понял как поймать клик на иконке в csOwnerDraw`нутом TComboBoxe`е? Изза такой "мелочи" придется городить свой TComboBox?
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
Re: Вопросы по LCL
zub писал(а):Еще не понял как поймать клик на иконке в csOwnerDraw`нутом TComboBoxe`е? Изза такой "мелочи" придется городить свой TComboBox?
Ловите просто клик и проверяйте координаты курсора.
Re: Вопросы по LCL
>>Ловите просто клик и проверяйте координаты курсора.
а как запретить выделение кликнутого итема и сворачивание списка? мне нужно чтоб при клике на иконке рядом с итемом происходило некое действие, но итем не становился выбраным и развернутое окно не сворачиволось
а как запретить выделение кликнутого итема и сворачивание списка? мне нужно чтоб при клике на иконке рядом с итемом происходило некое действие, но итем не становился выбраным и развернутое окно не сворачиволось
Re: Вопросы по LCL
если сделать так:
То работает только для Пробела и клавиши 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. Так что если решите проблему, будет интересно узнать почему не сработало с ЛКМ.
Re: Вопросы по LCL
То работает только для Пробела и клавиши Enter, почему не сработало с VK_LBUTTON не понятно....
насколько я понял проблему можно решить только сделав свой комбобокс, выделение итема и сворачивание окна делает графсистема ОС и с помошью LCL это не проконтролировать((
Re: Вопросы по LCL
насколько я понял проблему можно решить только сделав свой комбобокс, выделение итема и сворачивание окна делает графсистема ОС и с помошью LCL это не проконтролировать((
Ну по идее как бы да, но ведь ОС должна свернуть (закрыть) его когда? Когда мы типа выбрали элемент.. можем мы его выбрать Либо ЛКМ, Либо пробелом ну и наконец энтером. в последних двух вариациях все сработало. Почему? - ведь ОС посылается сигнал, то что Мы ВЫБРАЛИ иди работай, ОС бегом пытается нам услужить и сворачивает все это дело. Но если мы в момент нажатия (выделения) обманываем и говорим а мы ничего не сделали... ОС и не должна ничего получить ни кокого уведомления мол произошло ВЫДЕЛЕНИЕ... Правильно?.. ну вроде по логике все вроде хорошо. Так почему обман с ЛКМ не проходит.? Получается что обработка Мыши и клавиатуры в ComboBox1 реализованы по разному, либо сообщение которое пришло от VK_LBUTTON прошло мимо ComboBox1KeyDown.... вот тут мне кажется зарыта кошка...
Поставте точку остановки на этом методе.. при клике пробелом, Энтера вы поподаете в этот обработчик, а при ЛКМ нет... тобишь VK_LBUTTON вообще мы не отловили.... а должны были (наверное) вот еслиб отловили То все было бы хорошо.
Re: Вопросы по LCL
клик по распахнутому окошку приходит соответственно этому окошку, в комбобокс он не приходит. Все зависит от глубины перехвата событий LCL`ю, в данном случае она (глубина перехвата
) не достаточна. В VCl насолько я понял дела обстоят также((
во вложении на гиф-анимации поведение которое мне бы хотелось получить
во вложении на гиф-анимации поведение которое мне бы хотелось получить
У вас нет необходимых прав для просмотра вложений в этом сообщении.
