想实现如上图的效果,我用了StringGrid,还在上边放了个ColorDialog,想实现点击左边颜色显示的单元格,然后出现ColorDialog供我选择,我选择后,单元格变成我所选择的颜色,该用什么控件,怎么实现,我是菜鸟,请大虾说清楚点,最好有代码可以参考,先谢谢啦!

解决方案 »

  1.   

    就用stringgrid,但是你要在grid的自画事件中根据行的不同,去显示不同的单元格颜色
      

  2.   

    就用stringgrid,根据自画事件,在不同的网格内显示不同的颜色,即可。
      

  3.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids;type
      TForm1 = class(TForm)
        StringGrid1: TStringGrid;
        ColorDialog1: TColorDialog;
        procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
          Rect: TRect; State: TGridDrawState);
        procedure FormShow(Sender: TObject);
        procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
          var CanSelect: Boolean);
      private
        { Private declarations }
      public
        { Public declarations }
        str:TStrings;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      rr:TRect;
      s:string;
    begin
      rr:=self.StringGrid1.CellRect(0,ARow);
      if ARow>0 then
      begin
        s:=str.Strings[arow-1];
        self.StringGrid1.Canvas.Brush.Color:=StringToColor(s);
        self.StringGrid1.Canvas.FillRect(rr);
      end;
    end;procedure TForm1.FormShow(Sender: TObject);
    var
      i,j:Integer;
    begin
      str:=TStringList.Create;
      str.Clear;
      i:=self.StringGrid1.RowCount;
      for j:=0 to i-1 do
        str.Add('clwhite');
    end;procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
      ARow: Integer; var CanSelect: Boolean);
    begin
      if ACol=0 then
      begin
        if Self.ColorDialog1.Execute then
          str.Strings[arow-1]:=ColorToString(self.ColorDialog1.Color);
      end;
    end;
      

  4.   

    更简单的方法 ,用panelprocedure TForm1.Panel1DblClick(Sender: TObject);
    begin
      if self.ColorDialog1.Execute then
        (Sender as TPanel).Color:=self.ColorDialog1.Color;
    end;
      

  5.   

    谢谢大家,用label解决了......
    谢谢theforever(碧海情天)把复杂问题简单化,很值得学习!