如何做一个这样的按钮(100分)

  • 主题发起人 主题发起人 秦川
  • 开始时间 开始时间

秦川

Unregistered / Unconfirmed
GUEST, unregistred user!
像word中的字体控制按钮一样
按下去是一种状态
在按一下是另一种状态
 
开关按钮,好象修改TBUTTON某个属性就可以了让我想想
 
我知道,可以使用SpeedButton实现。首先修改其GroupIndex属性为一个非零值,然后将Down设置为True即可实现按下的效果。
如果使用ToolBar控件,则将其中的ToolButton控件的Style设置为tbsCheck,然后同样将Down设置为True即可实现按下的效果。
 
几张位图即可,响应鼠标按下的事件,变换不同的位图。
 
呵呵,这也100分?
 
呵呵, 我没用过 word,
 
没用过word也知道是怎么作的:)
 
可以用ToolButton控件
把Style:=sCheck;
down:=true 按下,
down:=false弹起

在Delphi自带的例子Richedit中有这样的用法。
 
我做的这个控件是为了给TButton控件增加Mouseleave事件,有了这个事件,我们就可以编出类似网页中的悬停按钮的效果,打开Delphi,选Component|new Component出现如下的画面,

我的控件类名为TButton1,父类为TButton,库单元文件名为Button1.单击确定按钮,Component Wizard粗略的生成模板样式的代码,其中有类声明,全局变量声明及传递到RegisterComponent方法中的参数等,编译好的整个文件的程序清单如下:
unit Button1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TButton1 = class(TButton)
private
FOnMouseLeave: TNotifyEvent;
procedure WZMouseLeave(var Msg:TMessage); message CM_MOUSELEAVE;
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
//在系统中注册
RegisterComponents('Samples', [TButton1]);
end;
{ TButton1 }
procedure TButton1.WZMouseLeave(var Msg: TMessage);
begin
inherited;//继承父类
if csLButtonDown in ControlState then begin
Self.MouseUp(mbLeft,[ssLeft],0,0);
end;
if Assigned (FonMouseLeave) then FOnMouseLeave(Self);
end;
end.
代码添加完后,编译后,一个名为Button1的控件即加入Simples项中,新建一个项目,试试以下的代码:
procedure TForm1.Button11MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
label1.Caption:='ll';
end;
procedure TForm1.Button11MouseLeave(Sender: TObject);
begin
label1.Caption:='dd';
end;
至于换图片,还不简单
 
物价下调啦。
 
使用位图按钮,当没有按下的时候是一张图片,按下之后就变成了另外一张图片了.
Tbitbutton
 
to wjiachun:
是我没明白他的意思,
 
时间太久,强制结束。 wjiachun
 
后退
顶部