Seite 1 von 1
Dumme Frage zu GUI-Programmierung
Verfasst: 24.09.2009 08:30
von Currywurst
Hallo! Bitte haltet mich nicht für total bescheuert, aber ich habe eine ganz grundlegende Frage zum logischen Aufbau einer GUI-Anwendung: Wie man die Fenster, Menüs und Gadgets usw. programmiert, ist mir klar. Und allgemein, wie man ein Programm strukturiert, auch.
Aber ich überlege schon die ganze Zeit, wie man die Ereignisabrage-Schleifen für eine richtige GUI-Anwendung aufbaut. D.h. es soll ein Hauptfenster mit Menü geben, und die Auswahl von Menüpunkten soll dann natürlich weitere (Unter-)fenster öffnen. Und während man sich in einem solchen Unterfenster aufhält (dessen Code in Prozeduren geschrieben würde), muss natürlich weiterhin das Hauptmenü abgefragt und auf Benutzeraktionen reagiert werden. Und das Window-Close-Event sollte natürlich für Unter- und Hauptfenster getrennt ausgewertet werden können.
Wie macht das? Packt man alles in eine einzige REPEAT...UNTIL-Schleife?
Kann man eigentlich Unterfenster automatisch richtig in das Parent-Fenster einpassen (von den Abmessungen her, meine ich)?
Also, vielen Dank schon mal!
Re: Dumme Frage zu GUI-Programmierung
Verfasst: 24.09.2009 08:52
von Kiffi
Currywurst hat geschrieben:Wie macht das? Packt man alles in eine einzige REPEAT...UNTIL-Schleife?
kann man machen, muss man nicht
Ich glaube erahnen zu können, dass Dir eine einzige Event-Schleife nicht sonderlich zusagt
(vielleicht aus Gründen der Übersichtlichkeit). Wenn dem so ist, kannst Du Dir ja mal
EasyVENT von srod anschauen. Hier kannst Du für jedes Fenster und Gadget einen
EventHandler definieren. Tritt dann ein Event auf, so wird in die im EventHandler angegebene
Prozedur gesprungen. Das erinnert ein wenig an das EventHandling von VB.
Beispiel:
Code: Alles auswählen
SetEventHandler(WindowID(#frmMain), #OnClose, @frmMain_OnClose()) ; Springt in die Prozedur frmMain_OnClose(), wenn das Close-Ereignis auftritt
SetEventHandler(GadgetID(#cmdOK), #OnButtonClick, @cmdOK_OnButtonClick()) ; Springt in die Prozedur cmdOK_OnButtonClick, wenn das Click-Ereignis auftritt
Grüße ... Kiffi
Re: Dumme Frage zu GUI-Programmierung
Verfasst: 24.09.2009 10:47
von Kaeru Gaman
ein Beispiel für eine einzige EventSchleife hab ich hier schon mal gepostet:
http://www.purebasic.fr/german/viewtopi ... 52&start=0
welche Lösung du letztendlich wählst, ist natürlich dir überlassen.
Re: Dumme Frage zu GUI-Programmierung
Verfasst: 24.09.2009 10:58
von WPö
Hallo, Currywurst!
Wie Kiffi schon ausführte, kannste objektorientiert arbeiten. Das ist mir zu aufwendig - ich bevorzuge tatsächlich eine einzige Hauptschleife. Die Fensternummer kannste abfragen und so entscheiden, was beim Druck auf jede Klickfläche inkl. Fensterschließung passieren soll. Code findeste in der PB-Hilfe und hier über die Suche. Falls die Länge der Schleife ausufern sollte, kannste mit der Faltfunktion des Editors immer noch für Übersicht sorgen.
Eine weitere Methode - wenn auch nur theoretisch und mit vielen Fallstricken verbunden - ist, zu jedem Fenster, das Du aufmachst, einen nebenläufigen Prozeß zu erstellen. Der kümmert sich dann um die Klickflächenabfrage. Dann mußt Du allerdings auch die Kommunikation zwischen allen Nebenlaufprozessen schreiben (Mutex und Semaphoren

), was sich bei zwei oder drei solcher Prozesse allerdings absolut nicht lohnt.
Fazit: Nimm eine Schleife für alles - ist am schnellsten programmiert und mit der Faltfunktion übersichtlich genug.
Grüße - WPo
Re: Dumme Frage zu GUI-Programmierung
Verfasst: 24.09.2009 10:59
von WPö
Ups, nicht schnell genug...

Re: Dumme Frage zu GUI-Programmierung
Verfasst: 24.09.2009 13:20
von Little John
Hallo,
ich möchte noch ergänzen, dass EasyVENT nur für Windows ist. Der genannte Code von Kaeru Gaman ist hingegen nativer PB-Code und damit cross-platform.
Gruß, Little John
Re: Dumme Frage zu GUI-Programmierung
Verfasst: 24.09.2009 15:03
von Rings
Offtopic:
ich hatte heute mittag Currywurst als Mahlzeit.....
Würg......
