Вопросы по LCL

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Re: Вопросы по LCL

Сообщение zub »

тогда экшен не будет доступен из меню. Может есть какойнибудь механизм только с шорткатами, без Enable:=false?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Re: Вопросы по LCL

Сообщение Mr.Smart »

Проверяйте на фокус в методе Эксекуте

Код: Выделить всё

procedure TForm1.Action1Execute(Sender: TObject);
begin
  if Edit1.Focused then
   Exit;
  ...
end;
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Re: Вопросы по LCL

Сообщение zub »

тогда из меню работать тоже не будет). сделаю по первому варианту
v-t-l
энтузиаст
Сообщения: 744
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Вопросы по LCL

Сообщение v-t-l »

Лучше создать несколько ActionList со своими экшнами для каждой из частей UI и переключать их свойство TActionList.State в зависимости от перехода фокуса.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Re: Вопросы по LCL

Сообщение zub »

UI все время один, но к нему иногда добавляются немодальные мелочи, разный набор экшенов по моему смысла делать нет.
По задумке весь интерфейс читается из конфигурационных файлов, чтобы юзер мог переделать под себя. Если усложнить полбзователю жизнь еще и группировками в этих файлах - он ниче не сможет настроить и задумка пропадет.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Re: Вопросы по LCL

Сообщение Odyssey »

zub писал(а):Как запретить некоторому TAction выполняться по шорткату?
Например есть экшен с шорткатом на кнопку delete - удаляет выделенный пользователем объект на чертеже. Нужно сделать чтоб когда фокус например в какомлибо TEdit - экшен не выполнялся по нажатию delete, а из меню и тулбаров был доступен.

https://forums.embarcadero.com/thread.j ... &tstart=89
Сам не пробовал, но судя по wiki должно поддерживаться в Lazarus.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Re: Вопросы по LCL

Сообщение zub »

Спасибо! попробую

Добавлено спустя 27 минут 15 секунд:
Работает
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Re: Вопросы по LCL

Сообщение zub »

Снова появились вопросы, на этот раз по TListView.
имеется ListView с MultiSelect:=true, ViewStyle:=vsReport, RowSelect:=true. Как заставить его не сбрасывать текущее выделение и не выделять кликнутую строку при кликах в некоторых столбцах?

Добавлено спустя 20 часов 19 минут 15 секунд:
посмотрел в VCL, там всё что мне надо делается в ListView.OnChanging. почему ListView.OnChanging нет в LCL? других способов управления select`ом вроде нет.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Re: Вопросы по LCL

Сообщение zub »

Еще не понял как поймать клик на иконке в csOwnerDraw`нутом TComboBoxe`е? Изза такой "мелочи" придется городить свой TComboBox?
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Re: Вопросы по LCL

Сообщение Nik »

zub писал(а):Еще не понял как поймать клик на иконке в csOwnerDraw`нутом TComboBoxe`е? Изза такой "мелочи" придется городить свой TComboBox?

Ловите просто клик и проверяйте координаты курсора.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Re: Вопросы по LCL

Сообщение zub »

>>Ловите просто клик и проверяйте координаты курсора.
а как запретить выделение кликнутого итема и сворачивание списка? мне нужно чтоб при клике на иконке рядом с итемом происходило некое действие, но итем не становился выбраным и развернутое окно не сворачиволось
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Re: Вопросы по LCL

Сообщение Maxizar »

если сделать так:

Код: Выделить всё

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 не понятно.... :cry:

Смысл прост, при клике(ну работает только при клике Пробелом или Энтером) мы как бы обманываем ComboBox1 и говорим, мы ничего не нажимали :)

Списко констант находится в модуле LCLType. Так что если решите проблему, будет интересно узнать почему не сработало с ЛКМ.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Re: Вопросы по LCL

Сообщение zub »

То работает только для Пробела и клавиши Enter, почему не сработало с VK_LBUTTON не понятно....

насколько я понял проблему можно решить только сделав свой комбобокс, выделение итема и сворачивание окна делает графсистема ОС и с помошью LCL это не проконтролировать((
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Re: Вопросы по LCL

Сообщение Maxizar »

насколько я понял проблему можно решить только сделав свой комбобокс, выделение итема и сворачивание окна делает графсистема ОС и с помошью LCL это не проконтролировать((


Ну по идее как бы да, но ведь ОС должна свернуть (закрыть) его когда? Когда мы типа выбрали элемент.. можем мы его выбрать Либо ЛКМ, Либо пробелом ну и наконец энтером. в последних двух вариациях все сработало. Почему? - ведь ОС посылается сигнал, то что Мы ВЫБРАЛИ иди работай, ОС бегом пытается нам услужить и сворачивает все это дело. Но если мы в момент нажатия (выделения) обманываем и говорим а мы ничего не сделали... ОС и не должна ничего получить ни кокого уведомления мол произошло ВЫДЕЛЕНИЕ... Правильно?.. ну вроде по логике все вроде хорошо. Так почему обман с ЛКМ не проходит.? Получается что обработка Мыши и клавиатуры в ComboBox1 реализованы по разному, либо сообщение которое пришло от VK_LBUTTON прошло мимо ComboBox1KeyDown.... вот тут мне кажется зарыта кошка...
Поставте точку остановки на этом методе.. при клике пробелом, Энтера вы поподаете в этот обработчик, а при ЛКМ нет... тобишь VK_LBUTTON вообще мы не отловили.... а должны были (наверное) вот еслиб отловили То все было бы хорошо.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Re: Вопросы по LCL

Сообщение zub »

клик по распахнутому окошку приходит соответственно этому окошку, в комбобокс он не приходит. Все зависит от глубины перехвата событий LCL`ю, в данном случае она (глубина перехвата :D ) не достаточна. В VCl насолько я понял дела обстоят также((
во вложении на гиф-анимации поведение которое мне бы хотелось получить
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить