vgscene窗口不能移动

__lhy 2013-12-07 02:57:27
设置Root1->HitTest=False还是不能移动,用过vgscene的朋友麻烦告知一下,谢谢!
http://www.xuedelphi.com/article/html2010/2010092613015116.html
...全文
299 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
__lhy 2013-12-07
  • 打赏
  • 举报
回复
引用 28 楼 sololie 的回复:
这个就不清楚了,看了下示例,实际接受拖动是back这个控件(TvgRectangle),应该是在这个TvgRectangle控件封装了这个拖动功能,得跟它的源码去看,或者看官方文档。 不过没兴趣研究这个东西了,你也不应该花时间在这里了,vgscene这东西被EMB收购包装成firemoneky后,vgscene貌似也都不再维护了,同样的功能和效果firemeonky都能实现(因为压根就是同一个东西)。可以去研究firemonkey。
好的 谢谢 结帖了
sololie 2013-12-07
  • 打赏
  • 举报
回复
这个就不清楚了,看了下示例,实际接受拖动是back这个控件(TvgRectangle),应该是在这个TvgRectangle控件封装了这个拖动功能,得跟它的源码去看,或者看官方文档。 不过没兴趣研究这个东西了,你也不应该花时间在这里了,vgscene这东西被EMB收购包装成firemoneky后,vgscene貌似也都不再维护了,同样的功能和效果firemeonky都能实现(因为压根就是同一个东西)。可以去研究firemonkey。
__lhy 2013-12-07
  • 打赏
  • 举报
回复
引用 26 楼 sololie 的回复:
root1->HitTest=False的话,那么root1盖住的主窗体就能接受到鼠标点击了,即鼠标点击能穿透到主窗体中,在主窗体的OnMouseDonw下处理就行了,你要明白HitTest的意思嘛
root1->HitTest=False 主窗体的OnMouseDown不会触发哦 不过我不是这个意思 (实现方法)现在把root1->HitTest=True,然后可以在Root1的MouseDown中处理 就可以实现拖动了 另外我说的是VgScene自带的例程中只设置root1->HitTest=False就实现了拖动(而没有像上一种实现方法那样重载MouseDown事件) 自带的例程:http://pan.baidu.com/s/1u1bbD
sololie 2013-12-07
  • 打赏
  • 举报
回复
root1->HitTest=False的话,那么root1盖住的主窗体就能接受到鼠标点击了,即鼠标点击能穿透到主窗体中,在主窗体的OnMouseDonw下处理就行了,你要明白HitTest的意思嘛
__lhy 2013-12-07
  • 打赏
  • 举报
回复
引用 24 楼 sololie 的回复:
就是把root1->HitTest=true, 非false啊。。。咋还不明白
明白啊 已经实现 但是vgScene自带的demo只设置root1->HitTest=False就能移动 你有兴趣看一下
sololie 2013-12-07
  • 打赏
  • 举报
回复
就是把root1->HitTest=true, 非false啊。。。咋还不明白
__lhy 2013-12-07
  • 打赏
  • 举报
回复
引用 19 楼 kfrght 的回复:
记得要更改root1的hittest属性为false,否则窗体无法拖动! 这不是说的很清楚了么?那么你要的是什么效果? 有标题栏的话就:记得要更改root1的hittest属性为false,否则窗体无法拖动! 没有标题栏的话就用我给你的代码 你的第一个网页的教程中是把标题栏去掉了的,你用root1的hittest属性为false+我的代码,或者在窗体上加一个Panel作为容器,如果不影响你的界面的话 加个容器是很正常的编程需求
不是这个意思,你看看这个效果 http://pan.baidu.com/s/1GfH8A
__lhy 2013-12-07
  • 打赏
  • 举报
回复
引用 20 楼 sololie 的回复:
什么是“vgScene的对话框”,如果想在窗体任意地方都可以拖动,那么把hittest设为true,处理root1的OnMouseDown ReleaseCapture(); PerForm(WM_SYSCOMMAND, 0xF012, 0); 就不要用另外控件了,即不要标题栏概念了,整个窗体任意都拖动
是的
宝龙哥 2013-12-07
  • 打赏
  • 举报
回复
不进入,就是不响应窗体的鼠标代码,是因为vgScene覆盖了窗体,你点击的不是窗体而是vgScene控件或其生成的新控件,要在其鼠标响应事件里写 如果vgScene没有引出鼠标事件接口的话就额外加一个容器控件到窗体上就可以了
sololie 2013-12-07
  • 打赏
  • 举报
回复
什么是“vgScene的对话框”,如果想在窗体任意地方都可以拖动,那么把hittest设为true,处理root1的OnMouseDown ReleaseCapture(); PerForm(WM_SYSCOMMAND, 0xF012, 0); 就不要用另外控件了,即不要标题栏概念了,整个窗体任意都拖动
宝龙哥 2013-12-07
  • 打赏
  • 举报
回复
记得要更改root1的hittest属性为false,否则窗体无法拖动! 这不是说的很清楚了么?那么你要的是什么效果? 有标题栏的话就:记得要更改root1的hittest属性为false,否则窗体无法拖动! 没有标题栏的话就用我给你的代码 你的第一个网页的教程中是把标题栏去掉了的,你用root1的hittest属性为false+我的代码,或者在窗体上加一个Panel作为容器,如果不影响你的界面的话 加个容器是很正常的编程需求
__lhy 2013-12-07
  • 打赏
  • 举报
回复
引用 15 楼 kfrght 的回复:
[quote=引用 13 楼 qq752923276 的回复:]
[quote=引用 9 楼 kfrght 的回复:]
在窗体的 OnMouseDown 事件中加入下面的代码:

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(Button == mbLeft){ // 判断是否按了鼠标左键
//ReleaseCapture(); // 释放鼠标操作
SetCaptureControl(NULL); // 我决得这样比用ReleaseCapture好
SendMessage( Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); // 移动无标题栏窗体
}
}


或者在你拖动时鼠标光标所在的控件的MouseDown事件里

将窗体设置为bsNone
然后添加vgScene控件 设置vaScene Align设置为alClient Transparency为True
在vaScene上添加一个Window(Add Object->HUD->Window)
运行后窗口不能拖动,只能关闭[/quote]
把代码写在你按住拖动的那个控件的MouseDown里[/quote]


引用 15 楼 kfrght 的回复:
[quote=引用 13 楼 qq752923276 的回复:]
[quote=引用 9 楼 kfrght 的回复:]
在窗体的 OnMouseDown 事件中加入下面的代码:

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(Button == mbLeft){ // 判断是否按了鼠标左键
//ReleaseCapture(); // 释放鼠标操作
SetCaptureControl(NULL); // 我决得这样比用ReleaseCapture好
SendMessage( Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); // 移动无标题栏窗体
}
}


或者在你拖动时鼠标光标所在的控件的MouseDown事件里

将窗体设置为bsNone
然后添加vgScene控件 设置vaScene Align设置为alClient Transparency为True
在vaScene上添加一个Window(Add Object->HUD->Window)
运行后窗口不能拖动,只能关闭[/quote]
把代码写在你按住拖动的那个控件的MouseDown里[/quote]如果添加一个其他控件如TPanel是可以实现的
但是如果想拖动vgScene的对话框,重载MouseDown事件根本就不进入,
大家看看vgScene的效果图吧

做成这种效果按下面这个步骤就行了:

本篇文章主要是讲解如何使用vgScene来设计圆角边框带阴影的窗体,大家都知道以前设置圆角窗体需要使用API函数来实现,阴影做起来也需要写大段的代码!但在vgScene里面却有现成的圆角带边框的窗体来使用!

1.新建一个功能,添加一个vgScene控件vgScene1,设置窗体为无边框样式,设置vgScene1充满整个窗体,并透明vgScene1的Transparency属性设置true.

2.在vgScene1控件的root1上面鼠标右键选择Add object---HUD菜单项---选择HudWindow,设置HudWindow1充满整个窗体,以下是一些常见属性及功能说明:

HudWindow1.Text:='测试的窗体'; //设置窗体标题栏文本
HudWindow1.StrokeThickness:=1;//窗体边框像素
HudWindow1.ShowCaption:=True; //是否显示标题文本
HudWindow1.ShowSizeGrip:=True; //是否显示拖拉尺寸的小三角形
HudWindow1.ShowCloseButton:=True; //是否显示关闭按钮

更改颜色fill属性,还可以修改边框颜色stroke属性等等,其他的一些属性具体的各位朋友可以点击进去动手试试看!

3.HudWindow1上面可以添加一些其他的按钮如按钮vgButton,标签vgLable,记得要更改root1的hittest属性为false,否则窗体无法拖动!
sololie 2013-12-07
  • 打赏
  • 举报
回复
就像15楼说的那样
sololie 2013-12-07
  • 打赏
  • 举报
回复
http://pan.baidu.com/s/106E8A 点击模拟的标题栏可以移动
宝龙哥 2013-12-07
  • 打赏
  • 举报
回复
引用 13 楼 qq752923276 的回复:
[quote=引用 9 楼 kfrght 的回复:]
在窗体的 OnMouseDown 事件中加入下面的代码:

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    if(Button == mbLeft){ // 判断是否按了鼠标左键
	  //ReleaseCapture(); // 释放鼠标操作
	  SetCaptureControl(NULL); // 我决得这样比用ReleaseCapture好
      SendMessage( Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); // 移动无标题栏窗体
    }
}
或者在你拖动时鼠标光标所在的控件的MouseDown事件里
将窗体设置为bsNone 然后添加vgScene控件 设置vaScene Align设置为alClient Transparency为True 在vaScene上添加一个Window(Add Object->HUD->Window) 运行后窗口不能拖动,只能关闭[/quote] 把代码写在你按住拖动的那个控件的MouseDown里
__lhy 2013-12-07
  • 打赏
  • 举报
回复
__lhy 2013-12-07
  • 打赏
  • 举报
回复
引用 9 楼 kfrght 的回复:
在窗体的 OnMouseDown 事件中加入下面的代码:

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    if(Button == mbLeft){ // 判断是否按了鼠标左键
	  //ReleaseCapture(); // 释放鼠标操作
	  SetCaptureControl(NULL); // 我决得这样比用ReleaseCapture好
      SendMessage( Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); // 移动无标题栏窗体
    }
}
或者在你拖动时鼠标光标所在的控件的MouseDown事件里
将窗体设置为bsNone 然后添加vgScene控件 设置vaScene Align设置为alClient Transparency为True 在vaScene上添加一个Window(Add Object->HUD->Window) 运行后窗口不能拖动,只能关闭
sololie 2013-12-07
  • 打赏
  • 举报
回复
例如你加个panel放在顶部模拟标题栏,处理panel的mousedonw消息移动,我下了你的vgscene包装上测试可以的
sololie 2013-12-07
  • 打赏
  • 举报
回复
加个控件模拟标题栏,就可以移动了
宝龙哥 2013-12-07
  • 打赏
  • 举报
回复
比如你鼠标按住Panel1来拖动那么就在Panel1MouseDown事件里写
加载更多回复(9)
VGScene speeds the development of all graphical application, providing: a graphical editor integrated in IDE, graphical objects, simplify animation, advanced windows and controls, maximum performance, skinning engine, bitmap effects. VGScene can be used as development tools for SCADA, GIS, CAD and KIOSK applications. Powerful vector engine like Adobe Flash or Microsoft WPF Fast realtime anti-aliased vector graphics, resolution independent, alpha blending, gradient and special visual filling WYSIWYG design-time and run-time designer and property editors Advanced GUI engine - window, button, textbox, numberbox, memo, anglebox, list box and much much more Advanced skinning engine based on vector graphics styles. Cool exists styles - Dark, Modern, Vista. VGScene provides shape primitives for 2D graphics along with a built-in set of brushes, pens, geometries, and transforms Advanced animations techniques calculated in background thread. Easy to use, accuracy, minimal CPU usage and automatic FPS correction VGScene provides for bitmap effects, however, they are rendered in software. Special effects such as dropshadows and blurring are built in. VGScene can be used as development tools for SCADA, GIS, CAD and KIOSK applications Path object have SVG, WPF path data format Very easy to use and powerful layouts. The child elements are recursively arranged by their parents. Layered forms, unicode enabled Jpeg, Png, Tiff and Gif format read/write support on Windows and Mac OS X Fast thumbnail creation and image processing Cross-platform solution available on Microsoft Windows and Apple Mac OS X

604

社区成员

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

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