StringGrid 封閉曲線填滿顏色 |
尚未結案
|
hct47
一般會員 發表:34 回覆:15 積分:9 註冊:2004-04-23 發送簡訊給我 |
Dear All: 使用StringGrid來做小畫家,有格線座標,若要做封閉曲線填滿顏色該如何著手呢?我的一部分程式碼如下: procedure TPanelSet.StringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
var
Obj : TstringGrid;
index : integer;
begin
// if (State.Contains(gdFixed)) return;
//去除選取藍影//////////////////////////////////////////
StringGrid1.Canvas.Brush.Color := clWindow;
StringGrid1.Canvas.Font.Color := clWindowText;
StringGrid1.Canvas.FillRect(Rect);
////////////////////////////////////////////////////////
Obj := TStringgrid(Sender);--->有人知道這是什麼意思嗎?
memo1.Lines.Add(inttostr(Integer(Obj.Objects[ACol,ARow])));
if FDrawStyle in [dsClear, dsRenderLine] then // 橡皮擦、任意線
begin
If Integer(Obj.Objects[ACol,ARow]) = 1 Then Begin
^^^^^^^^^^^^^^^^^^^^^^^這又是什麼意思呢?
Obj.Canvas.brush.Color := clblack; // 設定背景顏色
End else begin
Obj.Canvas.brush.Color := stringGrid1.Color; // 設定背景顏色
end;
Obj.Canvas.FillRect(Rect); end; if FDrawStyle in [dsFloodFill] then
begin
//Obj := TStringgrid(Sender);
If Integer(Obj.Objects[ACol,ARow]) = 1 Then Begin
Obj.Canvas.brush.Color := clGreen; // 設定背景顏色
End;
Obj.Canvas.FillRect(Rect);
end;
end; procedure TPanelSet.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var ColRow:TColRow;
tmpPixel: TColor;
begin
msButton := Button;
pressed := true; if FDrawStyle = dsFloodFill then (若是按下填滿的狀況)
begin
tmppixel:=stringGrid1.Canvas.Pixels[X,Y];
stringGrid1.Canvas.Brush.Color:=clgreen;
stringGrid1.Canvas.FloodFill(X,Y,tmppixel,fsSurface);
end;
end; 封閉曲線都試不出來
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
引言:procedure TPanelSet.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var Obj : TstringGrid; index : integer; begin // if (State.Contains(gdFixed)) return; //去除選取藍影////////////////////////////////////////// StringGrid1.Canvas.Brush.Color := clWindow; StringGrid1.Canvas.Font.Color := clWindowText; StringGrid1.Canvas.FillRect(Rect); //////////////////////////////////////////////////////// Obj := TStringgrid(Sender);--->有人知道這是什麼意思嗎? 沒什麼 主要是將 Sender 轉換為 TStringGrid 格式。並指向 OBJ 方便呼叫。 memo1.Lines.Add(inttostr(Integer(Obj.Objects[ACol,ARow]))); if FDrawStyle in [dsClear, dsRenderLine] then // 橡皮擦、任意線 begin If Integer(Obj.Objects[ACol,ARow]) = 1 Then Begin ^^^^^^^^^^^^^^^^^^^^^^^這又是什麼意思呢? 就是 TstringList的 Object。要看它給予的是什麼值。主要用意讓 Cells 有兩個值一個是Grid的文字。另一個用來標記 Obj.Canvas.brush.Color := clblack; // 設定背景顏色 End else begin Obj.Canvas.brush.Color := stringGrid1.Color; // 設定背景顏色 end; Obj.Canvas.FillRect(Rect); end; if FDrawStyle in [dsFloodFill] then begin //Obj := TStringgrid(Sender); If Integer(Obj.Objects[ACol,ARow]) = 1 Then Begin Obj.Canvas.brush.Color := clGreen; // 設定背景顏色 End; Obj.Canvas.FillRect(Rect); end; end; procedure TPanelSet.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ColRow:TColRow; tmpPixel: TColor; begin msButton := Button; pressed := true; if FDrawStyle = dsFloodFill then (若是按下填滿的狀況) begin tmppixel:=stringGrid1.Canvas.Pixels[X,Y]; stringGrid1.Canvas.Brush.Color:=clgreen; stringGrid1.Canvas.FloodFill(X,Y,tmppixel,fsSurface); end; end;封閉曲線都試不出來 >>< face="Verdana, Arial, Helvetica"> 由於我不知道 FDrawStyle ? 是什? 不明定義太多不清楚。 FloodFill 主要用於填滿該座標顏色。 FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle); Color 只得為要填充原來的顏色 ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~ 發表人 - wameng 於 2005/07/15 10:47:16 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |