Delphi程序在哪里画控件,急(100分)

  • 主题发起人 主题发起人 robinswp
  • 开始时间 开始时间
R

robinswp

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在用PaintBox作背景,在它的OnPaint事件中重画了背景图
Canvas.Draw(...);
但我发觉重画后,Form上的Label,SpeedButton就不见了.
我不想用其它控件代替,想在OnPaint事件中把Label,SpeedButton
重画一下,但我不知道如何实现,请各位帮一下.
 
在PaintBox的OnPaint事件中
begin
Canvas.Draw(...);
label1.Refresh;
SpeedButton.Refresh;
end
give me fen
 
label1.Refresh是不是又会触发OnPaint事件,形成死循环.
反正我早wangxd的方法试了后,Label不停的Refresh,最后把握的机器死了
 
用image 来做背景,只要在FormCreate 画一次就行,不用响应OnPaint。

好像行的,试试看?
 
paintbox.cavas.draw(...);
你上面的那句好象是在form的画布上画。
 
好象必须在form的onpaint中重画才行
 
你首先要做的是:用右键点 PaintBox,选择“Send to back”,然后把 Canvas.Draw(...);
改为 PaintBox1.Canvas.Draw(...),不要在 Form.Canvas 上画。
我替你测试过上面的方法的。
Ok ?
 
我刚才又试了一下,Send to back 和bring to front 都可以,你最好把代码贴上
 
谁说必须响应onpaint的? 试过才知道的,我的demo证明我没有错。

{ demo.. 背景窗体
image1.picture is nil , image2 导入了背景图片。
image.align is alClient;
}
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Label1: TLabel;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
image1.SendToBack; //最好加此句
image1.Canvas.StretchDraw(image1.ClientRect,image2.Picture.Graphic);

end;

end.
delphi 5 测试通过!
 
多人接受答案了。
 
后退
顶部