Witam !
Mam problem z wzajemnym wywoływaniem się procedur.
W poniższym przykładzie są 2 przyciski i 2 Labele, Procedura Button2 zlicza licznikiem Licznik2 do 40 ale zajmuje mu to 4 sek, Button1 zlicza Licznikiem1 ale wywołuje również click-nięcie Buttona2, przez co musi czekać aż miną te 4 sekundy zanim doda do licznika1.
Teraz pytania:
- czy jest jakiś sposób by wywołana procedura robiła się w tle, lub by program Buttona1 nie czekał aż się skończy wykonywać procedura Buttona2 ?(czytałem na forum coś o wątkach ale sprawa wygląda dość skomplikowanie, może jest jakiś prostszy sposób)
- zakładając ze pierwszy problem uda się rozwiązać, czy da się zrobić tak by procedura Buttona1 nie wywoływała ponownie procedury Buttona2 dopóki się ona nie zakończy ale robiła swoje czyli dodawała do licznika1, a jak się procedura Button2 skoczy to znowu ja wywoływała ?
Poniżej kod przykładu, przykład jest tylko zobrazowaniem problemu wiec proszę się nie skupiać nad przyciskami, Labelami czy innymi szczegółami.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Licznik1, Licznik2 : Integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Button2.Click;
Licznik1 := Licznik1 +1;
Label1.Caption := InttoStr(Licznik1)
end;
procedure TForm1.Button2Click(Sender: TObject);
var
a : Integer;
begin
for a :=1 to 40 do
begin
Licznik2 := Licznik2 +1;
Label2.Caption := InttoStr(Licznik2);
sleep(100);
Application.ProcessMessages;
if Application.Terminated then Break
end;
end;
end.
Pozdrawiam Szymon