Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Stringgrid
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - FAQ
orsson
Помогите с закраской ячеек. При клике на ячейку, она должна закраситься....
DZX
В событии OnDrawCell :

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

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

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

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

Что бы стало понятее что мне надо: я делаю составлялку японских кроссвордов и при клике на ячейку (я так понимаю надо использовать OnClick) она должна закраситься в черный цвет. Причём, я должен видеть что закрасил.
orsson
Предидущий пост был DZX'у.
DZX
Ладненько, подготовлю небольшой демонстрационный кусочек по работе с StringGrid.
mike.dld
Я такое делал, но чтобы можно было не только кликать, но и перемещать мышь с зажатой клавишей.
Если тебе нужно только нажатие, то всё довольно просто (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;
Guest_Anton_*
Как заполнить матрицу stringgrid из файла ?
Guest
Пож-ста отправте на asorok@mail.ru
Guest_Anton_*
на asorok@mail.ru
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2009 IPS, Inc.