怎么开发一个带标题栏的panel,并在右上角带关闭按钮的

shansheng 2005-11-08 07:28:08
怎么开发一个带标题栏的panel,并在右上角带关闭按钮的
类似ThemeEngine中的TeHeaderPanel
没做过控件,不知道该怎么做
...全文
612 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
shansheng 2005-12-14
  • 打赏
  • 举报
回复
kankanzaishuo
shansheng 2005-12-02
  • 打赏
  • 举报
回复
谢谢 wizardqi(男巫)
wizardqi 2005-12-02
  • 打赏
  • 举报
回复
由于急着回家,所以有些地方不太尽人意,不过可以给楼主提供个方案。
wizardqi 2005-12-02
  • 打赏
  • 举报
回复
由于急着回家,所以有些地方不太尽人意,不过可以给楼主提供个方案。
wizardqi 2005-12-02
  • 打赏
  • 举报
回复
unit TitlePanel;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, ExtCtrls, Forms, StdCtrls,Buttons;

type
TTitlePanel = class(TCustomPanel)
private
HTopPanel:TPanel;
HTitleLabel:TLabel;
HCloseBtn:TBitBtn;
FTitle: String;
FOnClose: TNotifyEvent;
procedure SetTitle(const Value: String);
procedure SetTitleFont(const Value: TFont);
procedure CloseBtnClick(Sender:TObject);
function GetTitleFont: TFont;
procedure SetOnClose(const Value: TNotifyEvent);
protected
procedure CreateParams(var Params: TCreateParams); override;
public
constructor Create(AOwner: TComponent); override;
property DockManager;
published
property TitleFont:TFont read GetTitleFont write SetTitleFont;
property Align;
property Alignment;
property Anchors;
property AutoSize;
property BevelInner;
property BevelOuter;
property BevelWidth;
property BiDiMode;
property BorderWidth;
property BorderStyle;
property Title:String read FTitle write SetTitle stored True;
property Color;
property Constraints;
property Ctl3D;
property UseDockManager default True;
property DockSite;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property FullRepaint;
property Font;
property Locked;
property ParentBiDiMode;
property ParentBackground;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnCanResize;
property OnClick;
property OnConstrainedResize;
property OnContextPopup;
property OnDockDrop;
property OnDockOver;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnGetSiteInfo;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnResize;
property OnStartDock;
property OnStartDrag;
property OnUnDock;
property OnClose:TNotifyEvent read FOnClose write SetOnClose;
end;

procedure Register;

implementation

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

{ TTitlePanel }

procedure TTitlePanel.CloseBtnClick(Sender: TObject);
begin
Visible:=False;
if Assigned(FOnClose) then FOnClose(Sender);
end;

constructor TTitlePanel.Create(AOwner: TComponent);
begin
inherited;
HTopPanel:=TPanel.Create(Self);
with HTopPanel do
begin
Height:=24;
Align:=alTop;
Parent:=Self;
BevelInner:=bvLowered;
end;
HCloseBtn:=TBitBtn.Create(HTopPanel);
with HCloseBtn do
begin
Top:=1;
Left:=1;
Width:=22;
Height:=22;
Kind:=bkCancel;
Caption:='';
Parent:=HTopPanel;
OnClick:=CloseBtnClick;
end;
HTitleLabel:=TLabel.Create(HTopPanel);
with HTitleLabel do
begin
Top:=2;
Left:=25;
Parent:=HTopPanel;
Caption:=FTitle;
end;
end;

procedure TTitlePanel.CreateParams(var Params: TCreateParams);
const
BorderStyles: array[TBorderStyle] of DWORD = (0, WS_BORDER);
begin
inherited CreateParams(Params);
FTitle:=Params.Caption;
HtitleLabel.Caption:=FTitle;
Params.Caption:='';
end;

function TTitlePanel.GetTitleFont: TFont;
begin
Result:=HTitleLabel.Font;
end;

procedure TTitlePanel.SetOnClose(const Value: TNotifyEvent);
begin
FOnClose := Value;
end;

procedure TTitlePanel.SetTitle(const Value: String);
begin
FTitle := Value;
HtitleLabel.Caption:=FTitle;
end;

procedure TTitlePanel.SetTitleFont(const Value: TFont);
begin
HTitleLabel.Font.Assign(Value);
end;

end.
setdefault 2005-12-02
  • 打赏
  • 举报
回复
简单的办法将Form停靠到Panel上就是这个效果
arraden 2005-12-02
  • 打赏
  • 举报
回复
可以用API函数,SetWindowLong设置Panel的属性,其实Panel也是一个窗体。自己看一下帮助,用SetWindowLong就可以了,我以前试过的
fengzsz 2005-12-02
  • 打赏
  • 举报
回复
XPPanel就是你想要的
zzzl 2005-12-02
  • 打赏
  • 举报
回复
点关闭之后是关闭什么?它本身所在的窗体吗?那我觉得它更象一个form而不是panel
把form的颜色改改
constantine 2005-12-02
  • 打赏
  • 举报
回复
这个东西做控件干什么?也就那点东西,panel也有caption,设置文字对齐也就一样了
其他的看 rouqing 的,还有也就是加个颜色渐变什么的了
g961681 2005-12-02
  • 打赏
  • 举报
回复
应该没必要为这个东东,而做个控件吧!
shansheng 2005-12-02
  • 打赏
  • 举报
回复
ziding
shansheng 2005-11-10
  • 打赏
  • 举报
回复
ziding
jackie168 2005-11-09
  • 打赏
  • 举报
回复
suipack包里有个类似的控件,你去下载看看。。。
纯冰糖 2005-11-09
  • 打赏
  • 举报
回复
SpeedButton.Flat:=true;
Font.Name:=Marlett;
Font.Charset:=SYMBOL_CHARSET;
SpeedButton.Caption:='r';关闭,'0',最小化
纯冰糖 2005-11-08
  • 打赏
  • 举报
回复
放制一个panel,然后再加个SpeedButton,flat=true,设置某个字体,图形模式的,Caption=一个数字,然后就可以看到SpeedButton上显示"X",再写下关闭事件,我有些忘记了
shansheng 2005-11-08
  • 打赏
  • 举报
回复
谁有没有做好了的控件提供下载
shansheng 2005-11-08
  • 打赏
  • 举报
回复
我是想做个控件啊,可以描述清楚一点吗
hmzgz81 2005-11-08
  • 打赏
  • 举报
回复
把form的border属性设置成bsToolWindow
lovendII 2005-11-08
  • 打赏
  • 举报
回复
继承一下Tform的这些特征,看能否达到你的要求

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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