폼1에서 버튼을 클릭하여 폼2를 동적으로 두개 생성했습니다.
다음 폼2의 버튼을 클릭하면 루프를 50번 돌면서 for문의 첨자값을 라벨에
뿌려지도록 했습니다.
여기서 궁금한것은 생성된 두개의 폼2의 처리를 각각 독립적으로
처리하게 하고 싶은데 그게 잘 안됩니다.
폼1에서 생성한 두개의 폼2를 생성된 순서데로 편의상 A와 B로 칭한다면
A의 버튼을 클릭하여 20번쯤 돌게 되었을때 B의 버튼을 클릭하면
A는 그 수행을 20에서 멈추고 B에서 다시 1부터 시작을 하다가 B가 50번까지
모두 수행하면 다시A로 와서 멈추었던 20번부터 비로소 루프를 마칠때까지
실행됩니다.
전 A든 B든 버튼을 클릭하면 서로 독립적으로 루프가 끝날때까지 끊기지 않고
실행되길 바라는데 무엇이 잘못인지 모르겠습니다.
이나마도 ProcessMessages를 사용하지 않으면 어느 한쪽 처리가 끝날때까지는
다른 폼의 버튼이 눌리어 지지도 않습니다.
부디 가르쳐 주시면 고맙겠습니다.
두서없이 질문드렸습니다만 아래에 폼1과 폼2부분의 소스가 있으니
한번테스트 해보시고 답변 주셨으면 고맙겠습니다.
그럼 즐거운 하루 되시길....
//폼1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, 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 Unit2;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
for i := 0 to 1 do
begin
form2 := Tform2.create(self);
form2.show;
end;
end;
end.
//폼2
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.Button1Click(Sender: TObject);
var i : integer;
begin
for i := 0 to 50 do
begin
application.ProcessMessages;
label1.Caption := inttostr(i);
refresh;
sleep(100);
end;
label1.Caption := '완료';
end;
end.
이런경우 동적생성할 Form2를 쓰레드로 생성하세요
그럼 생성된 쌍동이놈들이 질문 상황과 달리
말 안들어 먹고(?) 고집스럽게 자기일만 할겁니다.
Form2는 걍 놔두시구요 Form1의 소스를 아래처럼 수정해보세요..
그나저나 누가 혹시 Mscomm32.ocx 보다 더 쓸만한 콤포 알고 계신분 없나여?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TAT = class(Tthread)
protected
procedure Execute; override;
end;
var
Form1: TForm1;
AT : TAT;
implementation
uses Unit2;
{$R *.DFM}
procedure TAT.Execute;
var i : integer;
begin
Form2 := TForm2.Create(Form1);
Form2.Showmodal;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
for i := 0 to 1 do
AT := TAT.Create(false);
end;
end.