【问题标题】:How can I customize different line colors and different font colors in the same StringGrid? [duplicate]如何在同一个 StringGrid 中自定义不同的线条颜色和不同的字体颜色? [复制]
【发布时间】:2020-06-30 03:24:11
【问题描述】:

我的目标是自定义一个带有交替颜色线条的 StringGrid;用一种颜色的字母自定义行和列标题,用另一种颜色的字母自定义其他单元格;一些单元格由于其内容而被涂成某种颜色,保持其内容不变。

我已经尝试更改以下属性设置:

TStringGrid.DefaultDrawing、TStringGrid.DrawingStyle、TStringGrid.Canvas.Brush.Color、TStrinGrid.Color、TSringGrid.Font.Color、TStringGrid.FixedColor、TStringGrig.Cells [ACol、ARow]、TStringGrid.Canvas.FillRect 和事件: TStringGrid.OnDrawCell & TForm.OnCreate。但没有一个奏效。

当我画一条线时,它们都用相同的颜色绘制,当我在一个单元格中包含文本时,其他单元格中的所有文本都用相同的颜色绘制。

我正在尝试这样做

创建Form1时,StringGrid的设计必须具备以下特点:

  • ColCount:= 32;
  • 行数:= 13;
  • FixedCols:= 1;
  • FixedRows := 1;
  • FixedColor := 深灰色(Col = 0 & Row = 0);
  • 固定 Col 填充 := Col(1) = “01”, Col(2) = “02”, Col(3) = “03”, ... Col (31) = “31” // (字体颜色 := clYellow);
  • 固定行已填充:= 行 (1) = “一月”,行(2) = “二月”,行(3) = “三月”,...行(12) = “十二月” // (字体颜色 := clGreen);
  • 行必须以交替颜色填充:= 奇数和偶数,例如:1、3、5、...浅蓝色 // 和:2、4、6、...浅灰色;

Form1中有一个Edit组件(Edit1)可以输入年份。输入年份时,所有单元格必须填写如下:

  • 例如:2020 年:
  • 一月 = Cells[1, 1] := “Wed”, Cells[2,1] := “Thu”, Cells[3,1] := “Fri”... Cells[31, 1]: = “Fri” // (字体颜色 := clWhite);
  • 二月 = Cells[1, 2] := “Sat”, Cells[2, 2] := “Sun”, Cells[3, 2] := “Mon”... Cells[29, 1] : =“星期六”//(字体颜色:= clWhite);直到 12 月...(如果更改年份 (Edit1),那也必须更改)。
  • Fixed Col 和 Fixed Row 的字体颜色必须保持为 clYellow 和 clGreen;

Form1中还有一个Edit组件(Edit2)用于输入假日日期(例如:2020年12月25日)。因此,该单元格应将其颜色更改为 clRed,并保留文本 Cell[25, 12] := “Fri”。

如果有人可以帮助我解决这个问题,我将非常高兴。我没有要显示的代码,因为我尝试了太多次,并且一直在更改我的代码,试图找到一种方法。

抱歉,我无法打印任何图片,因为这是我在 StackOverflow 中的第一个出版物。

【问题讨论】:

  • 您是否看过许多使用OnDrawCell 提供不同单元格颜色的示例?
  • 有很多使用 OnDrawCell 和 TStringGrid 的例子。说你已经尝试了很多事情,但没有包括一个似乎相当难以置信。还不清楚为什么您将自己的话格式化为块引用,用于引用其他人的话。你能edit你的帖子提供一个你已经厌倦但不起作用的示例吗?。
  • 这能回答你的问题吗? Change color of text in a TStringGrid cell
  • 我可能错了,如果我错了,我很抱歉,但你的帖子似乎是家庭作业。为你做功课对你一点好处都没有。另外,没有明确的问题,但我想您主要是在寻求有关如何更改背景和文本颜色的帮助。以前有人问过这个问题,我链接到一个同时处理这两个问题的问题。对于其他需求,例如如何确定一年/月/周的第一天的工作日以及如何保存和检索假期日期,欢迎您将具体问题发布为新帖子。
  • 对不起,如果我没有正确提出问题。这是我第一次来 Stackoverflow,我还在学习这里的工作原理。

标签: delphi


【解决方案1】:

在 StringGrid 单元格中使用不同颜色的小示例。您可以使用自己的规则定义颜色

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  cn: TCanvas;
begin
  cn := TStringGrid(Sender).Canvas;
  if gdFixed in State then
     cn.Brush.Color := clYellow
  else
     cn.Brush.Color := RGB(64 * ACol, 255 - 64 * ARow, Random(256));
  cn.FillRect(Rect);
  cn.TextOut(Rect.Left + 2, Rect.Top + 2, Format('%d %d', [ ACol, ARow]));
end;

【讨论】:

  • 这并不能完全满足我的需要,但是,我将研究您的示例并尝试使其适应我的需要。感谢您的回答。
猜你喜欢
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
相关资源
最近更新 更多