如何实现像vc那样的DOCK框口!

smhpnuaa 2002-07-21 08:31:21
如何在窗口docking完后头部两条横线上如何写caption和画按纽
我做成象vc那样的在dock窗口关闭按纽旁边放其它的一个按纽!
...全文
110 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
smhpnuaa 2002-08-12
  • 打赏
  • 举报
回复
up!
ehom 2002-08-11
  • 打赏
  • 举报
回复
我以为只是要有两根线加个关闭按钮的DOCK效果!正纳闷怎么这么简单的问题?原来还要有标题和和附加其它按钮!不会啊!是不是人家自己重画的?好像没见过现成的!
smhpnuaa 2002-08-05
  • 打赏
  • 举报
回复
能给个demo吗?偶来看看!
ehom 2002-08-04
  • 打赏
  • 举报
回复
Sorry,还是看错了!^_^
ehom 2002-08-04
  • 打赏
  • 举报
回复
终于理解了!直接停靠在一Panel上就是这效果啊?
要不要抓个图给你!^_^
smhpnuaa 2002-08-04
  • 打赏
  • 举报
回复
高手快现身吧!
taxi 2002-08-04
  • 打赏
  • 举报
回复
吐血关注!!
smhpnuaa 2002-07-25
  • 打赏
  • 举报
回复
顶!
smhpnuaa 2002-07-24
  • 打赏
  • 举报
回复
up!
smhpnuaa 2002-07-22
  • 打赏
  • 举报
回复
楼上的朋友,就像acdSee那样的dock效果!
ehom 2002-07-21
  • 打赏
  • 举报
回复
标题栏上放按钮?

unit Unit1;

interface

uses
Windows, Buttons, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormResize(Sender: TObject);
private
CaptionBtn : TRect;
procedure DrawCaptButton;
procedure WMNCPaint(var Msg : TWMNCPaint); message WM_NCPaint;
procedure WMNCActivate(var Msg : TWMNCActivate); message WM_NCACTIVATE;
procedure WMSetText(var Msg : TWMSetText); message WM_SETTEXT;
procedure WMNCHitTest(var Msg : TWMNCHitTest); message WM_NCHITTEST;
procedure WMNCLButtonDown(var Msg : TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

const
htCaptionBtn = htSizeLast + 1;
{$R *.DFM}

procedure TForm1.DrawCaptButton;
var
xFrame,
yFrame,
xSize,
ySize : Integer;
R : TRect;
begin
//获取窗体的边框尺寸
xFrame := GetSystemMetrics(SM_CXFRAME);
yFrame := GetSystemMetrics(SM_CYFRAME);

//获取标题按钮的尺寸
xSize := GetSystemMetrics(SM_CXSIZE);
ySize := GetSystemMetrics(SM_CYSIZE);

//定义一个新的标题按钮(非系统按钮)
CaptionBtn := Bounds(Width - xFrame - 5*xSize + 2,
yFrame + 2, xSize + 2, ySize - 4);
//获取窗体画布的句柄
Canvas.Handle := GetWindowDC(Self.Handle);

 

//定义画布的属性
Canvas.Font.Name := '宋体';
Canvas.Font.Color := clBlue;
Canvas.Pen.Color := clYellow;
Canvas.Brush.Color := clBtnFace;

try
//画按钮
DrawButtonFace(Canvas, CaptionBtn, 1, bsAutoDetect, False, False, False);
//在按钮中定义一个范围用来输出按钮标题信息
R := Bounds(Width - xFrame - 5 * xSize + 2,
yFrame + 3, xSize +10, ySize - 7);
with CaptionBtn do
Canvas.TextRect(R, R.Left + 2, R.Top , '你好');
finally
ReleaseDC(Self.Handle, Canvas.Handle);
Canvas.Handle := 0;
end;
end;
//接收到Paint消息时重画按钮
procedure TForm1.WMNCPaint(var Msg : TWMNCPaint);
begin
inherited;
DrawCaptButton;
end;
//激活时重画
procedure TForm1.WMNCActivate(var Msg : TWMNCActivate);
begin
inherited;
DrawCaptButton;
end;
//接收到WM_SETTEXT消息时重画按钮
procedure TForm1.WMSetText(var Msg : TWMSetText);
begin
inherited;
DrawCaptButton;
end;
//捕获鼠标消息,检查是否按了按钮
procedure TForm1.WMNCHitTest(var Msg : TWMNCHitTest);
begin
inherited;
with Msg do
if PtInRect(CaptionBtn, Point(XPos - Left, YPos - Top)) then
Result := htCaptionBtn;
end;
//鼠标按下的相应操作,用户可添加各种代码,这里只显示一个对话框作例子
procedure TForm1.WMNCLButtonDown(var Msg : TWMNCLButtonDown);
begin
inherited;
if (Msg.HitTest = htCaptionBtn) then
ShowMessage('你好,你按的是标题栏上的按钮!');
end;

//窗体改变大小时强制重画标题栏
procedure TForm1.FormResize(Sender: TObject);
begin
//Force a redraw of caption bar if form is resized
Perform(WM_NCACTIVATE, Word(Active), 0);
end;

end.
smhpnuaa 2002-07-21
  • 打赏
  • 举报
回复
我顶!

另附:http://210.82.164.66/showpost.php?l=1&key=601785&m=0
smhpnuaa 2002-07-21
  • 打赏
  • 举报
回复
我还没有找到类似的控件,哪位如果有,麻烦送我一个!

5,392

社区成员

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

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