Datei übergreifend declarieren

Anfängerfragen zum Programmieren mit PureBasic.
Baba_Smurf
Beiträge: 55
Registriert: 01.03.2015 12:05
Wohnort: Saarland / Püttlingen
Kontaktdaten:

Datei übergreifend declarieren

Beitrag von Baba_Smurf »

Hallo,

wenn ein Programm mehrere Dateien haben soll und mehrere Fenster, wie werden dann Konstanten und Co. deklariert??
Mache ich das alles im Hauptprogramm als Global ??
oder bekommt jede Datei, in der sich auch andere Fenster befinden eine seperate Ereignisbehandlung??
Hoffe man versteht was ich meine.

mfg
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Datei übergreifend declarieren

Beitrag von NicTheQuick »

Wenn du BindEvent und Konsorten nutzt, kannst du jedem Fenster eine eigene Datei inklusive eigener Ereignisbehandlung zuordnen. Nutzt du das alte WindowEvent()-Konstrukt, brauchst du eine globale Eventschleife für alle Fenster.
Und wegen der Konstanten: Wenn du Enumerations nutzt, dann kannst du diese benennen und auf mehrere Stellen aufteilen.

Code: Alles auswählen

Enumeration Fenster
	#id1
	#id2
EndEnumeration

;irgendwas anderes

Enumeration Fenster
	#id3
	#id4
EndEnumeration

Debug #id1
Debug #id2
Debug #id3
Debug #id4
Baba_Smurf
Beiträge: 55
Registriert: 01.03.2015 12:05
Wohnort: Saarland / Püttlingen
Kontaktdaten:

Re: Datei übergreifend declarieren

Beitrag von Baba_Smurf »

Ok

Vielen Dank. Was ist denn die bessere Version bzw. Wie würdest du es machen?

Mfg
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Datei übergreifend declarieren

Beitrag von NicTheQuick »

Ich nutze am liebsten gar keine Enumerations, sondern pro Fenster eine Struktur mit einem Eintrag pro Gadget im Fenster. Jedes Gadget wird dann mit #PB_Any erstellt. Jedes Fenster hat dann eine Init-Funktion, in der auch für jedes Gadget, bei dem es notwendig ist, BindGadgetEvent aufgerufen wird und eben noch BindEvent für das Fenster selbst. Im Zusammenspiel mit einem Interface und Modulen kann man dann jedes Fenster schön kapseln.

Siehe auch mein Video zum Canvas-Gadget: [PB] HowTo: CanvasWindow (Teil 1/2)
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Datei übergreifend declarieren

Beitrag von mk-soft »

Achtung Werbung

Ich lasse mir alle Konstanten und Event-Proceduren für beliebige Fenster automatisch erstellen.
Dazu habe ich mir ein Tool geschrieben (siehe Signatur EventDesigner). Eine nachträgliche Änderung oder hinzufügen von Fenstern ist auch möglich... :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Datei übergreifend declarieren

Beitrag von ts-soft »

Dann will ich auch mal :D
Ich declariere meine Enumerationen in einem Module (und zwar leer :wink: ) und nutze diese dann als Named-Enumeration überall.
Das Module sollte natürlich vor allen anderen eingefügt werden.

Code: Alles auswählen

CompilerIf Defined(CommonConstants, #PB_Module) = 0
  DeclareModule CommonConstants
    ; Form
    Enumeration FormWindow
    EndEnumeration
    Enumeration FormGadget
    EndEnumeration
    Enumeration FormMenu
    EndEnumeration
    Enumeration FormImage
    EndEnumeration
    Enumeration FormFont
    EndEnumeration
    ; Event
    Enumeration EventCustom #PB_Event_FirstCustomValue
    EndEnumeration
    Enumeration EventTypeCustom #PB_EventType_FirstCustomValue
    EndEnumeration
  EndDeclareModule
  
  Module CommonConstants
  EndModule
CompilerEndIf
Jetzt brauch ich nur noch UseModule CommonConstants einfügen, auf den Namen der Enumeration achten und alles paßt,
auch die EventType für benutzerdefinierte Events.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Datei übergreifend declarieren

Beitrag von H.Brill »

Ich würde mal einfach sagen : Wenn man sich mit OpenWindow()
beim Erstellen eine Fensternummer geben läßt, kann man das
jeweilige Fenster in einer einzigen Ereignisschleife mit GetActiveWindow()
ermitteln, mit der Fensternummer vergleichen und entsprechend darauf
reagieren.
Es kann ja immer nur EIN Fenster aktiv sein.
PB 6.10
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

Re: Datei übergreifend declarieren

Beitrag von Imhotheb »

H.Brill hat geschrieben: Es kann ja immer nur EIN Fenster aktiv sein.
VORSICHT: Es können aber trotzdem Ereignisse für jedes Fenster eintreffen, nicht nir für das aktive.
weil einfach einfach einfach ist ... mach' ich es anders
Antworten