如何改变ToolButton的外形,象Dreamweaver的工具按钮那样?

ramile 2005-03-03 08:24:31
如何改变ToolButton的外形,象Dreamweaver的工具按钮那样,四个不再是直角,而是有弧线??

我只有90分了!大侠们帮帮我!
...全文
126 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
constantine 2005-03-04
  • 打赏
  • 举报
回复
如果zRect位置不对,自己调整,我记得最初好象是象ccrun那个工具一样的
constantine 2005-03-04
  • 打赏
  • 举报
回复
一种自画的样子
#include "ComCtrls.hpp"
void __fastcall TForm1::Tbr_daohangCustomDrawButton(TToolBar *Sender,
TToolButton *Button, TCustomDrawState State, bool &DefaultDraw)
{

TRect zRect;
zRect=Rect(Button->Left+2,Button->Top,Button->Left+Button->Width-4,Button->Height);
DefaultDraw=false; //必须设置这个

if(State.Contains(cdsHot) )
{
Tbr_daohang->Canvas->Brush->Color =clWhite;//Hot时的背景颜色
Tbr_daohang->Canvas->Pen->Color =clBlue;//Hot时边框颜色
Tbr_daohang->Canvas->RoundRect(Button->Left,Button->Top,Button->Left +Button->Width,Button->Height,6,6);
//Tbr_daohang->Canvas->TextOut(zRect.left+2,zRect.top+4,Button->Caption);
}
else
{
Tbr_daohang->Canvas->Brush->Color =(TColor)RGB(230,230,230); //没有Hot时的背景颜色
Tbr_daohang->Canvas->Pen->Color =(TColor)RGB(150,130,150); //没有Hot时边框颜色
Tbr_daohang->Canvas->RoundRect(Button->Left,Button->Top,Button->Left +Button->Width,Button->Height,6,6);
//Tbr_daohang->Canvas->TextOut(zRect.left+2,zRect.top+4,Button->Caption);
}


}
Friecin 2005-03-04
  • 打赏
  • 举报
回复
constantine(飘遥的安吉儿) ( ) 的方法不错!
僵哥 2005-03-03
  • 打赏
  • 举报
回复
参考一下下面的代码(Delphi版)
unit RVButton;

interface

uses
SysUtils, Classes, Controls, Messages, Graphics, Windows;

const
iOffset = 3;

type
TRVButton = class(TGraphicControl)
private
FCaption : string;
FButtonColor: TColor;
FLButtonDown: boolean;
FBtnPoints : array[1..2] of TPoint;
FKRgn : HRgn;
procedure SetCaption(Value: string);
procedure SetButtonColor(Value: TColor);
procedure FreeRegion;
protected
procedure Paint; override;
procedure DrawCircle;
procedure MoveButton;
procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property ButtonColor: TColor read FButtonColor write SetButtonColor;
property Caption: string read FCaption write SetCaption;
property Enabled;
property Font;
property ParentFont;
property ParentShowHint;
property ShowHint;
property Visible;
property OnClick;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [TRVButton]);
end;

{ TRVButton }

constructor TRVButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := [csClickEvents,csCaptureMouse];
Width := 50;
Height := 50;
FButtonColor := clBtnFace;
FKRgn := 0;
FLButtonDown := False;
end;

destructor TRVButton.Destroy;
begin
if FKRgn <> 0 then FreeRegion;
inherited Destroy;
end;

procedure TRVButton.DrawCircle;
begin
FBtnPoints[1] := Point(iOffset,iOffset);
FBtnPoints[2] := Point(Width - iOffset,Height - iOffset);
FKRgn := CreateEllipticRgn(FBtnPoints[1].x,FBtnPoints[1].y,FBtnPoints[2].x,FBtnPoints[2].y);
Canvas.Brush.Color := FButtonColor;
FillRgn(Canvas.Handle,FKRgn,Canvas.Brush.Handle);
MoveButton;
end;

procedure TRVButton.FreeRegion;
begin
if FKRgn <> 0 then DeleteObject(FKRgn);
FKRgn := 0;
end;

procedure TRVButton.MoveButton;
var
Color1: TColor;
Color2: TColor;
begin
with Canvas do
begin
if not FLButtonDown then
begin
Color1 := clBtnHighlight;
Color2 := clBtnShadow;
end
else
begin
Color1 := clBtnShadow;
Color2 := clBtnHighLight;
end;

Pen.Width := 1;

if FLButtonDown then Pen.Color := clBlack
else Pen.Color := Color2;

Ellipse(FBtnPoints[1].x - 2,FBtnPoints[1].y - 2,FBtnPoints[2].x + 2,FBtnPoints[2].y + 2);

if not FLButtonDown then Pen.Width := 2
else Pen.Width := 1;

Pen.Color := Color1;

Arc(FBtnPoints[1].x,FBtnPoints[1].y,FBtnPoints[2].x,FBtnPoints[2].y,
FBtnPoints[2].x,FBtnPoints[1].y,FBtnPoints[1].x,FBtnPoints[2].y);

Pen.Color := Color2;

Arc(FBtnPoints[1].x,FBtnPoints[1].y,FBtnPoints[2].x,FBtnPoints[2].y,
FBtnPoints[1].x,FBtnPoints[2].y,FBtnPoints[2].x,FBtnPoints[1].y);
end;

SetCaption('');
end;

procedure TRVButton.Paint;
begin
inherited Paint;
FreeRegion;
DrawCircle;
end;

procedure TRVButton.SetButtonColor(Value: TColor);
begin
if Value <> FButtonColor then
begin
FButtonColor := Value;
Invalidate;
end;
end;

procedure TRVButton.SetCaption(Value: string);
var
X: Integer;
Y: Integer;
begin
if ((Value <> FCaption) and (Value <> '')) then
begin
FCaption := Value;
end;

with Canvas.Font do
begin
Name := Font.Name;
Size := Font.Size;
Style := Font.Style;
if Self.Enabled then Color := Font.Color
else
Color := clDkGray;
end;

X := (Width div 2) - (Canvas.TextWidth(FCaption) div 2);
Y := (Height div 2) - (Canvas.TextHeight(FCaption) div 2);
Canvas.TextOut(X, Y, FCaption);
// Invalidate;
end;


procedure TRVButton.WMLButtonDown(var Message: TWMLButtonDown);
begin
if not PtInRegion(FKRgn,Message.xPos,Message.yPos) then exit;
FLButtonDown := True;
MoveButton;
inherited;
end;

procedure TRVButton.WMLButtonUp(var Message: TWMLButtonUp);
begin
if not FLButtonDown then exit;
FLButtonDown := False;
MoveButton;
inherited;
end;


end.
samchoy 2005-03-03
  • 打赏
  • 举报
回复
不知道是不是XP下的Toolbar样式,如果是可以用Toolbar2000+TBX实现

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧