Autor |
Beitrag |
Jiss
Hält's aus hier
Beiträge: 8
|
Verfasst: So 15.11.09 17:44
Hi,
ich habe ein Button, mit dem eine Prozedur aufgerufen wird, welche einen linearen Ablauf hat.
Dabei werden Daten aus einer Datei ausgelesen und in ein StringGrid geschrieben.
Nun möchte ich, nachdem alle Daten im StringGrid vorhanden sind, solange den Ablauf der Prozedur unterbrechen, bis der User entsprechende Veränderungen an den Werten im StringGrid gemacht hat und mit einem Button "Änderungen Übernehmen" den Ablauf der restlichen Prozedur freigibt. Im Laufe der weiteren Prodzedur werden dann die geänderten Eingaben ausgewertet.
Wie kann ich das machen? Habe da keine Idee, um einen Prozess zu unterbrechen und mit einem Freigabe-Befehl an der Stelle fortzusetzen.
Gruß
Jiss
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: So 15.11.09 17:59
wie wäre es wenn du den teil der nachher ausgeführt werden soll in die onclickprocedure des "Änderung übernehmen"-Buttons platzierst?
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Jiss 
Hält's aus hier
Beiträge: 8
|
Verfasst: So 15.11.09 18:39
Ja, das wäre prinzipiell möglich. Allerdings wollte ich erstmal schauen, ob das auch so geht. Mir gehts um die Übersichtlichkeit des Programms, da ich dazu eine Dokumentation anfertigen muss. Aus diesem Grund wäre es von Vorteil, wenn die logischen Abläufe so zusammengehalten werden.
|
|
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: So 15.11.09 19:13
Jiss hat folgendes geschrieben : | Ja, das wäre prinzipiell möglich. Allerdings wollte ich erstmal schauen, ob das auch so geht. |
Geht es rein theoretisch. Mit Application.ProcessMessages und Flags, die den aktuellen Status anzeigen.
Allerdings wird das dann vollkommen unübersichtlich und nicht mehr überschaubar. Zudem bekommst du dann Probleme mit Parallelisierungseffekten usw., so dass du sehr aufpassen musst was du wo machst.
Und wenn man dann eine riesige Prozedur schreibt, weiß ohnehin kein Mensch mehr was da passiert. Das kann man viel besser ereignisbasiert und modularisiert aufbauen, dann sieht man auch sehr schnell was passiert, wenn jemand anderes sich den Quelltext ansieht.
Windows ist nun einmal ereignisbasiert und das ist auch gut so. Wenn man dann mit Polling anfängt, handelt man sich nur unnötige Probleme ein und macht sich das Leben schwer.
Jiss hat folgendes geschrieben : | Mir gehts um die Übersichtlichkeit des Programms |
Und warum bemühst du dich dann um das Gegenteil? 
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Mo 16.11.09 01:55
Jiss hat folgendes geschrieben : | ...
Nun möchte ich, nachdem alle Daten im StringGrid vorhanden sind, solange den Ablauf der Prozedur unterbrechen, bis der User entsprechende Veränderungen an den Werten im StringGrid gemacht hat und mit einem Button "Änderungen Übernehmen" den Ablauf der restlichen Prozedur freigibt. Im Laufe der weiteren Prodzedur werden dann die geänderten Eingaben ausgewertet.
... |
Hallo,
eine übliche Methode, zurück zum linearen Ablauf zu kommen, ist ein "Experte" oder Wizard mit einer Seite pro Arbeitsschritt und Knöpfen wie "Weiter...".
Gruss Reinhard
|
|
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 16.11.09 02:28
Das ist hier ja nicht einmal das Problem, denn der zweite Knopf und damit die entsprechende Oberfläche existieren ja schon. Aber der ganze Code soll offenbar in einer einzigen langen und damit unüberschaubaren Monsterprozedur landen...
|
|
Zyklame
      
Beiträge: 41
Erhaltene Danke: 1
Win 7 Professional
Delphi XE, Visual Studio 2010
|
Verfasst: Mo 16.11.09 10:05
Hallo,
ich habe mal die Vermutung, das du die Analyse mehrfach verwenden / durchlaufen möchtest, so das der Quelltext davon nicht mehrfach vorhanden sein muss (in der Einlesen und Ändern Procedure). Dann währe es aber sinvoller, diese in eine eigene Procedure auszulagern und in den Ereignissen (ButtonClick...) aufzurufen.
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mo 16.11.09 10:16
Also ich kann nur das selbe sagen wie auch andere vor mir. Mach die änderung bei (Änderung) und das einlesen auch genau dort.
Denn wenn ich mir einen Quellcode ansehe und dort dann deine Variante genutzt wäre. Würde ich erst mal den Kopf schütteln. 
|
|
Jiss 
Hält's aus hier
Beiträge: 8
|
Verfasst: Mo 16.11.09 17:16
Ihr habt recht. Ich werde das in einer extra Prozedur machen und dann mit Hilfe von Fallunterscheidungen den Programmablauf definieren.
Vielen Dank für eure Hinweise!
Gruß Jiss
|
|