在布上显示图形(100分)

  • 主题发起人 主题发起人 donglixin
  • 开始时间 开始时间
D

donglixin

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样立即在布上显示图形,而无须作任何点击.
 
FORM有ONPAINT事件,可以在其中添加绘图语句,比如:
procedure TForm1.FormPaint(Sender: TObject);
begin
form1.Canvas.MoveTo(0,0);
form1.canvas.LineTo(100,100);
canvas.Ellipse(int1,int2,int3,int4);
end;
 
同意 youtoo
 
怎么? 你每次在canvas上显示东西都要先点一下吗? :-)
 
可以在formonshow里做做手脚.
 
>怎样立即在布上显示图形,而无须作任何点击.
不明白:-( 本来就不用点击呀???
 
好象你把他写到重画的onpaint里面的就不会需要你去点击的了啊!!!
你试试去写在初始化里面呢?就是onactive里面?呵呵。
 
点击什麽???
如引入一个图片可这样
procedure TForm1.FormPaint(Sender: TObject);
begin
form。canvas.graphic.bitmap.loadformfile(c:///)
end;
如果 你指的是 图形显示没有停顿。那边涉及到了图形缓存知识。很难啊

 
上面各位大侠说的极是,小笨也有一种方法

就是在上面加一个TTIMER,让他到一定的时候触发,时间可以你来定
触发后画图,然后你就可以得到你画的东西了,画完了就关掉TIMER

这种方法有几个用途
1,只需要画一次的东西,不需要重画的
2,用起来比较方便
3,可以比较方便的控制

其实,上面的方法已经不错了,我只是画蛇添足而已,望包涵包涵
 
很简单。例如:
var
Bitmap : TBitMap;
begin
Bitmap := TBitmap.Create;
try
with Bitmap do begin
LoadFromFile('../Images/Splash/256color/factory.bmp');
Transparent := True;
TransParentColor := BitMap.canvas.pixels[50,50];
Form1.Canvas.Draw(0,0,BitMap);
TransparentMode := tmAuto; // Transparent color now is clDefault = TColor($20000000);
Form1.canvas.Draw(50,50,BitMap);
end;
finally

Bitmap.Free;
end;
 
前日刚刚有人问过小弟,不过他问的是PB中同样的问题,因小弟对PB不熟,只得给他在
Delphi中演示一番.
前面大虾所提的ONPAINT事件,formonshow,onactive以及在上面加一个TTIMER都给试了一遍结果只在ONPAINT和TIMER中可以,开始有点不明白,后来查了帮助才有点明白
然来有这么一段话在这里:
When a form is being created and its Visible property is True, the following events occur in the order listed:

1. OnCreate
2. OnShow
3. OnActivate
4. OnPaint

Use OnPaint to perform special processing when the form is redrawn. Any special painting on the form should be done in this event. OnPaint occurs before any controls on the form are painted.

If you use the form Canvas property outside the OnPaint event, it will be erased(抹去) and drawn-over(覆盖) by the next OnPaint event.

也就是说在窗体创建时要依次发生1-4,所以只有在4中能做到.不知小弟理解是否有误
请高手指点.(我用的是form1.Canvas.MoveTo(0,0);form1.canvas.LineTo(100,100))
 
请继续讨论或结束问题
 
试一试canvas.draw:
功能:用指定的canvas把图片在坐标(x,y)处作为背景。
procedure Draw(X, Y: Integer; Graphic: TGraphic);
Description:
使用方法draw在画布上画一个图片。draw会使用图片中的draw方法。
该图片的大小由图片自身决定,它的位置由参数(x,y:integer;)决定
该图片的左上角的坐标即为(x,y);
draw方法应用的图片可以是位图(bitmap),图标(icons)或是图元文件
(metafiles)。如果应用的图片是位图(bitmap),那么该位图的值可以
由方法canvas.copymode返回。
例如:
procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap : TBitMap;
begin
Bitmap := TBitmap.Create;
try
with Bitmap do begin
LoadFromFile('C:/My Documents/图片集/ihw.bmp');
Transparent := false;
TransParentColor := BitMap.canvas.pixels[50,50];
Form1.Canvas.Draw(100,100,BitMap);
TransparentMode := tmAuto; // Transparent color now is clDefault = TColor($20000000);
Form1.canvas.Draw(50,50,BitMap);
end;
finally
Bitmap.Free;
end;
end;
 
你不想有任何动作是不是在困惑重绘的问题?
这好办!只要使用UPDATE即可!将你的绘图的程序写到ONPAINT事件中,使用UPDATE
即可自动调用ONPAINT过程了!西...
 
同意 在心
 
多人接受答案了。
 
后退
顶部