Stringgrid

  • Автор темы orsson
  • Дата начала
Статус
Закрыто для дальнейших ответов.
O

orsson

#1
Помогите с закраской ячеек. При клике на ячейку, она должна закраситься....
 
D
#2
В событии OnDrawCell :

(Sender as TStringGrid).Canvas.Brush.Color:=clGreen;
(Sender as TStringGrid).Canvas.FillRect(Rect);

Ну допустим пусть будет зеленым.

Отслеживай активную и крась ;)
 
Z

zubr

#3
1. Создать массив или список в котором запоминать координаты ячеек (Col, Row)
2. В событии OnSelectCell заносить эти координаты в массив и вызывать метод Invalidate для перерисовки ячеек.
3. В событии OnDrawCell отрисовывать нужные ячейки из массива.

Если нужно поменять цвет фона выделенной строки то можешь воспользоваться моим компонентом. Это расширенный StringGrid, дополнительные возможности: можно менять цвета разделительных линий, шрифт фиксированных ячеек, а таже шрифт выделенной строки, цвет выделенной строки, расположение текста в ячейках (слева, справа, по центру). Компонент в присоединенном файле.
 

Вложения

O

orsson

#4
На сколько я понял, это только выделяет ячейку черным цветом. Мне так не надо...

Что бы стало понятее что мне надо: я делаю составлялку японских кроссвордов и при клике на ячейку (я так понимаю надо использовать OnClick) она должна закраситься в черный цвет. Причём, я должен видеть что закрасил.
 
D
#6
Ладненько, подготовлю небольшой демонстрационный кусочек по работе с StringGrid.
 
M

mike.dld

#7
Я такое делал, но чтобы можно было не только кликать, но и перемещать мышь с зажатой клавишей.
Если тебе нужно только нажатие, то всё довольно просто (SG = твой StringGrid):
1. объявляем двумерный массив A (динамический, если размеры сетки заранее неизвестны) размером [0..SG.RowCount-1,0..SG.RowCount-1] с элементами типа Boolean
2. в SG.OnMouseDown пишем код, получающий координаты ячейки под курсором мыши (например,
Код:
pt := SG.ScreenToClient(Mouse.CursorPos);
pt := TPoint(SG.MouseCoord(pt.X,pt.Y));
) и присваиваем элементу массива с полученными индексами обратное значение (
Код:
A[pt.X,pt.Y] := not A[pt.X,pt.Y];
); главное - не забыть проверить, что pt.X или pt.Y равно -1 (т.е. курсор не находится с области какой-либо ячейки). Ну и, собственно, SG.Invalidate;
3. SG.DefaultDrawing = false
4. в SG.OnDrawCell пишем
Код:
 with (Sender as TStringGrid).Canvas do begin
 if A[ACol,ARow] = true then
  Brush.Color := clBlack
 else
  Brush.Color := clWhite;
 FillRect(Rect);
end;
 
Статус
Закрыто для дальнейших ответов.