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

可以變更button按鈕和字型的顏色嗎?

 
sanwin
一般會員


發表:20
回覆:60
積分:16
註冊:2002-06-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-06-17 14:56:05 IP:211.74.xxx.xxx 未訂閱
如題,可以修改button 的按鈕跟字型顏色嗎,如果可以的話,請告訴我要如何修改謝謝! 我是剛入門的子弟,請大家多多指教!
------
我是剛入門的子弟,請大家多多指教!
klmer
一般會員


發表:11
回覆:46
積分:13
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-06-17 15:07:04 IP:210.243.xxx.xxx 未訂閱
ㄟ....Delphi預設的 TButtion 元件不能改唷... 可以改用 BitBtn 元件...
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-06-17 15:50:40 IP:211.22.xxx.xxx 未訂閱
參考這篇範例: http://www.latiumsoftware.com/en/delphi/00043.php3
sanwin
一般會員


發表:20
回覆:60
積分:16
註冊:2002-06-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-06-17 19:32:02 IP:61.225.xxx.xxx 未訂閱
功力尚淺,很多的程式碼都看不懂,不過還是謝謝hagar兄,我會好好研究的 我是剛入門的子弟,請大家多多指教!
------
我是剛入門的子弟,請大家多多指教!
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-06-17 21:14:39 IP:61.219.xxx.xxx 未訂閱
站長轉貼 Color Button Por Vladimir S. 
unit ColorBtn;    interface
  uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, Buttons;      type
    TColorBtn = class(TButton)
    private
      IsFocused: boolean;
      FCanvas: TCanvas;
      F3DFrame: boolean;
      FButtonColor: TColor;
      procedure Set3DFrame(Value: boolean);
      procedure SetButtonColor(Value: TColor);
      procedure CNDrawItem(var Message: TWMDrawItem);
        message CN_DRAWITEM;
      procedure WMLButtonDblClk(var Message: TWMLButtonDblClk);
        message WM_LBUTTONDBLCLK;
      procedure DrawButtonText(const Caption: string; TRC: TRect;
        State: TButtonState; BiDiFlags: Longint);
      procedure CalcuateTextPosition(const Caption: string;
        var TRC: TRect; BiDiFlags: Longint);
    protected
      procedure CreateParams(var Params: TCreateParams); override;
      procedure SetButtonStyle(ADefault: boolean); override;
    public
      constructor Create(AOwner: TComponent); override;
      destructor Destroy; override;
    published
      property ButtonColor: TColor read FButtonColor
        write SetButtonColor default clBtnFace;
      property Frame3D: boolean read F3DFrame write Set3DFrame
        default False;
  end;      procedure Register;    implementation    { TColorBtn  }    constructor TColorBtn.Create(AOwner: TComponent);
begin
  Inherited Create(AOwner);
  FCanvas:= TCanvas.Create;
  FButtonColor:= clBtnFace;
  F3DFrame:= False;
end;    destructor TColorBtn.Destroy;
begin
  FCanvas.Free;
  Inherited Destroy;
end;    procedure TColorBtn.CreateParams(var Params: TCreateParams);
begin
  Inherited CreateParams(Params);
  with Params do Style:= Style or BS_OWNERDRAW;
end;    procedure TColorBtn.Set3DFrame(Value: boolean);
begin
  if F3DFrame <> Value then F3DFrame:= Value;
end;    procedure TColorBtn.SetButtonColor(Value: TColor);
begin
  if FButtonColor <> Value then begin
    FButtonColor:= Value;
    Invalidate;
  end;
end;    procedure TColorBtn.WMLButtonDblClk(var Message: TWMLButtonDblClk);
begin
  Perform(WM_LBUTTONDOWN, Message.Keys, Longint(Message.Pos));
end;    procedure TColorBtn.SetButtonStyle(ADefault: Boolean);
begin
  if IsFocused <> ADefault then IsFocused:= ADefault;
end;    procedure TColorBtn.CNDrawItem(var Message: TWMDrawItem);
var
  RC: TRect;
  Flags: Longint;
  State: TButtonState;
  IsDown, IsDefault: Boolean;
  DrawItemStruct: TDrawItemStruct;
begin
  DrawItemStruct:= Message.DrawItemStruct^;
  FCanvas.Handle:= DrawItemStruct.HDC;
  RC:= ClientRect;
  with DrawItemStruct do begin
    IsDown:= ItemState and ODS_SELECTED <> 0;
    IsDefault:= ItemState and ODS_FOCUS <> 0;
    if not Enabled then State:= bsDisabled
    else if IsDown then State:= bsDown
    else State:= bsUp;
  end;
  Flags:= DFCS_BUTTONPUSH or DFCS_ADJUSTRECT;
  if IsDown then Flags:= Flags or DFCS_PUSHED;
  if DrawItemStruct.ItemState and ODS_DISABLED <> 0 then
    Flags:= Flags or DFCS_INACTIVE;
  if IsFocused or IsDefault then begin
    FCanvas.Pen.Color:= clWindowFrame;
    FCanvas.Pen.Width:= 1;
    FCanvas.Brush.Style:= bsClear;
    FCanvas.Rectangle(RC.Left, RC.Top, RC.Right, RC.Bottom);
    InflateRect(RC, -1, -1);
  end;
  if IsDown then begin
    FCanvas.Pen.Color:= clBtnShadow;
    FCanvas.Pen.Width:= 1;
    FCanvas.Rectangle(RC.Left, RC.Top, RC.Right, RC.Bottom);
    InflateRect(RC, -1, -1);
    if F3DFrame then begin
      FCanvas.Pen.Color:= FButtonColor;
      FCanvas.Pen.Width:= 1;
      DrawFrameControl(DrawItemStruct.HDC, RC, DFC_BUTTON, Flags);
    end;
  end else
    DrawFrameControl(DrawItemStruct.HDC, RC, DFC_BUTTON, Flags);
  FCanvas.Brush.Color:= FButtonColor;
  FCanvas.FillRect(RC);
  InflateRect(RC, 1, 1);
  if IsFocused then begin
    RC:= ClientRect;
    InflateRect(RC, -1, -1);
  end;
  if IsDown then OffsetRect(RC, 1, 1);
  FCanvas.Font:= Self.Font;
  DrawButtonText(Caption, RC, State, 0);
  if IsFocused and IsDefault then begin
    RC:= ClientRect;
    InflateRect(RC, -4, -4);
    FCanvas.Pen.Color:= clWindowFrame;
    Windows.DrawFocusRect(FCanvas.Handle, RC);
  end;
  FCanvas.Handle:= 0;
end;    procedure TColorBtn.CalcuateTextPosition(const Caption: string;
      var TRC: TRect; BiDiFlags: Integer);
var
  TB: TRect;
  TS, TP: TPoint;
begin
  with FCanvas do begin
    TB:= Rect(0, 0, TRC.Right   TRC.Left, TRC.Top   TRC.Bottom);
    DrawText(Handle, PChar(Caption), Length(Caption), TB,
      DT_CALCRECT or BiDiFlags);
    TS := Point(TB.Right - TB.Left, TB.Bottom - TB.Top);
    TP.X := ((TRC.Right - TRC.Left) - TS.X   1) div 2;
    TP.Y := ((TRC.Bottom - TRC.Top) - TS.Y   1) div 2;
    OffsetRect(TB, TP.X   TRC.Left, TP.Y   TRC.Top);
    TRC:= TB;
  end;
end;    procedure TColorBtn.DrawButtonText(const Caption: string; TRC: TRect;
  State: TButtonState; BiDiFlags: Integer);
begin
  with FCanvas do begin
    CalcuateTextPosition(Caption, TRC, BiDiFlags);
    Brush.Style:= bsClear;
    if State = bsDisabled then begin
      OffsetRect(TRC, 1, 1);
      Font.Color:= clBtnHighlight;
      DrawText(Handle, PChar(Caption), Length(Caption), TRC,
        DT_CENTER or DT_VCENTER or BiDiFlags);
      OffsetRect(TRC, -1, -1);
      Font.Color:= clBtnShadow;
      DrawText(Handle, PChar(Caption), Length(Caption), TRC,
        DT_CENTER or DT_VCENTER or BiDiFlags);
    end else
      DrawText(Handle, PChar(Caption), Length(Caption), TRC,
        DT_CENTER or DT_VCENTER or BiDiFlags);
    end;
end;    procedure Register;
begin
  RegisterComponents('Samples', [TColorBtn]);
end;    end.
------
~~~Delphi K.Top討論區站長~~~
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-06-20 16:51:09 IP:210.61.xxx.xxx 未訂閱
順序大致上如下 1. 建立一個動態的TCanvas物件 ( Ex. tgCanvas:TCanvas; ) 2. 取得Button的Canvas Handle !! (使用GetDC()) 並且將這個Handle 放入先前建立的TCanvas物建上(tgCanvas.Handle := GetDC(Button1);) 3. 然後就可以開始繪圖了(或是指定字型及顏色)
luise
一般會員


發表:0
回覆:5
積分:1
註冊:2003-05-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-13 08:54:41 IP:163.23.xxx.xxx 未訂閱
< >各位大哥哥好壓,有一個不請之請,小弟真的非常想學這技術,能否將製作流程用圖片說明詳細點,謝謝!囉力!感恩!< >
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-01-03 01:46:26 IP:61.59.xxx.xxx 未訂閱
我也還弄不懂該如何使用 可有知道的先進朋友給予指示 thanks
James
高階會員


發表:10
回覆:290
積分:220
註冊:2002-07-25

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-01-03 10:12:40 IP:218.162.xxx.xxx 未訂閱
個人覺得這個範例有幾個關鍵處 1. CreateParams 2. 要改寫 CN_DRAWITEM 這個 windows message 的處理,透過自己建立的 Canvas 去畫圖 3. Canvas 的技術和參數 所以如果您有興趣要研究這個範例,可能可以先去找一下這些相關的資料 和說明 ,也許會有幫助
dt520
一般會員


發表:11
回覆:61
積分:14
註冊:2003-05-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-01-02 15:59:25 IP:222.50.xxx.xxx 未訂閱
如何使FCanvas透明? DT520 @>>>-->>---------一路风尘一路歌!!
系統時間:2024-03-28 21:05:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!