Corlor |
尚未結案
|
djptony
一般會員 發表:7 回覆:5 積分:2 註冊:2003-07-24 發送簡訊給我 |
|
Brian77
中階會員 發表:8 回覆:114 積分:94 註冊:2002-05-17 發送簡訊給我 |
|
djptony
一般會員 發表:7 回覆:5 積分:2 註冊:2003-07-24 發送簡訊給我 |
|
Brian77
中階會員 發表:8 回覆:114 積分:94 註冊:2002-05-17 發送簡訊給我 |
|
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
三樓的是"咚" 附上一個function,讀不懂沒關係,全部剪下貼到你的程式里,就可以用了
procedure DrawGradient(ACanvas: TCanvas; Rect: TRect; Horicontal: Boolean; Colors: array of TColor); type RGBArray = array[0..2] of Byte; var x, y, z, stelle, mx, bis, faColorsh, mass: Integer; Faktor: double; A: RGBArray; B: array of RGBArray; merkw: integer; merks: TPenStyle; merkp: TColor; begin mx := High(Colors); if mx > 0 then begin if Horicontal then mass := Rect.Right - Rect.Left else mass := Rect.Bottom - Rect.Top; SetLength(b, mx + 1); for x := 0 to mx do begin Colors[x] := ColorToRGB(Colors[x]); b[x][0] := GetRValue(Colors[x]); b[x][1] := GetGValue(Colors[x]); b[x][2] := GetBValue(Colors[x]); end; merkw := ACanvas.Pen.Width; merks := ACanvas.Pen.Style; merkp := ACanvas.Pen.Color; ACanvas.Pen.Width := 1; ACanvas.Pen.Style := psSolid; faColorsh := Round(mass / mx); for y := 0 to mx - 1 do begin if y = mx - 1 then bis := mass - y * faColorsh - 1 else bis := faColorsh; for x := 0 to bis do begin Stelle := x + y * faColorsh; faktor := x / bis; for z := 0 to 3 do a[z] := Trunc(b[y][z] + ((b[y + 1][z] - b[y][z]) * Faktor)); ACanvas.Pen.Color := RGB(a[0], a[1], a[2]); if Horicontal then begin ACanvas.MoveTo(Rect.Left + Stelle, Rect.Top); ACanvas.LineTo(Rect.Left + Stelle, Rect.Bottom); end else begin ACanvas.MoveTo(Rect.Left, Rect.Top + Stelle); ACanvas.LineTo(Rect.Right, Rect.Top + Stelle); end; end; end; b := nil; ACanvas.Pen.Width := merkw; ACanvas.Pen.Style := merks; ACanvas.Pen.Color := merkp; end else // Please specify at least two colors raise EMathError.Create('draw Error...'); end;用法很簡單,有canvas的元件都可以使用 圖中的從上到下從灰到黑再到灰的畫法 DrawGradient(Image3.Canvas, IMAGE3.Canvas.ClipRect, False,[clGray,clBlack,clGray]);中間有一條細細的彩線 DrawGradient(Image3.Canvas, rect(10,statuslabel.top-4,image3.Width-10,statuslabel.top-3), true,[clRed,clRed,clRed,clRed,clRed,clRed,clRed,clRed,clRed,clRed,clRed,clRed,clRed,$000080FF,clYellow,clGreen,clBlue,clNavy,clPurple]); |
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
procedure DrawGradient(ACanvas: TCanvas; Rect: TRect;
Horicontal: Boolean; Colors: array of TColor);
用法說明
acanvas是指您要繪製漸層的目標canvas
rect就是方形區域(不是方形就自己想辦法一小塊一小塊描)
Horicontal是否水平作圖?true就是由左到右,false就從上到下
Colors 為一color陣列,至少要設二色以上[clBlack,clGray]或[$00FF00,$0000FF,$FF0000],數量不限 程式出處: Torry Delphi tips .
http://www.swissdelphicenter.ch/torry
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |