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

StringGrid 封閉曲線填滿顏色

尚未結案
hct47
一般會員


發表:34
回覆:15
積分:9
註冊:2004-04-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-14 16:30:13 IP:211.20.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-15 10:46:18 IP:61.222.xxx.xxx 未訂閱
引言:
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
系統時間:2024-11-23 12:44:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!