//pas
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, ValEdit, ExtCtrls, StdCtrls;type
  TForm1 = class(TForm)
    Image01: TImage;
    ValueListEditor1: TValueListEditor;
    Edit1: TEdit;
    procedure ValueListEditor1DrawCell(Sender: TObject; ACol,
      ARow: Integer; Rect: TRect; State: TGridDrawState);
    procedure Image01Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ValueListEditor1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if ACol=0 then ValueListEditor1.Canvas.Draw(Rect.Left, Rect.Top, Image01.Picture.Bitmap);
end;procedure TForm1.Image01Click(Sender: TObject);
begin
edit1.text:=timetostr(now);
end;end.//obj
object Form1: TForm1
  Left = 192
  Top = 130
  Width = 979
  Height = 563
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Image01: TImage
    Left = 208
    Top = 38
    Width = 16
    Height = 22
    Picture.Data = {
      07544269746D617056040000424D560400000000000036000000280000001000
      0000160000000100180000000000200400000000000000000000000000000000
      0000FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0
      FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0808080FFFBF0FFFBF0FFFBF0FFFBF0FFFB
      F0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF080
      8080FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0
      FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0808080FFFBF0FFFBF0FFFBF0FFFBF0FFFB
      F0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF080
      8080FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0
      FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0808080FFFBF0FFFBF0FFFBF0FFFBF0FFFB
      F0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF080
      8080FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0
      FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0808080FFFBF0FFFBF0FFFBF0BCBBBA9191
      91919191919191919191919191919191919191BCBBBAFFFBF0FFFBF0FFFBF080
      8080FFFBF0FFFBF0FFFBF0919191E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3
      E3E3E3919191FFFBF0FFFBF0FFFBF0808080FFFBF0FFFBF0FFFBF0919191E3E3
      E3E3E3E3E3E3E3724229E3E3E3E3E3E3E3E3E3919191FFFBF0FFFBF0FFFBF080
      8080FFFBF0FFFBF0FFFBF0919191ECEDEDECEDEDECEDED724229ECEDEDECEDED
      ECEDED919191FFFBF0FFFBF0FFFBF0808080FFFBF0FFFBF0FFFBF0919191FBFB
      FAA7634BA7634BA7634BA7634BA7634BFBFBFA919191FFFBF0FFFBF0FFFBF080
      8080FFFBF0FFFBF0FFFBF0919191FBFBFAFBFBFAFBFBFA724229FBFBFAFBFBFA
      FBFBFA919191FFFBF0FFFBF0FFFBF0808080FFFBF0FFFBF0FFFBF0919191FCFC
      FCFCFCFCFCFCFC724229FCFCFCFCFCFCFCFCFC919191FFFBF0FFFBF0FFFBF080
      8080FFFBF0FFFBF0FFFBF0919191FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
      FCFCFC919191FFFBF0FFFBF0FFFBF0808080FFFBF0FFFBF0FFFBF0BCBBBA9191
      91919191919191919191919191919191919191BCBBBAFFFBF0FFFBF0FFFBF080
      8080FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0
      FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0808080FFFBF0FFFBF0FFFBF0FFFBF0FFFB
      F0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF080
      8080FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0
      FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0808080FFFBF0FFFBF0FFFBF0FFFBF0FFFB
      F0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF080
      8080FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0
      FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0808080FFFBF0FFFBF0FFFBF0FFFBF0FFFB
      F0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF0FFFBF080
      8080}
    Visible = False
    OnClick = Image01Click
  end
  object ValueListEditor1: TValueListEditor
    Left = 32
    Top = 88
    Width = 273
    Height = 105
    DefaultRowHeight = 20
    Strings.Strings = (
      '      aaa='
      '      bbb='
      '      ccc='
      '')
    TabOrder = 0
    OnDrawCell = ValueListEditor1DrawCell
    ColWidths = (
      150
      100)
  end
  object Edit1: TEdit
    Left = 48
    Top = 40
    Width = 121
    Height = 21
    TabOrder = 1
    Text = 'Edit1'
  end
end

解决方案 »

  1.   

    补充:点击 TValueListEditor 左边的图标如何响应事件?
      

  2.   

    将你的代码改为:......var
      Form1: TForm1;implementation
    var re:boolean;
        iRow: Integer;
    {$R *.dfm}procedure TForm1.ValueListEditor1DrawCell(Sender: TObject; ACol,
      ARow: Integer; Rect: TRect; State: TGridDrawState);
    begin
      if ACol=0 then ValueListEditor1.Canvas.Draw(Rect.Left, Rect.Top, Image01.Picture.Bitmap);
    end;procedure TForm1.ValueListEditor1SelectCell(Sender: TObject; ACol,
      ARow: Integer; var CanSelect: Boolean);
    begin
      if ACol=0 then begin
        re:=true;
        iRow:=ARow;
      end;
    end;procedure TForm1.ValueListEditor1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      if re then begin
        re:=false;
        if x<Image01.Width then
          edit1.text:=inttostr(iRow)+'行"+"被点击';
      end;
    end;end.
      

  3.   

    谢谢 gzzai,所见略同,只是设置了fixedcols:=1后 不会响应 ValueListEditor1SelectCell事件,无法达到效果,有一些遗憾。
      

  4.   

    动动源码:
    将Vcl.Grids.pas(DXE2) 或是 Grids.pas(D7) 拷入当前目录,并加入工程编辑Vcl.Grids.pas(DXE2) 或是 Grids.pas(D7) 

    procedure TCustomGrid.CalcFixedInfo(var DrawInfo: TGridDrawInfo);
    procedure TCustomGrid.Initialize;
    的代码中的FixedCols改为1
    OK
      

  5.   

    即使设置了fixedcols:=1,不按你那样改,还是有其他办法的,毕竟,人是活的嘛。