Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Auf Button-Click warten (https://www.delphipraxis.net/32523-auf-button-click-warten.html)

svern 24. Okt 2004 17:30


Auf Button-Click warten
 
Hey,

habe ein kleines Anfängerproblem.

Wie kann ich meinem Programm sagen, dass es auf einen Button-Click warten soll und dann erst weiterarbeiten soll?

Habe gedacht, dass ich das in ner Schleife löse:

Delphi-Quellcode:
    while (B2 = False ) do  // B2 ist boolean für Button 2 angeklickt oder nicht, siehe unten
    begin
      //sleep(50);
      label6.caption:='klappt';
    end;




Für B2:
procedure TForm1.Button2Click(Sender: TObject);
begin
     B2:=true;
     Netzplan();
end;

Naja, geht so jedenfalls nicht, denn das Programm stürzt ab. Komme also nicht mehr an den Button 2 ran.

Hat jemand nen Tipp?

jfheins 24. Okt 2004 17:33

Re: Auf Button-Click warten
 
Könntest du die Routine nicht in zwei aufteilen, eine die vor button2.click ausgeführt wird, und eine Button2.click routine ?

MrSpock 24. Okt 2004 17:34

Re: Auf Button-Click warten
 
Hallo svern,

du könntest beim Drücken des Buttons z.B. sein Tag auf einen Wert <> 0 setzen. Im Programm prüfst du diesen Wert in einer Schleife. Dazu müsstest du aber bei jedem Schleifendurchlauf Application.ProcessMessages aufrufen, damit andere Events überhaupt durchkommen. Deine Endlosschleife würde aber zu einer extrem hohen Prozessorlast führen, deshalb nimm lieber einen Thread, den du nach Button Drücken startest oder ggf. einfach eine Prozedur, die mit OnClick des Buttons ausgeführt wird.

fiasko 24. Okt 2004 17:35

Re: Auf Button-Click warten
 
Hallo,

du mußt in deiner Schleife immer braf ein Application.ProcessMessages aufrufen damit er weiter Events (wie das Clicken) verarbeiten kann.

BTW: Warum machst du das zeug nicht einfach an der Stelle wo B2 gesetzt wird anstatt ihn in so'ner while schleife dösen zu lassen?

svern 24. Okt 2004 17:47

Re: Auf Button-Click warten
 
Wow, ihr seid echt schnell, thx.

Genau das Application.ProcessMessages hatte ich gesucht ;-)

Ich hatte das mal schnell eingebunden,
das Komische ist nur, dass ich das Programm nicht schließen kann, solange er in dieser Schleife ist. Kann ich das noch irgendwie einbauen?

malo 24. Okt 2004 17:53

Re: Auf Button-Click warten
 
Ich würde es mit einer zusätzlichen Variable lösen. Eine globale Variable erstellen und im OnCreate auf 0 an der Stelle, an der das Programm erst bei Buttonklick weiterarbeiten soll, die Variable(am besten vom typ integer) auf 1 setzen. Dann den Hauptteil des Programms(das normale arbeiten) in eine if-Abfrage verpacken. Also etwa so:

Delphi-Quellcode:
procedure...
  if Variable = 0 then
    begin
      //was in deinem Programm passieren soll
    end else // also, sobald Variable den Wert 1 hat
    begin
      //hier einen Befehl eingeben, um das Programm anzuhalten
    end;

procedure Button1Click(Sender: TObject)'
  begin
    if variable = 1 then
      variable := 0;
  end;
So in etwa... um das Programm zu stoppen, musst du dir einen Befehl überlegen, den ich dir jetzt jedoch nicht vorgeben kann, weil ich ja nicht weiß, was dein programm so machen soll ;)

ich hoffe, ich konnte helfen!

mfg

malo

edit: hab die sache mit der if-Schleife geändert :roll:

jfheins 24. Okt 2004 17:56

Re: Auf Button-Click warten
 
Zitat:

Zitat von malo
in eine if-schleife verpacken.

Natürlich. Den Begriff hören wir immer wieder gern ... :roll:

malo 24. Okt 2004 18:11

Re: Auf Button-Click warten
 
Zitat:

Zitat von jfheins
Zitat:

Zitat von malo
in eine if-schleife verpacken.

Natürlich. Den Begriff hören wir immer wieder gern ... :roll:

Äh... ja, natürlich :mrgreen: wenn du mir einen passenderen Begriff nennst, merk ich ihn mir für später :roll:

Äh... aber schick ihn mir besser per PN, damit es nicht zu viel OT hier wird :mrgreen:

svern 24. Okt 2004 22:05

Re: Auf Button-Click warten
 
Hey,

irgendwie klappt das nicht.

Hab das jetzt so in der einen Prozedur:

Delphi-Quellcode:
 
     while (B2 = False ) do
      begin
        //sleep(50);
        label6.caption:='klappt';
        Application.ProcessMessages;
      end;
      label7.caption:='jojooo';
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
     B2:=true;
     //Netzplan();
end;

Aber er macht das nicht!!! Verdammte Axt, ich check das nicht. Die Prozedur Button2Click wird nicht angewählt, wenn ich die Schleife am Laufen hab... warum nicht? Wie umgeh ich das?

fiasko 24. Okt 2004 22:17

Re: Auf Button-Click warten
 
Hallo,

[schuß-ins-blaue]
kommentiere vielleicht mal das label6.caption:='klappt'; in der Schleife aus und probieren dann nochmal. Vielleicht verdrängt das immer das Klick-Ereignis aus der Verarbeitung... oder arbeitet ProcessMessages immer alle ab :gruebel: :drunken:
[/schuß-ins-blaue]


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz