Autor Beitrag
fritz_07
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 25.01.10 20:41 
Hallo an alle!

Folgendes Problem:
Wenn ich das erste Mal den Button1 klicke,soll eine Prozedur aufgerufen werden.
Beim zweiten Klick auf den gleichen Button, soll eine andere Prozedur aufgerufen werden.
Ist dies realisierbar?

In kurzform geschrieben: einmal Button1.click -> Aktion in Variable abspeichern und einer Prozedur zuordnen

Gruß fritz_07

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 25.01.10 20:44 
Du brauchst bei der ersten Aktion ja nur zu speichern, dass die erste Aktion ausgeführt wurde und wenn dies beim Klick der Fall ist die zweite stattdessen ausführen. Dafür reicht ein Feld unter private zum Beispiel.

Du kannst natürlich auch eine zweite OnClick Prozedur anlegen und die direkt zuweisen, aber das ist eigentlich gar nicht notwendig.
dasEnde:D
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 25.01.10 20:54 
Naja keine Ahnung was du vor hast.

Also bei nur einer Procedur kannst du eine privat Variable deklarieren (boolean). Diese Lösung ist natürlich recht unschön und man sollte sie möglichst vermeiden.

Bei VIELEN Proceduren wehre ein Enum oder ein Array praktisch.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 25.01.10 21:07 
user profile icondasEnde:D hat folgendes geschrieben Zum zitierten Posting springen:
Also bei nur einer Procedur kannst du eine privat Variable deklarieren (boolean). Diese Lösung ist natürlich recht unschön und man sollte sie möglichst vermeiden.
Warum das? Wenn es nur zwei Fälle gibt, dann ist das doch genau das richtige. Ansonsten braucht man für die Umsetzung eines endlichen Automaten eben mehr Fälle und damit andere Typen.

Eigentlich müsste man aber auch schon daran, ob bereits Daten aus dem ersten Schritt vorhanden sind, erkennen können welcher Schritt der aktuelle ist. :gruebel:
dasEnde:D
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 25.01.10 21:15 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Naja der Grund ist recht einfach. Auch bei endlichen Automaten sollte man unbedingt Variablen verhindern die einen zu großen Scope haben (Stichpunkt Lokale Variablen). Naja und eine Private Variable ist nun nicht viel besser. Man kommt dan bei größeren Projekten durcheinader bzw. vergiest manchmal welche (oder Setz dank schlechter Namengebun die Falsche Variable).
Lösung: Entweder solche zustände verhindern oder die Projektdaten schön Kapseln und Set und Get funktionen verwenden.
P.S. ich hab keine Ahnung wie groß das ding wird ^^. Bei kleinen Projekten oder solchen wo man eh schon fast vertig ist und nichts erweitern will ist ab und zu eine Privat Variable okay.
Aber man darf es nicht ausarten lassen.
fritz_07 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mi 27.01.10 23:53 
Hallo

Ich versuche mein Problem mal etwas besser darzustellen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.Button1Click(Sender: TObject);
var koned1, koned2, Dir2 : String;                

begin

 if (koned1=''or (koned2=''then                                      //beim ersten Klick wird diese Abfrage ausgeführt
     MessageDlg('Bitte Eingaben überprüfen',mtWarning,[mbRetry],0)
      else
      begin
      SysUtils.ForceDirectories(koned1);
      SysUtils.ForceDirectories(koned2);
      end;


 

     begin                                      //und diese Abfrage soll erst beim zweiten Klick auf den Button ausgeführt werden                    
      
      if SysUtils.DirectoryExists(Dir2) then
          HinweisV
      end;

end;


Wie kann ich einen Zähler einbauen,der das Klicken des Buttons speichert?



Gruß fritz_07

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 27.01.10 23:56 
Deklariere dir eine Variable und zähl sie einfach hoch.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 28.01.10 01:13 
kannst auch gleich die Eigenschaft "Tag" verwenden, wenn du sie nicht schon anderweitig benutzt.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Do 28.01.10 12:31 
Hi,

Ich gehe mal davon aus, das die Procedure nur ein kurzer Auszug ist.
denn es fehlt ja noch einiges!?
Mein Tipp:
Du kannst aber auch die 2.Abfrage als erstes stellen und mit exit die Proc. dort verlassen wenn Verzeichniss vorhanden! :wink:

So kannst Du auch mit einem Button 2 abfragen stellen!
Ist aber nicht die feine englische Art :lol:

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
Mike19
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 256

Win XP, Vista, Win 7
Delphi 2005, Turbo Delphi
BeitragVerfasst: Do 28.01.10 12:49 
Hallo,

ich hatte dieses Problem mit der der Änderunge der Caption des Button gelöst (Abhängig vom Ergebnis der 1. Abfrage). Habe dann aber später gemerkt, dass es sehr unübersichtlich wird. Deshalb meine Meinung, leg 2 Buttons an und steure diese mit Enabled.
max1235
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

win 98 (aber so gut wie nie dran), win xp, win vista, xandros
delphi(delphi3+7), c#(MV), c++(codeblocks;noch ganz am Anfang vom Lernen)
BeitragVerfasst: Do 28.01.10 12:54 
wie das ende schon geschrieben hat
Zitat:
Also bei nur einer Procedur kannst du eine privat Variable deklarieren (boolean). Diese Lösung ist natürlich recht unschön und man sollte sie möglichst vermeiden.
einfach eine variable vom typ boolean nehmen und dann

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
tfrom1.buttonclick(sender:tobject);
if variable= false then
begin
...
variable:=true;
end;

if variable=true then
begin
...
end;
end;



und vorher die variable natürlich auf false setzten

_________________
Max Kreie
Einige Wissen viel, andere wenig(er). Dafür sind Foren da.
guinnes
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 182
Erhaltene Danke: 14



BeitragVerfasst: Do 28.01.10 13:05 
user profile iconmax1235 hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Delphi-Quelltext
1:
if variable=true then					

Wohl besser nicht : www.delphi-treff.de/...olean-werten/page/4/
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 28.01.10 13:10 
generell, warum eine globale Booleanvariable erzeugen wenn man doch schon so schön einen brach liegenden Integer beim Button dabei hat?

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Do 28.01.10 13:22 
user profile iconmax1235
Zitat:
einfach eine variable vom typ boolean nehmen und dann


user profile iconelundril
Zitat:
generell, warum eine globale Booleanvariable erzeugen wenn man doch schon so schön einen brach liegenden Integer beim Button dabei hat?


Schaut doch mal alle richtig hin, er will doch nur 2 Abfragen mit einem Button.
Nicht ob der Button schon mal benutzt wurde!

Demzuvolge sollte es reichen, die richtige Reienfolge der Abfrage zu stellen.
Er hat ja schon alles drin!
Warum also komplizierter machen als notwendig!? :lol:

Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 28.01.10 13:45 
falsch, er will zwei unterschiedliche prozeduren je nach buttonklick. beim ersten klick soll die prozedur1 ausgeführt werden, beim zweiten mal klicken prozedur2.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Do 28.01.10 14:06 
ja, was ist, wenn er die 2.Prozedure zuerst ausführt und dort ein exit einfügt!?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
 procedure TForm1.Button1Click(Sender: TObject);
begin      
       if SysUtils.DirectoryExists(Dir2) then
       begin        
           HinweisV; {verzeichnis vorhanden exit}
           exit;
       end;
       
      if (koned1=''or (koned2=''then 
          MessageDlg('Bitte Eingaben überprüfen',mtWarning,[mbRetry],0
     else
     begin 
         SysUtils.ForceDirectories(koned1);
         SysUtils.ForceDirectories(koned2); 
     end;
end;


Alles mit einem Button und 2 Prozeduren ohne Zusätze oder!?
Korregiert mich wenn ich falsch bin bezogen auf seinen (Button Click) :wink:

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!


Zuletzt bearbeitet von ALF am Do 28.01.10 14:09, insgesamt 1-mal bearbeitet
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Do 28.01.10 14:08 
Dann kann man sich das Exit aber sparen indem man:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
begin      
       if SysUtils.DirectoryExists(Dir2) then     
         HinweisV {verzeichnis vorhanden exit}
       else 
         if (koned1=''or (koned2=''then 
           MessageDlg('Bitte Eingaben überprüfen',mtWarning,[mbRetry],0
         else
         begin 
           SysUtils.ForceDirectories(koned1);
           SysUtils.ForceDirectories(koned2); 
         end;
end;
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Do 28.01.10 14:12 
Lol, an else hab ich ja gar nicht gedacht! :lol:
ist natürlich richtig, else, exit ist in diesem Fall überflüssig!
Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 28.01.10 14:14 
und was ist wenn er nur das erste mal die eine prozedur haben will und die restlichen male immer die andere, egal ob das directory noch existiert (einmal erstellt, was dann damit passiert ist wurscht)?

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Do 28.01.10 14:20 
Wo wir beim alt bekannten Tema wären: Was will er denn eigentlich. ^^