全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2293
推到 Plurk!
推到 Facebook!

如何控制stringgrid某一列的颜色

尚未結案
huyang
一般會員


發表:23
回覆:26
積分:9
註冊:2003-11-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-11 18:12:37 IP:61.150.xxx.xxx 未訂閱
如何控制stringgrid某一列的颜色
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-11 18:25:27 IP:202.39.xxx.xxx 未訂閱
參考 Peter Below 大大的兩個解答: http://www.lmc-mediaagentur.de/dpool/tips/0520.htm 1.
type
  TGridCracker = Class( TStringGrid );
  {required to access protected method InvalidateRow}    procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
  with TGridCracker( Sender as TStringGrid ) do
  begin
    InvalidateRow( Row );
    InvalidateRow( aRow );
  end;
end;    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
  grid: TStringGrid;
begin
  if gdFixed In State then
    Exit;
  grid := Sender As TStringGrid;
  if grid.Row = aRow then
  begin
    with Grid.Canvas.Brush do
    begin
      Color := $C0FFFF;  {pale yellow}
      Style := bsSolid;
    end;
    grid.Canvas.FillRect( Rect );
    grid.Canvas.Font.Color := clBlack;
    grid.Canvas.TextRect( Rect, Rect.Left   2, Rect.Top   2, grid.Cells[acol, arow]);
    Grid.Canvas.Brush := grid.Brush;
  end;
end;
2.
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls, Grids;    const
  UM_INVALIDATEROW = WM_USER   321;
type
  TForm1 = class(TForm)
    StatusBar: TStatusBar;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Label1: TLabel;
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
                                                                State: TGridDrawState);
    procedure StringGrid1Enter(Sender: TObject);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
    procedure StringGrid1Exit(Sender: TObject);
  private
    { Private declarations }
    FGridActive: Boolean;
    procedure UMInvalidateRow( var msg: TMessage ); message UM_INVALIDATEROW;
  public
    { Public declarations }
  end;    var
  Form1: TForm1;
  dummy: Integer;    implementation    {$R *.DFM}    type
  TGridCracker = class( TStringgrid );  { gives access to protected methods }    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  grid: TStringgrid;
begin
  {Task: color the current row}
  grid := Sender as TStringgrid;
  if FGridActive and (aRow = grid.Row) and (aCol >= grid.FixedCols) then 
  begin
    grid.Canvas.brush.Color := clBlue;
    grid.canvas.font.color := clWhite;
    grid.canvas.FillRect( Rect );
    InflateRect( rect, - 2, - 2 );
    grid.Canvas.TextRect( Rect, rect.left, rect.top, grid.cells[aCol, aRow]);
  end
  else
  if (gdSelected In State) and not grid.Focused then
  begin
    grid.Canvas.brush.Color := grid.color;
    grid.canvas.font.color := grid.font.color;
    grid.canvas.FillRect( Rect );
    InflateRect( rect, - 2, - 2 );
    grid.Canvas.TextRect( Rect, rect.left, rect.top, grid.cells[aCol, aRow]);
  end;
end;    procedure TForm1.StringGrid1Enter(Sender: TObject);
begin
  if Sender is TStringgrid then
    with TGridCracker( sender ) do
      PostMessage( self.handle, UM_INVALIDATEROW, Row, Integer(sender));
  FGridActive := true;
  { Cannot rely on grid.focused here, it is not yet true when the message send
  above is processed for some reason. }
end;    procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
var
  grid: TStringgrid;
begin
  grid := Sender as TStringgrid;
  if grid.Row <> aRow then
    PostMessage( handle, UM_INVALIDATEROW, grid.Row, Integer(grid));
  PostMessage( handle, UM_INVALIDATEROW, aRow, Integer(grid));
end;    procedure TForm1.UMInvalidateRow(var msg: TMessage);
begin
  TGridCracker( msg.lparam ).InvalidateRow( msg.wparam );
end;    procedure TForm1.StringGrid1Exit(Sender: TObject);
begin
  if Sender is TStringgrid then
    with TGridCracker( sender ) do
      PostMessage( self.handle, UM_INVALIDATEROW, Row, Integer(sender));
    FGridActive := false;
end;    end.
--- Everything I say is a lie.
huyang
一般會員


發表:23
回覆:26
積分:9
註冊:2003-11-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-11 18:36:41 IP:61.150.xxx.xxx 未訂閱
这是控制行 我需要一个控制整列的颜色
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-11 18:42:55 IP:202.39.xxx.xxx 未訂閱
沒搞混的話, Col, 直的 -> 行 Row, 橫的 -> 列 --- Everything I say is a lie.
azurecloud
中階會員


發表:52
回覆:108
積分:92
註冊:2003-09-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-11 21:23:18 IP:163.13.xxx.xxx 未訂閱
這位發言的先生,敬人者人恒敬之,我查過您所有的發問明細,沒有一篇是 給分的,而且發問問題,連個

「請」

字都捨不得說 這種態度是正確的嗎? 看看這一句 「這是控制行 我需要一個控制整列的顏色」, 再說你問的這個 Stringgrid 上色的問題,站內隨便搜尋一下少說也上百篇 ,其他的大大是提供您一個思考的方向,而沒有要幫忙解決問題的義務! 我不是在說大話,雖然我是程式新手,但參照 hagar 大大提供的程式碼,10 分鐘不到就改好了,有圖為証 下次請自行思考一下吧,而且口氣要有禮貌! ========================
我要努力向上
========================
azurecloud
中階會員


發表:52
回覆:108
積分:92
註冊:2003-09-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-11 21:29:31 IP:163.13.xxx.xxx 未訂閱
這張也是 ========================
我要努力向上
========================
huyang
一般會員


發表:23
回覆:26
積分:9
註冊:2003-11-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-12-15 22:15:53 IP:61.150.xxx.xxx 未訂閱
to:azurecloud 你好!请问这个“请”字有多重要 我是做技术的一向简单 我个人觉的我们聚在KTop目地是为了讨论 解决一个一个问题 有时甚至是在救火 你说这需要客套吗 还有关于没有结贴的问题 这段时间太忙我会在最近统一结贴 还有 感谢KTop的所有热心的兄弟姐妹 谢谢大家对我的帮助支持 在此每一个问题无论大小几乎都有回帖 是我的幸运 也是KTop的骄傲 祝:KTop越来越火 發表人 - huyang 於 2003/12/15 22:41:34
azurecloud
中階會員


發表:52
回覆:108
積分:92
註冊:2003-09-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-12-16 00:49:27 IP:163.13.xxx.xxx 未訂閱
Hi,huyang 您好:     其實我很喜歡直性子的人,只是覺得受人幫助要帶著感激的心情, 在 K.top 上看不見人,發問的語氣就代表了個人的形象,要求幫助時 說聲請,得到幫助後說聲謝謝,其實也只是舉手之勞而已,至於這是不 是做表面工夫,我覺得是看個人的修養與心態了。     在此向您道歉,之前語氣重了點。         ========================
我要努力向上
========================
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-12-16 08:34:59 IP:61.222.xxx.xxx 未訂閱
哎呀...看來也是有朋友與小弟一樣不是很習慣對岸的同胞的post style... 也許,這已經成為一種風土人情了...
系統時間:2024-07-08 22:04:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!