TStringGrid как отловить выделение мышкой?
Модератор: Модераторы
TStringGrid как отловить выделение мышкой?
Здравствуйте!
Подскажите, как отловить выделение мышкой строки в сетке?
Пробую писать обработчики BeforeSelection, SelectCell или Selection, и начинается игра аля компьютерные вирусы - обработчик срабатывает не там где нужно: и при создании формы (SelectCell) (когда я даже не вижу форму и сетку) и при подводе мышкой из-вне на сетку без всяких выделений с других контролов. Мышью вообще не щелкаю в это время.
з.ы. Вроде в Delphi работало без всяких причуд, или я забыл какую-то тайну.
Подскажите, как отловить выделение мышкой строки в сетке?
Пробую писать обработчики BeforeSelection, SelectCell или Selection, и начинается игра аля компьютерные вирусы - обработчик срабатывает не там где нужно: и при создании формы (SelectCell) (когда я даже не вижу форму и сетку) и при подводе мышкой из-вне на сетку без всяких выделений с других контролов. Мышью вообще не щелкаю в это время.
з.ы. Вроде в Delphi работало без всяких причуд, или я забыл какую-то тайну.
-
MysticCoder
- постоялец
- Сообщения: 154
- Зарегистрирован: 14.09.2013 00:20:28
Юзай OnSelectCell, первый раз пропускай, в конце концов при запуске программы у тебя же выделена ячейка, вот на нее и срабатывает:)
Благодарю, вроде с OnSelectCell работает. Байпас первый раз - это не наш метод. Добавил флаг, что прошло нажатие мышки. В OnSelectCell флаг сбрасываю.
Код: Выделить всё
procedure TfXml.sgNodesMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
FlagMouseDown := true;
end;resident
А Вы строку в сетке как выделяете - нажимаете левой кнопкой мыши и ведёте ей по строке или щёлкаете по первой ячейке строки?
А Вы строку в сетке как выделяете - нажимаете левой кнопкой мыши и ведёте ей по строке или щёлкаете по первой ячейке строки?
Я включил выделение всей строки в опциях. Так что сейчас щелкаю (сразу отпускаю кнопку) в любом месте строки, зачем в первой ячейке не знаю, когда нужно выделять целую строку. Хотя не удивился, если бы разработчики Лазаруса предложили щелкать по первому символу первой ячейки. 
resident
А, эвон Вы как... Я, честно говоря про эту опцию совсем и забыл.
Предлагаю там же, в опциях, поставить ещё один флажок - goRowHighlight - так будет нагляднее.
Показывает номер текущей выделенной строки.
А, эвон Вы как... Я, честно говоря про эту опцию совсем и забыл.
Предлагаю там же, в опциях, поставить ещё один флажок - goRowHighlight - так будет нагляднее.
Код: Выделить всё
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
ShowMessage(IntToStr(StringGrid1.Row));
end;Показывает номер текущей выделенной строки.
Vadim писал(а):Предлагаю там же, в опциях, поставить ещё один флажок - goRowHighlight - так будет нагляднее.
Нагляднее не стало, если вы о подсветке строки. Т.е. я не заметил вобще никаких изменений. А что должно изменится?
з.ы. Опция выбора всей строки goRowSelect попутно подсвечивает всю выбранную строку. Может это и глюк.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
resident писал(а):Опция выбора всей строки goRowSelect попутно подсвечивает всю выбранную строку. Может это и глюк.
Вообще-то это НЕ глюг. Она потому так и называется, что выбирает (выделяет) всю строку.
resident
Если убрать goRowSelect, то выбранная строка ( с опцией goRowHighlight) становится нежно серого цвета. Не так ядовито...
А нагляднее - становится видна та ячейка, по которой щёлкнул мышкой. Т.е. убиваем двух зайцев - есть номер строки и есть выделенная ячейка.
Если убрать goRowSelect, то выбранная строка ( с опцией goRowHighlight) становится нежно серого цвета. Не так ядовито...
А нагляднее - становится видна та ячейка, по которой щёлкнул мышкой. Т.е. убиваем двух зайцев - есть номер строки и есть выделенная ячейка.
Vadim писал(а):становится нежно серого цвета. Не так ядовито...
Точно, теперь вижу, если отключить выделение строки.
Хм, вот еще нашел, если выделять таки всю строку, то можно менять цвет на любой.
Код: Выделить всё
procedure TfXml.sgNodesDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState);
begin
sgNodes.SelectedColor := clGreen;
end; 