停靠的问题

lst_prince 2010-03-10 10:06:55
在一个窗体中,当一个Edit控件,当DragKind设为dkDock,DragMode设为dmAutomatic时, 拖动后马上变为浮动的窗口,在浮动的窗口头上,显示的文本如何控制?如果并停靠在一个Panel上后,我同样想显示窗体头和“X”,该如何做?谢谢!
...全文
172 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lst_prince 2010-03-13
  • 打赏
  • 举报
回复
谢谢Z4none!!!

我不懂电脑 2010-03-11
  • 打赏
  • 举报
回复
显示的文本就是Edit的Text;
void __fastcall TForm1::Edit1StartDock(TObject *Sender,
TDragDockObject *&DragObject)
{
Edit1->Text = "change";
}

如果并停靠在一个Panel上后,我同样想显示窗体头和“X”,
不知道什么意思。
z4none 2010-03-11
  • 打赏
  • 举报
回复
1. 控制浮动窗体标题,麻烦一点的做法是:
把 Edit1 控件放在一个 Panel1 上,设置这个 Panel1 的dkDock,dmAutomatic
并且在 Edit1 的MouseDown事件中检测左键,加入 Panel1->BeginDrag(true, 20);
经过这样设置,浮动的实际上是 Panel1 了,设置它的 Caption 就是浮动窗口的标题。

2. 在浮动窗口停靠后,要显示“窗体头”是指的标题么?
这个应该需要自定义 TDockTree,
基本步骤如下:
(1)从 TDockTree中继承一个子类,实现其中的 PaintDockFrame 函数可以自绘 DockFrame
也就是可以拖动的手柄 和关闭按钮,要显示文字当然也是可以的;
class TDockingMamager : public TDockTree
{
public:
__fastcall TDockingMamager(TWinControl* DockSite);

void __fastcall AdjustDockRect(TControl * Control, TRect & ARect); //设置 DockFrame 大小
void __fastcall PaintDockFrame(Graphics::TCanvas* Canvas, TControl* Control, const Types::TRect &ARect); //自绘 DockFrame
};
// google 这两个函数看看怎么写

(2)将被停靠的 Panel(假设为PanelLeft)的UseDockManager设置成 false;

(3)在主窗口 OnCreate 中将的 DockManager 设置成刚才的子类 new 出来的对象。
PanelLeft->DockManager = static_cast<_di_IDockManager>(*(new TDockingMamager(PanelLeft)));
PanelLeft->UseDockManager = true;

应该可以看到效果了






lst_prince 2010-03-11
  • 打赏
  • 举报
回复
如果是PageControl呢,窗体头文本如何显示?
周药师 2010-03-10
  • 打赏
  • 举报
回复
“显示的文本如何控制”

void __fastcall TForm1::Edit1EndDock(TObject *Sender, TObject *Target,
int X, int Y)
{
Edit1->Text = "X";
}

这样?

602

社区成员

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

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