怎么开发一个带标题栏的panel,并在右上角带关闭按钮的
类似ThemeEngine中的TeHeaderPanel
没做过控件,不知道该怎么做

解决方案 »

  1.   

    继承一下Tform的这些特征,看能否达到你的要求
      

  2.   

    把form的border属性设置成bsToolWindow
      

  3.   

    放制一个panel,然后再加个SpeedButton,flat=true,设置某个字体,图形模式的,Caption=一个数字,然后就可以看到SpeedButton上显示"X",再写下关闭事件,我有些忘记了
      

  4.   

    SpeedButton.Flat:=true;
    Font.Name:=Marlett;
    Font.Charset:=SYMBOL_CHARSET;
    SpeedButton.Caption:='r';关闭,'0',最小化
      

  5.   

    suipack包里有个类似的控件,你去下载看看
      

  6.   

    这个东西做控件干什么?也就那点东西,panel也有caption,设置文字对齐也就一样了
    其他的看 rouqing 的,还有也就是加个颜色渐变什么的了
      

  7.   

    点关闭之后是关闭什么?它本身所在的窗体吗?那我觉得它更象一个form而不是panel
    把form的颜色改改
      

  8.   

    可以用API函数,SetWindowLong设置Panel的属性,其实Panel也是一个窗体。自己看一下帮助,用SetWindowLong就可以了,我以前试过的
      

  9.   

    简单的办法将Form停靠到Panel上就是这个效果
      

  10.   

    unit TitlePanel;interfaceuses
      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;implementationprocedure 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.