窗体里有一个图片,移动窗体时为什么不显示?(50分)

  • 主题发起人 主题发起人 bbsnet
  • 开始时间 开始时间
B

bbsnet

Unregistered / Unconfirmed
GUEST, unregistred user!
具体代码:
unit MainUnit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses ImageUnit;

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
form2.show;
for i:=form2.Left to 1024-form2.Width do
form2.Left:=i;
end;


end.

********************************************************

unit ImageUnit;

interface

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

type
TForm2 = class(TForm)
Image1: TImage;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

end.

********************************************
说明:
MainUnit单元里只有一个按键事件(功能是移动ImageUnit单元),ImageUnit单元里只有一个Image1控件(有图片在里),在移动的时候ImageUnit里的东西看不到,这是要怎么做?
在线等待!!!
 
visible设成false了吧
 
你这样写,主进程根本没有时间把图片显示出来,还是用线程吧。

unit Unit1;

interface

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

type
TShowThread = class(TThread)
procedure ShowANI;
protected
procedure Execute; override;
end;

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
form2.show;
TShowThread.Create(False);
end;

{ TShowThread }

procedure TShowThread.Execute;
begin
FreeOnTerminate := true;
Synchronize(ShowANI);
end;

procedure TShowThread.ShowANI;
var i: integer;
begin
for i:=form2.Left to 1024-form2.Width do
form2.Left:=i;
end;

end.
 
FreeOnTerminate := true;
Synchronize(ShowANI);
上面两句是什么意思呀?
 
FreeOnTerminate := true;
这一句是让线程运行完毕之后就自行销毁

Synchronize(ShowANI);
这一句是因为界面控件一般都不是线程安全的,所以如果线程要修改界面控件属性,就用这个函数来防止线程对控件的争用。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3641975
 

Similar threads

I
回复
0
查看
529
import
I
I
回复
0
查看
732
import
I
S
回复
0
查看
768
SUNSTONE的Delphi笔记
S
I
回复
0
查看
602
import
I
后退
顶部