StringGrid 的 ondrawcell |
答題得分者是:william
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位! 以下是我的StringGrid 的 onDrawCell程式碼, 主要目的是控制 cell的底色
但如果加上這段後, 原本 StringGrid 是可以用滑鼠來拖曳設定 cell 的區段
例如我想要把 cell(1,1)到 cell(3,5)都mark起來, 用拖曳方式可以很明顯的
看到這塊區域被反藍出來, 那我現在加了這段就無法出現這樣的功能, 不知各
位知道要如何改否? 謝謝!
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 (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; if (ARow=nRow) and (ACol=nCol) then begin Canvas.Brush.Color:= $00C08080; Canvas.Font.Color:= clBlack; end; 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; |
william
版主 ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |