Announcement

Collapse
No announcement yet.

Zugriff aus einer Methode auf eine boolsche Variabel die von einem Timer gesetz wird

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriff aus einer Methode auf eine boolsche Variabel die von einem Timer gesetz wird

    wie kann ich auf eine Variable, die von einem Timer bearbeitet wird aus einer Whileschleife (Whileschleife in einer Methode) darauf zugreifen?
    Beispiel:
    <pre>
    unit UnitTimertest;
    <br>
    interface
    <br>
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ExtCtrls, StdCtrls;
    <br>
    type
    TTimertest = class(TForm)
    Timer1: TTimer;
    Taster: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure TasterClick(Sender: TObject);
    <br>
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;
    <br>
    var
    Timertest: TTimertest;
    Timerinterrupt : boolean;
    breakpoint : integer;
    <br>
    implementation
    label Schleife,over;
    {$R *.dfm}
    <br>
    procedure TTimertest.Timer1Timer(Sender: TObject);
    begin
    Timerinterrupt := true;
    end;
    <br>
    procedure TTimertest.TasterClick(Sender: TObject);
    <br>
    begin
    Timerinterrupt := false;
    Timer1.Enabled := true;
    while Timerinterrupt do;
    end;
    <br>
    end.

  • #2
    Hallo,

    das könnte etwa so aussehen: Das Programm greift auf die Win32-API-Funktion <b>SetTimer</b> zurück, um sich über die Windows-Botschaft WM_TIMER zurückrufen zu lassen. Der Aufruf von <b>ProcessMessages</b> sorgt dafür, dass auch innerhalb der WHILE-Schleife die Botschaftswarteschlange des Hauptfensters ausgelesen wird.
    <pre>
    <b>unit</b> Unit1;
    <br>
    <b>interface</b>
    <br>
    <b>uses</b>
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;
    <br>
    <b>type</b>
    TForm1 = <b>class</b>(TForm)
    Button1: TButton;
    <b>procedure</b> Button1Click(Sender: TObject);
    <b>private</b>
    <font color="#003399"><i>{ Private-Deklarationen }</i></font>
    <b>procedure</b> WMTIMER(<b>var</b> Msg: TMessage); message WM_TIMER;
    <b>public</b>
    <font color="#003399"><i>{ Public-Deklarationen }</i></font>
    <b>end</b>;
    <br>
    <b>var</b>
    Form1: TForm1;
    Timerinterrupt : Boolean;
    <br>
    <b>implementation</b>
    <br>
    <font color="#003399"><i>{$R *.dfm}</i></font>
    <br>
    <b>procedure</b> TForm1.WMTIMER(<b>var</b> Msg: TMessage);
    <b>begin</b>
    Timerinterrupt := True;
    <b>end</b>;
    <br>
    <b>procedure</b> TForm1.Button1Click(Sender: TObject);
    <b>begin</b>
    Timerinterrupt := False;
    SetTimer(Handle, 1, 2000, <b>nil</b>);
    <b>while</b> <b>not</b> Timerinterrupt <b>do</b>
    <b>begin</b>
    Application.ProcessMessages;
    Sleep(100);
    <b>end</b>;
    ShowMessage(<font color="#9933CC">'Timerinterrupt = True'</font>);
    <b>end</b>;
    <br>
    <b>end</b>.
    </pre&gt

    Comment

    Working...
    X