TStringGrid как отловить выделение мышкой?

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

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

TStringGrid как отловить выделение мышкой?

Сообщение resident » 25.06.2016 19:27:23

Здравствуйте!

Подскажите, как отловить выделение мышкой строки в сетке?

Пробую писать обработчики BeforeSelection, SelectCell или Selection, и начинается игра аля компьютерные вирусы - обработчик срабатывает не там где нужно: и при создании формы (SelectCell) (когда я даже не вижу форму и сетку) и при подводе мышкой из-вне на сетку без всяких выделений с других контролов. Мышью вообще не щелкаю в это время.

з.ы. Вроде в Delphi работало без всяких причуд, или я забыл какую-то тайну.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: TStringGrid как отловить выделение мышкой?

Сообщение MysticCoder » 25.06.2016 20:04:10

Юзай OnSelectCell, первый раз пропускай, в конце концов при запуске программы у тебя же выделена ячейка, вот на нее и срабатывает:)
MysticCoder
постоялец
 
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Re: TStringGrid как отловить выделение мышкой?

Сообщение resident » 25.06.2016 20:23:38

Благодарю, вроде с OnSelectCell работает. Байпас первый раз - это не наш метод. Добавил флаг, что прошло нажатие мышки. В OnSelectCell флаг сбрасываю.
Код: Выделить всё
procedure TfXml.sgNodesMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  begin
    FlagMouseDown := true;
  end;
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: TStringGrid как отловить выделение мышкой?

Сообщение Vadim » 25.06.2016 21:04:33

resident
А Вы строку в сетке как выделяете - нажимаете левой кнопкой мыши и ведёте ей по строке или щёлкаете по первой ячейке строки?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: TStringGrid как отловить выделение мышкой?

Сообщение resident » 25.06.2016 23:36:16

Я включил выделение всей строки в опциях. Так что сейчас щелкаю (сразу отпускаю кнопку) в любом месте строки, зачем в первой ячейке не знаю, когда нужно выделять целую строку. Хотя не удивился, если бы разработчики Лазаруса предложили щелкать по первому символу первой ячейки. :)
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: TStringGrid как отловить выделение мышкой?

Сообщение Vadim » 27.06.2016 18:45:16

resident
А, эвон Вы как... Я, честно говоря про эту опцию совсем и забыл. :-)
Предлагаю там же, в опциях, поставить ещё один флажок - goRowHighlight - так будет нагляднее.
Код: Выделить всё
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(StringGrid1.Row));
end;

Показывает номер текущей выделенной строки.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: TStringGrid как отловить выделение мышкой?

Сообщение resident » 28.06.2016 09:51:28

Vadim писал(а):Предлагаю там же, в опциях, поставить ещё один флажок - goRowHighlight - так будет нагляднее.

Нагляднее не стало, если вы о подсветке строки. Т.е. я не заметил вобще никаких изменений. А что должно изменится?
з.ы. Опция выбора всей строки goRowSelect попутно подсвечивает всю выбранную строку. Может это и глюк.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: TStringGrid как отловить выделение мышкой?

Сообщение Лекс Айрин » 28.06.2016 10:23:21

resident писал(а):Опция выбора всей строки goRowSelect попутно подсвечивает всю выбранную строку. Может это и глюк.


Вообще-то это НЕ глюг. Она потому так и называется, что выбирает (выделяет) всю строку.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: TStringGrid как отловить выделение мышкой?

Сообщение Vadim » 28.06.2016 10:29:50

resident
Если убрать goRowSelect, то выбранная строка ( с опцией goRowHighlight) становится нежно серого цвета. Не так ядовито... :-)
А нагляднее - становится видна та ячейка, по которой щёлкнул мышкой. Т.е. убиваем двух зайцев - есть номер строки и есть выделенная ячейка.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: TStringGrid как отловить выделение мышкой?

Сообщение resident » 28.06.2016 11:40:33

Vadim писал(а):становится нежно серого цвета. Не так ядовито...

Точно, теперь вижу, если отключить выделение строки.
Хм, вот еще нашел, если выделять таки всю строку, то можно менять цвет на любой.
Код: Выделить всё
procedure TfXml.sgNodesDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState);
  begin
    sgNodes.SelectedColor := clGreen;
  end;
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 89

Рейтинг@Mail.ru