[急問]如何替TStringGrid中的格子填色 |
尚未結案
|
pasphi
一般會員 發表:16 回覆:12 積分:5 註冊:2002-11-29 發送簡訊給我 |
|
azurecloud
中階會員 發表:52 回覆:108 積分:92 註冊:2003-09-04 發送簡訊給我 |
Hi,pasphi 您好:
請先參考下面這篇:http://delphi.ktop.com.tw/topic.php?topic_id=19200
我根據這篇寫了個程序,你可以直接呼叫,代碼如下 procedure stringcell_draw(AStringgrid : TStringgrid; col,row : integer; text : String);
var Rect : TRect;
begin
AStringgrid.Canvas.Brush.Color := clred;
AStringgrid.Canvas.Font.Color := clblue;
rect := AStringgrid.CellRect(col,row);
AStringgrid.Canvas.FillRect(rect);
AStringgrid.Canvas.TextOut(Rect.left+2, Rect.top+2, text); //前兩個參數是座標,你可以加加減減調整位置
end; procedure TForm1.Button1Click(Sender: TObject);
begin
stringcell_draw(stringgrid1,2,2,'test'); // 這裡是呼叫的示範
end; 請注意此時的文字是"畫"出來的,我測試的結果是當此 Cells OnFocus 時
顏色和字會消失,如果您不想讓它消失的話,在 Cells 的 OnFocus 事件再
呼叫一次程序即可,希望幫得上忙。
ps.做出來的效果如下:
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 若要在程式碼中替TStringGrid中的格子寫上文字, 可以:(假設StringGrid1為TStringGrid) StringGrid1.Cells[1,2] := '文字'; 但如何在程式碼中替這格子填上底色呢? 希望大家可以幫忙! :) DELphi==我剛好做到這段, 給你參考, 在 stringgrid 的 ondrawcell中寫 procedure TForm_Part.stgSpecDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var xCol, xWidth: integer; xRow, xHeight: integer; begin with Sender as TStringGrid do begin // 拖曳時 if State=[gdSelected] then begin Canvas.Brush.Color:= $0080FFFF; //底色 Canvas.Font.Color:= clBlack; //字體顏色 end // 如果 cell 為 √ else if (Cells[ACol, ARow]='√') then begin Canvas.Brush.Color:= clGreen; //底色 Canvas.Font.Color:= clWhite; //字體顏色 end // 其他狀況 else begin if (ACol<>0) and (ARow<>0) then begin Canvas.Brush.Color:= clGray; Canvas.Font.Color:= clBlack; end; end; // nRow, nCol 在 onSelect 中指定, 並以 private 存在 // 當focus在某一cell時 if (ARow=nRow) and (ACol=nCol) then begin Canvas.Brush.Color:= $00C08080; Canvas.Font.Color:= clBlack; end; // 以下是將文字置中的計算(以 font=9為基礎) xRow:= Round(stgSpec.DefaultRowHeight); xCol:= Round(stgSpec.DefaultColWidth); xHeight:= Abs(stgSpec.Font.Height); xWidth:= 9 * Length(Cells[ACol,ARow]); xRow:= Round((xRow-xHeight)/2); if (ARow=0) or ((ARow<>0) and (ACol<>0)) then xCol:= Round((xCol-xWidth)/2) else xCol:= 2; Canvas.FillRect(Rect); //繪底色 Canvas.textout(Rect.Left xCol,Rect.Top xRow,Cells[ACol,ARow]); //output text end; end; procedure TForm_Part.stgSpecSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin nRow:= ARow; nCol:= ACol; end; |
pasphi
一般會員 發表:16 回覆:12 積分:5 註冊:2002-11-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |