Autor |
Beitrag |
fritz_07
      
Beiträge: 21
|
Verfasst: 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 Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
|
Verfasst: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 25.01.10 21:07
dasEnde:D hat folgendes geschrieben : | 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. 
|
|
dasEnde:D
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 25.01.10 21:15
Moderiert von Narses: 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 
      
Beiträge: 21
|
Verfasst: Mi 27.01.10 23:53
Hallo
Ich versuche mein Problem mal etwas besser darzustellen.
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 MessageDlg('Bitte Eingaben überprüfen',mtWarning,[mbRetry],0) else begin SysUtils.ForceDirectories(koned1); SysUtils.ForceDirectories(koned2); end;
begin 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 Tino: Code- durch Delphi-Tags ersetzt
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 27.01.10 23:56
Deklariere dir eine Variable und zähl sie einfach hoch.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: 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!
So kannst Du auch mit einem Button 2 abfragen stellen!
Ist aber nicht die feine englische Art
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Mike19
      
Beiträge: 256
Win XP, Vista, Win 7
Delphi 2005, Turbo Delphi
|
Verfasst: 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
      
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)
|
Verfasst: 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
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
      
Beiträge: 182
Erhaltene Danke: 14
|
Verfasst: Do 28.01.10 13:05
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Do 28.01.10 13:22
max1235
Zitat: | einfach eine variable vom typ boolean nehmen und dann |
elundril 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!?
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Do 28.01.10 14:06
ja, was ist, wenn er die 2.Prozedure zuerst ausführt und dort ein exit einfügt!?
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; 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) 
_________________ 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
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Do 28.01.10 14:08
Dann kann man sich das Exit aber sparen indem man:
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 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
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Do 28.01.10 14:12
Lol, an else hab ich ja gar nicht gedacht!
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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Do 28.01.10 14:20
Wo wir beim alt bekannten Tema wären: Was will er denn eigentlich. ^^
|
|