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

DBGrid 中變換某一cell文字顏色

尚未結案
tomcheng
一般會員


發表:8
回覆:7
積分:3
註冊:2003-09-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-18 11:10:04 IP:211.79.xxx.xxx 未訂閱
如何作到將滑鼠移到DBGrid中的某一cell時(只有mouseover, 尚未click), 可改變該cell內的文字顏色? Tks!
hagar
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-18 16:54:43 IP:202.39.xxx.xxx 未訂閱
Cell[1, 1] 這格會變紅色, 可是有 bug  < class="code"> type TCrackGrid = class(TDBGrid) end; procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var R: TRect; begin R := TCrackGrid(DBGrid1).CellRect(1, 1); if (Rect.Left = R.Left) and (Rect.Top = R.Top) then begin if (State = []) then begin DBGrid1.Canvas.FillRect(Rect); DBGrid1.Canvas.Font.Color := clRed; DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top, Column.Field.AsString); end else begin DBGrid1.Canvas.FillRect(Rect); DBGrid1.Canvas.Font.Color := clBlack; DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top, Column.Field.AsString); end; end else begin DBGrid1.Canvas.FillRect(Rect); DBGrid1.Canvas.Font.Color := clBlack; DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top, Column.Field.AsString); end; end; procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var gc: TGridCoord; begin gc := DBGrid1.MouseCoord(X, Y); if (gc.X = 1) and (gc.Y = 1) then DBGrid1DrawColumnCell(DBGrid1, TCrackGrid(DBGrid1).CellRect(1, 1), 0, DBGrid1.Columns[0], []) else DBGrid1.Refresh; end; --- 這次沒買到 cd-pro2 實在很 ... 發表人 - hagar 於 2004/03/18 17:15:19
tomcheng
一般會員


發表:8
回覆:7
積分:3
註冊:2003-09-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-19 09:28:02 IP:211.79.xxx.xxx 未訂閱
感謝hagar 解答 但發現當indicator 點到其他行(ex:Row3)時, 滑鼠移到cell[1,1]時,cell[1,1]的內容會變成cell[1,3]的內容, 不知如何解決
hagar
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-19 11:35:32 IP:202.39.xxx.xxx 未訂閱
type
  TCrackGrid = class(TDBGrid)
  end;
  
  // ...    var
  Form1: TForm1;
  GetInRect: Boolean = False; // 判斷 mouse 是否進入第 1 欄第 1 列    implementation    {$R *.DFM}    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  R: TRect;
begin
  R := TCrackGrid(DBGrid1).CellRect(1, 1);       DBGrid1.Canvas.FillRect(Rect);
  if GetInRect then
  begin
    if (DataCol = 0) and (R.Left = Rect.Left) and (R.Top = Rect.Top) then
      DBGrid1.Canvas.Font.Color := clRed
    else
      DBGrid1.Canvas.Font.Color := clBlack;
  end else
    DBGrid1.Canvas.Font.Color := clBlack;
  DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top, Column.Field.AsString);
end;    procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  gc: TGridCoord;
begin
  gc := DBGrid1.MouseCoord(X, Y);
  if (gc.X = 1) and (gc.Y = 1) then
  begin
    GetInRect := True;
  end else
    GetInRect := False;
  DBGrid1.Refresh;
end;
--- 這次沒買到 cd-pro2 實在很 ... 發表人 - hagar 於 2004/03/19 14:09:00
系統時間:2024-05-19 22:45:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!