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

透明的highlight

 
nata_li
一般會員


發表:4
回覆:5
積分:1
註冊:2006-11-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-26 00:33:54 IP:219.77.xxx.xxx 訂閱
我在一個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-26 00:54:54 IP:59.105.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-26 23:23:31 IP:220.246.xxx.xxx 訂閱
我明白了。非常感謝您!
系統時間:2024-05-14 9:02:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!