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

shansheng 2005-11-08 07:28:08
怎么开发一个带标题栏的panel,并在右上角带关闭按钮的
类似ThemeEngine中的TeHeaderPanel
没做过控件,不知道该怎么做
...全文
591 20 打赏 收藏 转发到动态 举报
写回复
用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的这些特征,看能否达到你的要求
Java图片缩小与放大特效,// 图像缩小与放大演示   public class ScaleImageDemo extends JFrame {   private JPanel panel = new JPanel(); //面板panel用于容纳图像放大、缩孝还原按   private JButton jbFile = new JButton("打开图像文件"); //打开图像文件按   private JButton jbZoomIn = new JButton("放大"); //图像放大按   private JButton jbZoomOut = new JButton("缩小"); //图像缩小按   private JButton jbReset = new JButton("还原"); //图像还原按   ScalePane showImagePane = new ScalePane(); //创建showImagePane对象用于绘制图像   Container content = getContentPane(); //获得窗口的容器    //构造函数   public ScaleImageDemo() {   super("图像的缩小与放大"); //调用父类构造器设置窗口标题   //为按添加动作监听器   jbFile.addActionListener(new ButtonActionListener());   jbZoomIn.addActionListener(new ButtonActionListener());   jbZoomOut.addActionListener(new ButtonActionListener());   jbReset.addActionListener(new ButtonActionListener());   //把图像放大按、图像缩小按、图像还原按加入panel面板   panel.add(jbZoomIn);   panel.add(jbZoomOut);   panel.add(jbReset);   //把showImagePane文件选择组合框、控制面板、状态标签加入到窗口内容窗格   content.add(showImagePane, BorderLayout.CENTER);   content.add(jbFile, BorderLayout.NORTH);   content.add(panel, BorderLayout.SOUTH);   setSize(260, 200); //设置窗口大小   setVisible(true); //设置窗口可见   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序
Java播放wav音频功能的实现代码,播放wav音频,压缩包中有测试音频,是否能播放 MP3,未知。   boolean looping = false; //是否循环播放   String[] choics = { "chimes.wav", "start.wav" }; //声音文件名数组   URL file1 = getClass().getResource(choics[0]); //声音文件1   URL file2 = getClass().getResource(choics[1]); //声音文件2   AudioClip sound1 = java.applet.Applet.newAudioClip(file1); //声音剪辑对象1   AudioClip sound2 = java.applet.Applet.newAudioClip(file2); //声音剪辑对象2   AudioClip chosenClip = sound1; //选择的声音剪辑对象   JComboBox jcbFiles = new JComboBox(choics); //文件选择组合框   JButton playButton = new JButton("播放"); //播放按   JButton loopButton = new JButton("循环播放"); //循环播放按   JButton stopButton = new JButton("停止"); //停止播放按   JLabel status = new JLabel("选择播放文件"); //状态标签   JPanel controlPanel = new JPanel(); //控制面板用于包容按   Container container = getContentPane(); //获得窗口内容窗格   public AudioPlayDemo() { //构造器    super("声音播放程序"); //调用父类构造器设置窗口标题    jcbFiles.setSelectedIndex(0); //设置组合框选择项    jcbFiles.addItemListener(this); //为播放按添加项目监听器    //为播放按、循环播放按、停止播放按添加动作监听器    playButton.addActionListener(this);    loopButton.addActionListener(this);    stopButton.addActionListener(this);    stopButton.setEnabled(false); //设置停止播放按不可用    //把播放按、循环播放按、停止播放按加入控制面板    controlPanel.add(playButton);    controlPanel.add(loopButton);    controlPanel.add(stopButton);    //把文件选择组合框、控制面板、状态标签加入到窗口内容窗格    container.add(jcbFiles, BorderLayout.NORTH);    container.add(controlPanel, BorderLayout.CENTER);    container.add(status, BorderLayout.SOUTH);    setSize(300, 130); //设置窗口大小    setVisible(true); //设置窗口可视    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序   }
多媒体处理包括多媒体技术的描述及其实现的源代码还有他的图品作品import java.applet.AudioClip; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.net.*; // 声音播放程序 public class AudioPlayDemo extends JFrame implements ActionListener, ItemListener { boolean looping = false; //是否循环播放 String[] choics = { "chimes.wav", "start.wav" }; //声音文件名数组 URL file1 = getClass().getResource(choics[0]); //声音文件1 URL file2 = getClass().getResource(choics[1]); //声音文件2 AudioClip sound1 = java.applet.Applet.newAudioClip(file1); //声音剪辑对象1 AudioClip sound2 = java.applet.Applet.newAudioClip(file2); //声音剪辑对象2 AudioClip chosenClip = sound1; //选择的声音剪辑对象 JComboBox jcbFiles = new JComboBox(choics); //文件选择组合框 JButton playButton = new JButton("播放"); //播放按 JButton loopButton = new JButton("循环播放"); //循环播放按 JButton stopButton = new JButton("停止"); //停止播放按 JLabel status = new JLabel("选择播放文件"); //状态标签 JPanel controlPanel = new JPanel(); //控制面板用于包容按 Container container = getContentPane(); //获得窗口内容窗格 public AudioPlayDemo() { //构造器 super("声音播放程序"); //调用父类构造器设置窗口标题 jcbFiles.setSelectedIndex(0); //设置组合框选择项 jcbFiles.addItemListener(this); //为播放按添加项目监听器 //为播放按、循环播放按、停止播放按添加动作监听器 playButton.addActionListener(this); loopButton.addActionListener(this); stopButton.addActionListener(this); stopButton.setEnabled(false); //设置停止播放按不可用 //把播放按、循环播放按、停止播放按加入控制面板 controlPanel.add(playButton); controlPanel.add(loopButton); controlPanel.add(stopButton); //把文件选择组合框、控制面板、状态标签加入到窗口内容窗格 container.add(jcbFiles, BorderLayout.NORTH); container.add(controlPanel, BorderLayout.CENTER); container.add(status, BorderLayout.SOUTH); setSize(300, 130); //设置窗口大小 setVisible(true); //设置窗口可视 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序 } //文件选择组合框事件处理 public void itemStateChanged(ItemEvent e) { if (jcbFiles.getSelectedIndex() == 0) { chosenClip = sound1; } else { chosenClip = sound2; } } //按事件处理 public void actionPerformed(ActionEvent event) { if (chosenClip == null) { status.setText("声音未载入"); return; //如果AudioClip对象为空,则直接返回 } Object source = event.getSource(); //获取用户洗涤激活的按 //播放按事件处理 if (source == playButton) { stopButton.setEnabled(true); //设置停止播放按可用 loopButton.setEnabled(true); //设置循环播放按可用 chosenClip.play(); //播放选择的声音剪辑对象一次 status.setText("正在播放"); //设置状态信息 } //循环播放按事件处理 if (source == loopButton) { looping = true; chosenClip.loop(); //循环播放选择的声音剪辑对象 loopButton.setEnabled(false); //设置循环播放按不可用 stopButton.setEnabled(true); //设置停止播放按可用 status.setText("正在循环播放"); //设置状态信息 } //停止播放按事件处理 if (source == stopButton) { if (looping) { looping = false; chosenClip.stop(); //停止循环播放选择的声音剪辑对象 loopButton.setEnabled(true); //设置循环播放按可用 } else { chosenClip.stop(); //停止播放选择的声音剪辑对象 } stopButton.setEnabled(false); //设置循环播放按可用 status.setText("停止播放"); //设置状态信息 } } public static void main(String s[]) { new AudioPlayDemo(); //创建AudioPlayDemo对象 } }

5,392

社区成员

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

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