about canvas(50分)

  • 主题发起人 SuperMMX
  • 开始时间
S

SuperMMX

Unregistered / Unconfirmed
GUEST, unregistred user!
想在TScrollBox中加入Canvas属性,请问该怎么加,我加了但不能画。
也不出什么错,只是看不见我画的东西。
 
我想,你应该重载它的PAINT过程,然后再里面画你想画的东西。
 
这样:
var
dc:Integer;
begin
dc:=getDC(ScrollBox1.handle);
//以下就可以画了
Ellipse(dc,10,10,100,100);
............
 
补充:
将我的代码写再Form.Paint事件的处理代码中,要不最小化或被掩盖后
画的东西就没了。
 
我什么也不画,只是加一个canvas,在另一个程序中用这个控件,再在上面画东西,
该怎么办?Help!,Thx in avdvance!
 
只有从ScrollBox继承一个新的控件出来了.

或者,当需要画ScrollBox时:
var Can:Tacnvas;
begin
DC:=GetDC(ScrollBox1.handle);
Can:=TCanvas.Create;
Can.Handle:=DC;

现在你在Can上面画就是了.

 
现编了一个,马上要下班了,没试。
你试试看:
unit scb;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TScb= class(TScrollBox)
private
FCanvas:TCanvas;
function getCanvas:Tcanvas;
procedure setCanvas(c:Tcanvas);
public
constructor Create(AOwner: TComponent);override;
destructor destroy;override;
property Canvas:TCanvas read getCanvas write setCanvas;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [Tscb]);
end;

destructor Tscb.destroy;
begin
fCanvas.Free;
inherited destroy;
end;
constructor Tscb.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
parent:= Twincontrol(AOwner);
fCanvas:=TCanvas.create;
fCanvas.Handle:=getDC(self.Handle);
end;
function Tscb.getCanvas;
begin
if Assigned(fCanvas) then
result:=fCanvas;
end;
procedure Tscb.setCanvas(c:Tcanvas);
begin
if assigned(c) then
begin
fCanvas.Free;
fcanvas:=c;
end
end;

end.
 
正常的用法应该在里面加一个paintbox,一般是包容器中都不设置canvas正是因为自
己可以包容paintbox.
 
to 面条:
在create里,我用的是FCanvas.Control := Self;查delphi的vcl源码
得到的。


现在只有一个问题,就是当滑动时,canvas的内容就没有了,是不是应该在
onpaint 或者是onScroll中写些什么,请指教。thx!
 
自己试一试不就知道了. 大概是OnPaint事件吧?
 
不知道该画些什么东西,相当于保存Canvas上的东西。各位各位,帮帮忙。
 
全部重画.

换句话说,你应该把你在Canvas上绘图的语句全部放到OnPaint事件里面调用.
 
不会这样吧,不懂的说,我的是要在程序外画,难道scroll就全没了吗?
(是这样,我试过的)再说,我又不知道另一个程序要画什么,cAkk, help me!
 
啊???? 用另一个程序画自己的程序? 而且是没有Canvas的控件?

这得让我想一想....别着急.
 
不是这个意思,我是说,canvas 是 我要写的这个控件的属性,
我要在其他程序中在他上面画东西,现在的问题就是,在scroll后,
原来画的内容就没了,我想留住它,就象delphi的例子中有一个,
只不过他那个用的是Timage,固定了大小。
 
delphi里面的哪个例子? 我看看,先明白一下你的意思.
 
哪个例子?
 
啊,我还是没说清楚。

canvas 是 我要写的这个控件的属性,我要在其他程序中在他上面画东西
(Canvas 上当然能画东西),现在我能做到在上面画东西。但是一移动
滚动条,原来画的就没了,多滚动几次,就什么也看不到了,hehe。
我想让它滚动以后原来的内容还在。

delphi中的例子是在image中画图,和windows中的画图差不多,就不谈它了。

还有,我怎么才能在canvas中画图越界时,不被clip, 而出现滚动条。

 

Similar threads

回复
0
查看
519
万一
回复
0
查看
418
不得闲
回复
0
查看
660
不得闲
顶部