Вопросы по LCL

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

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

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

Сообщение zub » 20.01.2011 15:06:06

тогда экшен не будет доступен из меню. Может есть какойнибудь механизм только с шорткатами, без Enable:=false?
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Mr.Smart » 20.01.2011 16:27:16

Проверяйте на фокус в методе Эксекуте
Код: Выделить всё
procedure TForm1.Action1Execute(Sender: TObject);
begin
  if Edit1.Focused then
   Exit;
  ...
end;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение zub » 20.01.2011 16:32:26

тогда из меню работать тоже не будет). сделаю по первому варианту
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение v-t-l » 21.01.2011 09:58:49

Лучше создать несколько ActionList со своими экшнами для каждой из частей UI и переключать их свойство TActionList.State в зависимости от перехода фокуса.
v-t-l
энтузиаст
 
Сообщения: 742
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

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

Сообщение zub » 21.01.2011 10:59:05

UI все время один, но к нему иногда добавляются немодальные мелочи, разный набор экшенов по моему смысла делать нет.
По задумке весь интерфейс читается из конфигурационных файлов, чтобы юзер мог переделать под себя. Если усложнить полбзователю жизнь еще и группировками в этих файлах - он ниче не сможет настроить и задумка пропадет.
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Odyssey » 21.01.2011 13:28:59

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

https://forums.embarcadero.com/thread.j ... &tstart=89
Сам не пробовал, но судя по wiki должно поддерживаться в Lazarus.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

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

Сообщение zub » 21.01.2011 13:54:16

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

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

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

Сообщение zub » 14.04.2011 00:43:13

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

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

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

Сообщение zub » 16.05.2011 21:43:12

Еще не понял как поймать клик на иконке в csOwnerDraw`нутом TComboBoxe`е? Изза такой "мелочи" придется городить свой TComboBox?
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Nik » 17.05.2011 10:37:43

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

Ловите просто клик и проверяйте координаты курсора.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

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

Сообщение zub » 17.05.2011 11:02:59

>>Ловите просто клик и проверяйте координаты курсора.
а как запретить выделение кликнутого итема и сворачивание списка? мне нужно чтоб при клике на иконке рядом с итемом происходило некое действие, но итем не становился выбраным и развернутое окно не сворачиволось
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Maxizar » 17.05.2011 12:09:44

если сделать так:
Код: Выделить всё
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. Так что если решите проблему, будет интересно узнать почему не сработало с ЛКМ.
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

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

Сообщение zub » 17.05.2011 12:33:19

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

насколько я понял проблему можно решить только сделав свой комбобокс, выделение итема и сворачивание окна делает графсистема ОС и с помошью LCL это не проконтролировать((
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Maxizar » 17.05.2011 12:46:04

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


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

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

Сообщение zub » 17.05.2011 14:46:32

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

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 230

Рейтинг@Mail.ru