我使用对接模块在Delphi(BDS 2006)和JVCL库中进行编程。我有一个问题 - 如果控件的属性DragKind = dkDock
和DragMode = dmAutomatic
,然后莫名其妙地TJvDockServer组件采取控件都是客户端,并提供对接。这是错误的,因为我发现JVCL的对接函数通常只控制包含组件类TJvDockClient的类TForm。我想知道是否有可能以某种方式阻止TJvDockServer对象的类与TForm不同?在Delphi中,每个事件的典型对接都称为OnGetSiteInfo对接,并且可以过滤客户端,但TJvDockServer中没有这样的事件。TJvDockServer和可停靠控件
回答
属性DragKind和DragMode是标准的VCL属性。 Docking内置在VCL中,从看它的角度来看,它似乎在没有任何Jedi代码的情况下工作得很好。
VCL中已经内置了停靠表单之外其他功能的功能。因此,你觉得这个莫名其妙的暗示我认为你认为Jedi加入了VCL。不,它只是添加了一些漂亮的东西,如“标签式笔记本对接”和“连体区域”与假窗口标题栏。也就是说,表单也是从TCustomControl继承而来的,任何TCustomControl实际上都可以被停靠。就像VCl一样,你可以拖拽并停靠在TPanel上。好吧,这是一个古怪的功能,你的面板可以在运行时变成你的形式,但如果你不相信我,试试吧。这是VCL为你做的,而不是绝地。
如果你的智慧,你想阻止任何不是TForm的东西,我认为你可以。 当然你可以对吗? 更新。是的你可以。 OnDockOver可以正常工作,以阻止任何面板上的对接,您想要在其上停靠。 Jedi JvDockPanels的诀窍是你在设计时不会看到它们,所以你需要在运行时通过代码来访问它们的事件。
就像普通的TPanels一样,JvDockPanels有一个TPanel.OnDockOver事件,如果你想检查你正在对接的东西,并将接受设置为false,它将被阻止对接。
好了,这个工程:
type
TCustomControlAccess = class(TCustomControl);
procedure TMainForm.FormCreate(Sender: TObject);
begin
TCustomControlAccess(dockServer.TopDockPanel).OnDockOver := MyDockOverEvent;
TCustomControlAccess(dockServer.CustomDockPanel).OnDockOver := MyDockOverEvent;
...
end;
的JvDockPanel.OnDockOver面板大事做火,但是你需要求助于像上面砍一个黑客,实际上自己处理的事件。
更新以前认为没有办法阻止这一点。但是我错了。弄清楚了。
沃伦 - 我为JVCL提供了一个更加普遍的补丁,希望你能回顾一下。这样的工作通道是显而易见的,但不是必需的。 –
不,因为支持这不是JvDocking“我们做的事情”列表。 –
支持什么? 我并不是说支持非表格,但是他们绝对应该在开发者一方没有hackathlon的情况下被拒绝 –
虽然我不能在Delphi XE2中准确再现您的行为,但通常我似乎设法阻止了JediVCL组件的VCL-frag-n-drop。
也许这不是最好的方法,但我不知道哪些是框架创建者的原创想法。
http://wiki.delphi-jedi.org/wiki/JVCL_Help:TJvDockServer只声明表单应该停靠。没有强制执行,只是硬连线的JVCL检查程序总是被调用。
unit JvDockSupportControl;
....
TJvDockCustomControl = class(TJvCustomControl)
....
protected
procedure GetSiteInfo(Client: TControl; var InfluenceRect: TRect;
MousePos: TPoint; var CanDock: Boolean); override;
...........
function TJvDockCustomControl.GetJvDockManager: IJvDockManager;
begin
// Result := IJvDockManager(DockManager);
DockManager.QueryInterface(IJvDockManager, Result);
end;
procedure TJvDockCustomControl.GetSiteInfo(Client: TControl; var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean);
var jdm: IJvDockManager; idm: IDockManager;
begin
idm := DockManager;
if nil <> idm then
idm.QueryInterface(IJvDockManager, jdm);
if nil = jdm
then CanDock := false
else jdm.GetSiteInfo(Client,InfluenceRect, MousePos, CanDock);
end;
unit JvDockTree;
.....
procedure TJvDockTree.GetSiteInfo(Client: TControl;
var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean);
begin
CanDock := IsDockable(DockSite, Client);
If CanDock then begin
GetWindowRect(DockSite.Handle, InfluenceRect);
InflateRect(InfluenceRect, DefExpandoRect, DefExpandoRect);
end;
end;
- 1. Firemonkey和可停靠表单
- 2. 可以停靠到第三方应用程序的自由停靠控件
- 3. 停靠在停靠的FlowLayoutPanel中的控件
- 4. 在本地C++中停靠控件
- 5. 用户控件停靠属性
- 6. 如何“停靠”一个Silverlight控件
- 7. 在c中停靠mdi控件#
- 8. MVC中的停靠控制
- 9. Windows窗体的可停靠自动隐藏面板控件
- 10. 如何使用户可以调整停靠控件的大小?
- 11. 如何在面板的预览顶部停靠控件下方插入顶部停靠控件
- 12. 如何使现有顶级停靠控件下的顶部停靠控件显示*
- 13. 创建停靠在任务栏上方的可停靠窗体
- 14. AppBarButtonStyle对于ToggleButton控件不可靠
- 15. 如何可靠的是XmlDataSource控件?
- 16. 如何使用停靠窗口和非停靠在一起
- 17. 如何更改DevExpress DockPanel TabText停靠和取消停靠
- 18. 覆盖控制2个AvalonDock可停靠面板
- 19. 可靠性和WCF
- 20. 如何在Visual Studios Windows应用程序中创建可停靠控件?
- 21. 任何优雅的方式来消除可停靠控件的闪烁?
- 22. 可靠和可点击svg
- 23. WPF可停靠窗口,如iGoogle
- 24. 可能停靠第三方程序?
- 25. 可停靠窗口 - 不能最大化
- 26. PyQt在Maya中的可停靠窗口
- 27. 在停靠的控件上方绘制一条线
- 28. 将Windows Phone控件停靠在StackPanel的底部
- 29. 为什么Control.Padding不会影响停靠控件的布局?
- 30. 如何调整停靠控件的大小?
试过论坛http://newsportal.delphi-jedi.org/? JVCL现在对开发人员来说很短暂,但仍然很短。 最重要的将是签署最后的JVCL来源(发布时间比一年前更早,并且已经过时),并尝试将小演示项目加入跟踪器http://issuetracker.delphi-jedi.org 这也是不错的因为,我真的不知道你想要什么和发生什么。措辞有点模糊,很难理解组件及其行为的精确关联。看起来你的英语不太流利,那么信息来源会说得更好:) –
我是绝地开发者,所以JvDocking的问题在StackOverflow中最受欢迎。 –