透明的highlight |
|
nata_li
一般會員 發表:4 回覆:5 積分:1 註冊:2006-11-28 發送簡訊給我 |
我在一個program 裏有個stringgrid, 每個cells 都載著一個char
我嘗試寫當用者select 一個cell 的時候, 個cell 會highlight 成另一種顏色, 但當我run 的時候, 發現cell 裏的字都被highlight 的色掩蓋, 我可以怎麼改寫呢 ? unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, Menus; type TForm1 = class(TForm) StringGrid1: TStringGrid; Button1: TButton; MainMenu1: TMainMenu; FILE1: TMenuItem; READPUZZLE1: TMenuItem; RESET1: TMenuItem; Btn1: TButton; Btn2: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure RESET1Click(Sender: TObject); procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure Btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; tryarray : array [1..9, 1..9] of char ; tryread : textfile; i, j : integer; implementation {$R *.dfm} Procedure readarray; var tryread : textfile; curdir: string ; begin assignfile(tryread, curdir 'afile\trytry.txt'); {$I } if (IOResult <> 0) then showmessage('file not found.') ; {$I-} Reset(tryread); if (IOResult=0) then begin for i:= 1 to 9 do begin for j:= 1 to 9 do Read(tryread, tryarray[i, j]); readln(tryread) ; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin for i:= 0 to 8 do for j:= 0 to 8 do if tryarray[(j 1),(i 1)] <> '0' then StringGrid1.cells[i,j]:= tryarray[(j 1),(i 1)] end; procedure TForm1.RESET1Click(Sender: TObject); begin for i:= 0 to 8 do for j:= 0 to 8 do StringGrid1.cells[i,j]:= ' ' end; procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if gdSelected in State then //if the cell is selected with StringGrid1 do begin Canvas.Brush.Color := clSkyBlue; Canvas.FillRect(Rect); end; Canvas.FillRect(Rect); if (ARow in [0, 3, 6]) then begin with Sender as TStringGrid do begin Canvas.Pen.Color := clBlack; Canvas.Pen.Width := 3; Canvas.MoveTo(Rect.Left, Rect.Top); Canvas.LineTo(Rect.Right, Rect.Top); end; end; if (ARow in [8]) then begin with Sender as TStringGrid do begin Canvas.Pen.Color := clBlack; Canvas.Pen.Width := 3; Canvas.MoveTo(Rect.Left, Rect.bottom); Canvas.LineTo(Rect.Right, Rect.bottom); end; end; if (ACol in [0, 3, 6] ) then begin with Sender as TStringGrid do begin Canvas.Pen.Color := clBlack; Canvas.Pen.Width := 3; Canvas.MoveTo(Rect.Left, Rect.Top); Canvas.LineTo(Rect.Left, Rect.Bottom); end; end; if (ACol in [8] ) then begin with Sender as TStringGrid do begin Canvas.Pen.Color := clBlack; Canvas.Pen.Width := 3; Canvas.MoveTo(Rect.right, Rect.Top); Canvas.LineTo(Rect.right, Rect.Bottom); end; end; end; procedure TForm1.Btn1Click(Sender: TObject); var col, row : integer; begin //First get the column and row of the TStringGrid col := StringGrid1.Col; row := StringGrid1.Row; //Now put the button's Caption in the cell If tryarray[(col 1), (row 1)] = '0' then StringGrid1.Cells[col, row] := '1'; end; begin readarray ; end. |
coa
一般會員 發表:1 回覆:16 積分:13 註冊:2004-07-18 發送簡訊給我 |
nata_li 您好:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if gdSelected in State then //if the cell is selected with StringGrid1 do begin Canvas.Brush.Color := clSkyBlue; //這是改Cell的背景顏色,所以有可能會把Cell裡的字體顏色給蓋掉 Canvas.Font.Color := clRed; //將字體顏色改為紅色 Canvas.FillRect(Rect); Canvas.TextRect(Rect, Rect.Left,Rect.Top, StringGrid1.Cells[ACol, ARow]); end; |
nata_li
一般會員 發表:4 回覆:5 積分:1 註冊:2006-11-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |