我做了个自定义截屏小工具,截屏之后已经设置好了自定义手写字,想再加个自定义输入,就想到了label,当label随鼠标拖动生成label,背景设置为透明,输入内容后给人感觉像是输入在图片上了,可是当把图片保存时就没有label上的内容,今天上windows课时,老师指教说获得picture的HDC应该就可以把picture及覆盖上的东西都涉及到.我就想到bitblt(),可是无奈能力有限没有做出想要的效果来,请指教一下.再有一个问题就是当截屏图片大于ScrollBox时,通过移动ScrollBox的游标移动图片后,再动态生成label时,label生成的left,top的相对位置就不对了,试了几种方法都没有成功,请帮忙分析一下,应该怎么设置?
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin if isWrite then
begin
Write:=true;
if self.Image1.Width>=self.ScrollBox1.Width then
begin
...
//
end
else
la.Left:=abs(X+self.Image1.Left);
la.Top:=abs(Y+self.Image1.Top);
ptX:=abs(X+self.Image1.Left);
ptY:=abs(Y+self.Image1.Top);
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin if isWrite then
begin
Write:=true;
if self.Image1.Width>=self.ScrollBox1.Width then
begin
...
//
end
else
la.Left:=abs(X+self.Image1.Left);
la.Top:=abs(Y+self.Image1.Top);
ptX:=abs(X+self.Image1.Left);
ptY:=abs(Y+self.Image1.Top);
end;
bt:tbitmap;
begin
bt:=tbitmap.create;
bitblt(bt.canvas.handle,image1.left,image1.top,image1.width,image1.height,self.Canvas.Handle,image1.left,image1.top,srccopy);
bt.savetofile( 'aaa.bmp ');
bt.free;
end;
SetBkMode(Canvas.Handle,TRANSPARENT); //设置背景透明
Image1.Canvas.TextOut(100,100,'你要输出的文字');
SetBkMode(Image1.Canvas.Handle,TRANSPARENT); //设置背景透明
Image1.Canvas.TextOut(100,100,'你要输出的文字');
我想让用户自定义选择区域输入,TextOut()里的前两个位置参数不好设置呀?
假设scrollbax没有出现滚动条,那么真实区域当然就是客户区了;
如果出现滚动条,则必须计算滚动条(垂直和水平都需要)位置,否则,结果就是你在主楼说的,位置不对。
这样说你明白不?
因为客户区大小是固定的,
假设scrollbax没有出现滚动条,那么真实区域当然就是客户区了;
如果出现滚动条,则必须计算滚动条(垂直和水平都需要)位置,否则,结果就是你在主楼说的,位置不对。
这样说你明白不?