Я пытаюсь написать индивидуальный выбор даты (календарь). Даты будут отображаться на stringgrid. Я пытаюсь заполнить выбранную ячейку специальным цветом и сделать выделенным celltext жирным.Как заполнить ячейку сетки строк пользовательским цветом?
Вот мой код:
type
TStringGrid = Class(Vcl.Grids.TStringGrid)
private
FHideFocusRect: Boolean;
protected
Procedure Paint;override;
public
Property HideFocusRect:Boolean Read FHideFocusRect Write FHideFocusRect;
End;
TfrmNepaliCalendar = class(TForm)
...
...
...
end;
procedure TfrmNepaliCalendar.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if gdSelected in State then begin
StringGrid.Canvas.Brush.Color := $00940A4B;
StringGrid.Canvas.FillRect(Rect);
StringGrid.Canvas.Font.Style := [fsBold];
StringGrid.Canvas.Font.Color := clHighlightText;
StringGrid.Canvas.TextOut(Rect.Left + 3, Rect.Top + 5, StringGrid.Cells[ACol,ARow]);
StringGrid.HideFocusRect := True;
end;
end;
{ TStringGrid }
procedure TStringGrid.Paint;
var
LRect: TRect;
begin
inherited;
if HideFocusRect then begin
LRect := CellRect(Col,Row);
if DrawingStyle = gdsThemed then InflateRect(LRect,-1,-1);
DrawFocusrect(Canvas.Handle,LRect)
end;
end;
выход, я получаю:
Проблема № 1: Мне нужно, чтобы скрыть, что нежелательный прямоугольник появляться как граница для выбранной ячейки
Проблема № 2: Избегайте фон ячейки вырезку
Я удалил свой ответ по вашему предложению. Однако, я полагаю, вы можете использовать предложение из своей части в своем ответе. 'StringGrid.Canvas.FillRect (TStringGrid (Sender) .CellRect (ACol, ARow));' кажется более естественным, чем 'Rect.Left: = Rect.Left-4;'. Это может помочь ОП. –
@ asd-tm О, это не было мое предложение удалить ваш ответ. Без стандартного рисования -4 больше не требуется! Вызов функции CellRect(), чтобы изменить свойство 'Left', похоже на чрезмерное использование в методе« Paint ». Если вы посмотрите в исходном коде, вы увидите, что 'ARect.Left' будет увеличен с буквальным« 4 ». Не могу сказать номер строки, я больше не открываю его. –
О, нет, Том, я тебя не обвиняю. Более того, я благодарю вас за ваше предложение. Теперь я получил ваше мнение о «4» буквальном и подтвердил ваш ответ. –