Warum übergibst du denn um Gottes Willen einen Boolean Zeiger? Und warum übergibst du deiner Prozedur das ChekcBox Objekt? Was soll die damit anfangen? Bitte mal etwas selber nachdenken. Flag muss ausserdem global sein, wie willst du es sonst setzen, wenn er in der Schleife ist?
Delphi-Quellcode:
type
TForm1 = class(TForm)
CheckBox1: TCheckBox;
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure CheckBox1Click(Sender: TObject);
private
{ Private-Deklarationen }
Flag: Boolean;
procedure WaitForFlag(TimeOutSeconds: DWORD = 10);
public
{ Public-Deklarationen }
end;
var
Form1 : TForm1;
implementation
{$R *.dfm}
procedure TForm1.WaitForFlag(TimeOutSeconds: DWORD = 10);
var
EndTime : DWORD;
begin
Flag := True;
EndTime := GetTickCount + TimeOutSeconds * 1000;
while (Flag = True) and (GetTickCount < EndTime) do
begin
Sleep(1);
Application.ProcessMessages;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Flag := True;
WaitForFlag;
Label1.Caption := 'Done ...';
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Flag := False;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
Flag := not CheckBox1.Checked;
end;