...вы можете попробовать использовать StringGrid. У него имеется свойство
Objects, через которое вы можете назначать объекты. Создайте объект, содержащий
переменную типа TColor, и назначьте это Objects[col,row], что позволит иметь к
нему доступ в любое время. Назначьте событие OnDrawCell StringGrid, позволяющее
рисовать текст ячейки правильного цвета. Чтобы убедиться, что ячейка выбрана,
воспользуйтесь свойством Selection, содержащим то, что выбрал пользователь. Все
это должно выглядеть приблизительно так:
type
TStrColor = class(TObject)
public
Color: TColor; {вы могли бы также определить частные и
публичные методы доступа}end;
...
procedure TForm1.FormCreate(Sender: TObject)
var
i, j: Integer;
beginwith StringList1 dofor i := 0 to ColCount - 1
for j := 0 to RowCount - 1
Objects[i, j] := TStrColor.Create;
end;
...
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Longint;
Rect: TRect; State: TGridDrawState);
var
OldColor: TColor;
beginwith StringGrid1.Canvas dobegin
OldColor := Font.Color;
Font.Color := (StringGrid1.Objects[col, row] as TStrColor).Color;
TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[Col, Row]);
Font.Color := OldColor;
end;
end;
...
procedure TForm1.ProcessSelection(Sender: TObject);
var
i, j: Integer;
beginwith StringGrid1.Selection dofor i := left to right dofor j := top to bottom do
MessageDlg(IntToStr(i) + ',' + IntToStr(j) + '-' +
IntToStr((StringGrid1.Objects[i, j] as TStrColor).Color),
mtInformation, [mbOk], 0);
end;
Этот компонент не позволяет делать многочисленный выбор....
В статье описывается способ создания пользовательского StringGrid с возможностью покраски ячеек вручную, используя свойство Objects для назначения объектов и событие OnDrawCell для рисования текста ячейки в заданном цвете.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS