前面地问题没人答出来,换一个:如何在程序运行时显示窗体的网格(display grid)?解决马上放分 (100分)

  • 主题发起人 主题发起人 desertsmoke
  • 开始时间 开始时间
谢谢老人家,mail我已经都记下了!

问题我已经都解决了。
 
但有新问题:
如何在程序运行时显示窗体的网格(display grid)?(不会自己通过Cancas画吧??)
及拖动控件时如何设置对齐到网格(snap to grid)?
 
desertsmoke:
不介意的话,给我发一个你的示例:xtall@163.com
 
给分了吧
 
没人答出问题,分不好给啊
 
ide config tab
do it yourself.
 
请看清楚题目
 
也给我一份吧
skysondy@163.com
 
1.只能自己通过Canvas画,窗体运行时没有此功能,你可以看VCL代码就知道了,设计期间的网格是IDE画的。
2.同上,不过自己实现的话也不难:响应拖动控件的事件,然后判断其位置是否是网格间隔的整数倍,如果不是则将其修正为最接近的能被网格间隔整除的数字。
 
同时拖动多个控件怎么处理?
 
我写过一个程序,和Delphi一模一样的开发环境,属性编辑器、在Form上编辑控件等简直和Delphi
一模一样,也可以动态加载第三方包,可以打开和编辑任何窗体(不过用到的第三方包必须先安装)。

当然没有Delphi那样强大,麻雀虽小,但五脏俱全。

源代码嘛,由于是公司的一个产品,不便于公开,还请原谅。
 
to:lhzzj
我以前在网上见到过一个这样的源程序,不过现在找不到了,网格及对齐到网格是怎么实现
的,其他问题已经解决了(我始终感觉象楼上的朋友说的办法实现起来效果不是很好)
 
to desertsmoke:
楼上的说的对,我同意他的观点,下面是显示网格代码,对齐的代码很简单,我就不提供了。
var
I, J, HStart, HEnd, VStart, VEnd, HCount, VCount, X, Y, SizeX,SizeY: Integer;
begin
SizeX := 8;
SizeY := 8;

if not (FSenderForm is TProxyForm) then Exit;
with FSenderForm do
begin
Canvas.Pen.width := 1;
Canvas.Pen.Mode := pmNot;
VStart := (Canvas.ClipRect.Top div SizeY) * SizeY;
VEnd := (Canvas.ClipRect.Bottom div SizeY) * SizeY;
HStart := (Canvas.ClipRect.Left div SizeX) * SizeX;
HEnd := (Canvas.ClipRect.Right div SizeX) * SizeX;
HCount := (HEnd - HStart) div SizeX + 1;
VCount := (VEnd - VStart) div SizeY + 1;
Y := VStart;
for I := 1 to VCount do
begin
X := HStart;
for J := 1 to HCount do
begin
Canvas.moveto(X, Y);
Canvas.LineTo(X+1, Y+1);
X := X + SizeX;
end;
Y := Y + SizeY;
end;
end;
 
问题都解决了,该结束了,谢谢各位!
 
后退
顶部