線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1081
推到 Plurk!
推到 Facebook!

Corlor

尚未結案
djptony
一般會員


發表:7
回覆:5
積分:2
註冊:2003-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-14 13:31:30 IP:61.232.xxx.xxx 未訂閱
how to reallize the following:
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-14 13:56:56 IP:61.61.xxx.xxx 未訂閱
RGB(紅,綠,藍): TColor; // FF,00,00 --> FF,FF,00 加綠 // FF,FF,00 --> 00,FF,00 減紅 // 00,FF,00 --> 00,FF,FF 加藍 // 00,FF,FF --> 00,00,FF 減綠 // 00,00,FF --> FF,00,FF 加紅 // FF,00,FF --> FF,00,00 減藍
djptony
一般會員


發表:7
回覆:5
積分:2
註冊:2003-07-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-22 09:19:12 IP:61.232.xxx.xxx 未訂閱
什么意思?不懂
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-22 09:43:02 IP:61.61.xxx.xxx 未訂閱
看不懂上一篇留言內容.. 亂碼..
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-28 17:58:30 IP:211.96.xxx.xxx 未訂閱
三樓的是"咚"    附上一個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

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