怎样在程序运行中用鼠标拖动label的方式调整打印位置(200分)

X

xinjia

Unregistered / Unconfirmed
GUEST, unregistred user!
我设计了一个套打卡证的程序,控制打印位置的方法是通过
Quickrep+QRband+QRlabel将变量画到相应的位置
这样在程序设计时可以用鼠标拖动QRlabel调整打印
位置,当我把程序让用户使用时,他想使用中随时可以
用鼠标拖动的方式调整打印位置,怎么实现.
 
在你的form上放一个label,位置与QRLabel完全一样,caption也一样。相应在label的拖动事件中,把
QRLabel的位置同时改变,就可以了。
procedure TForm1.FormDragOver(Sender, Source: TObject;
X, Y: Integer;
State: TDragState;
var Accept: Boolean);
begin

accept:=true;
end;


procedure TForm1.Label1EndDrag(Sender, Target: TObject;
X, Y: Integer);
begin

label1.Top:=y;
QRLabelForm.qrlabel1.top:=y;
label1.Left:=x;
QRLabelForm.qrlabel1.left:=x;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin

QRLabelForm.QuickRep1.Preview;
end;
 
拖动控件最方便的方法如下:
procedure TForm1.Label1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift:  TShiftState;
X, Y: Integer);
const
 SC_DragMove = $F012;
// a magic number
begin

 ReleaseCapture;

 Label1.perform(WM_SysCommand, SC_DragMove, 0);
end;



其它的看着办吧。
 
受daiqingbo 兄的指点,我为了能在程序运行时拖放控件,又设置了一个窗体form2
QuickRep ->QRband->Label,label的位置同前一个窗体form1中QRlabel的
位置一样,然后设置label1.Enddrag事件,x,y分别赋给label.top,label.left
form2设按钮,click事件为:
form1.qrlabel1.top:=label1.top;
form1.qrlabel1.left:=label1.left;

程序运行时,label1不受点击和鼠标拖的影响,后来将Enddrag事件
改为Mouseup事件没有拖的感觉,坐标变化不对.
 
请CathyEagle在讲清楚点,我正急着解决这个问题.
 
用我的方法,你可以在运行时任意拖动控件,你对QRlabel用同样的方法
即可实现在运行时由用户调整其位置。
不过我没试过打印,不知道行不行。
 
CatheEagel:
我试了你的方法,可编译时报告出错,出错语句为:
illegal charactter in input file ' ' ($A1A1)
我不知道是哪里错了。
 
illegal charactter in input file ' ' ($A1A1)
是你错误行用了全角字符造成的,请切换到英文输入法
 
和全角字符无关,虽然全角字符也能产生这样的错误
我直接把CAtheagel的程序内容粘贴过去的.试用期间又修改了常量名或常量值都不起作用.
 
To xinjia:
  very sorry,jiachun兄说得对,我的代码是从我的主页上复制过来的,
做主页的时候为了排版整齐,我用了全角字符,下面的代码应该就没问题了。
procedure TForm1.Label1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift:TShiftState;
X, Y: Integer);
const
SC_DragMove = $F012;
// a magic number
begin

ReleaseCapture;

Label1.perform(WM_SysCommand, SC_DragMove, 0);
end;
 
再次试一遍,编译通过了,但是这个Label1还是不能移动,是不是其它地方还需要设置
 
实在抱歉,确实不行,但是可以这样解决:
把Label放在一个Panel上,Align设置成alClient,再用如下代码即可。
procedure TForm1.Label1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift:TShiftState;
X, Y: Integer);
const
SC_DragMove = $F012;
// a magic number
begin

ReleaseCapture;

Panel1.perform(WM_SysCommand, SC_DragMove, 0);
//注意是Panel
end;
 
深度立宪有控件。
 
接受答案了.
 
顶部