#PB_Any probleme

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Ja gibt es lies Kiffis Posting :D .
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Magix-Soft <Kain> hat geschrieben:das mache ich eigentlich wegen der übersicht...
die Übersicht im eigenen Code zu behalten ist nicht verkehrt. Wenn
dadurch aber die Programmstabilität gefährdet wird, ist es definitiv der
falsche Weg.
Magix-Soft <Kain> hat geschrieben:weil das bringt mir ja nichts wenn ich über 100 konstanden habe und ich nicht mehr weis welche für was ist -.-
für diesen Zweck benennt man die Konstanten so, dass man auch noch
nach Monaten weiß, wofür sie stehen.

Code: Alles auswählen

#frmOptions_cmdOK ; OK-Button im Optionen-Fenster
#frmOptions_cmdCancel ; Abbrechen-Button im Optionen-Fenster
OK, ich merke schon, dass Du eine gewisse Lernresistenz an den Tag
legst und steige deshalb hier aus. Schließlich kann ich Dich nicht zu
Deinem Glück zwingen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

okay ich werde esprobieren... habe mich zwar noch nie mit makros beschäftigt hört sich in der hilfe aber leicht an also fast gleich wie eine procedure^^
Bild
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

Hab dir jetzt mal was zusammengeschustert, das ist mit Sicherheit nicht die
einzige und/oder beste Lösung, aber es ist eine!

Code: Alles auswählen

;Alle Konstanten
#Window1 = 0
#Window2 = 1
#Window3 = 2

#Window1_Btn_Close = 0
#Window1_Btn_Window2 = 1
#Window1_Btn_Window3 = 2
#Window2_Btn_Close = 3
#Window3_Btn_Close = 4

;Hauptfenster erstellen
OpenWindow(#Window1, 0, 0, 150, 100, "Window 1", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(#Window1))

ButtonGadget(#Window1_Btn_Close, 10, 10, 100, 20, "Close")
ButtonGadget(#Window1_Btn_Window2, 10, 35, 100, 20, "Open Window 2")
ButtonGadget(#Window1_Btn_Window3, 10, 60, 100, 20, "Open Window 3")

;Events des 1. Fensters
Procedure Window1Events(Event)
  Select Event
    Case #PB_Event_CloseWindow
      ProcedureReturn -1 ;Damit realisiere ich das Verlassen der Eventschleife
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Window1_Btn_Close
          ProcedureReturn -1
        Case #Window1_Btn_Window2
          OpenWindow(#Window2, 0, 0, 150, 35, "Window 2", #PB_Window_SystemMenu|#PB_Window_WindowCentered, Window1)
          CreateGadgetList(WindowID(#Window2))
          ButtonGadget(#Window2_Btn_Close, 10, 10, 100, 20, "Close")
        Case #Window1_Btn_Window3
          OpenWindow(#Window3, 0, 0, 150, 35, "Window 3", #PB_Window_SystemMenu|#PB_Window_WindowCentered, Window1)
          CreateGadgetList(WindowID(#Window3))
          ButtonGadget(#Window3_Btn_Close, 10, 10, 100, 20, "Close")
      EndSelect
  EndSelect
EndProcedure

;Events des 2. Fensters
Procedure Window2Events(Event)
  Select Event
    Case #PB_Event_CloseWindow
      CloseWindow(#Window2)
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Window2_Btn_Close
          CloseWindow(#Window2)
      EndSelect
  EndSelect
EndProcedure

;Events des 3. Fensters
Procedure Window3Events(Event)
  Select Event
    Case #PB_Event_CloseWindow
      CloseWindow(#Window3)
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Window3_Btn_Close
          CloseWindow(#Window3)
      EndSelect
  EndSelect
EndProcedure

;Eine Schleife für alle Fenster!
Repeat
  Event = WaitWindowEvent()
  Select EventWindow()
    Case #Window1
      If Window1Events(Event) = -1 : Break : EndIf
    Case #Window2
      Window2Events(Event)
    Case #Window3
      Window3Events(Event)
  EndSelect
ForEver
End
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

@milan1612
die lösung ist nicht schlecht ^^ nur eins stört mich daran (diese lösung war auch mein erster gedanke) und zwar wenn jetzt ein übergeortnetes fenster auf ist ist es un raatsam ein vorheriges fenster bedienen zu können... da es sonst zu problemen kommen kann...

zu den Macro's:
ich habe jetzt "Procedure" mit "Macro" aus getauscht und "ProcedureReturn" aus kommentiert...
Beispiel:
Procedure String_Editor(Typ$,WindowID)
zu
Macro String_Editor(Typ$,WindowID)
hier bekomme ich jetzt einen Syntax ERROR -.- aber warum? man kann doch auch mit parametern arbeiten.... (sthet jedenfals in der hilfe....)
Bild
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Magix-Soft <Kain> hat geschrieben:und zwar wenn jetzt ein übergeortnetes fenster auf ist ist es un raatsam ein vorheriges fenster bedienen zu können... da es sonst zu problemen kommen kann...
Das gute an der Einschleifenlösung ist ja gerade, dass alle Funktionen in den Fenstern weiterhin funktionieren. Wenn du das nicht willst, musst du eben beim Öffnen eines übergeordneten Fensters die untergeordneten deaktivieren mittels DisableWindow().

Bei der Hülle, die du da an Fenstern erwartest, dürfte es aber eh ziemlich egal sein.
Weil ich glaube kaum, dass sich einer eine Applikation antut, bei der er nen Sack voll Fenster mühsam von oben nach unten schliessen muss.

Was die Macros betrifft, klar kannst du Parameter übergeben, aber keine ... hmm... wie soll ich das jetzt wieder erklären ?
Egal mach einfach das $ weg.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

@HeX0R
okay das wusste ich nicht das man fenster deaktivieren kann^^ danke

okay also bei macros keine String$ sondern nur Variabeln.s.... das ist soweit verstanden :)


ich werde das erst mal aus probieren und dann ggf. sagen ob es so funktioniert oder nicht... müsste aber eigentlich endlich mal
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Magix-Soft <Kain> hat geschrieben: okay also bei macros keine String$ sondern nur Variabeln.s.... das ist soweit verstanden :)
Bist du dir da sicher?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ne kein .s, karkeine Typen

es werden einfach nur "Platzhalter" genutz, wo der Typ egal ist

Code: Alles auswählen

Macro MeinDebug(Platzhalter)
 Debug Platzhalter
EndMacro

MeinDebug("Laber")
MeinDebug(123)
MeinDebug(3.1415)
Nor ein besseres Beispiel für die Macht von Macros:

Code: Alles auswählen

Macro Frage(Platzhalter)
 If (Platzhalter)
EndMacro
Macro Antwort(Platzhalter1, Platzhalter2)
  Debug Platzhalter1
 Else
  Debug Platzhalter2
 EndIf
EndMacro

Frage(1 = 1)
 Antwort("Richtig", "Falsch")
Frage(1 = 2)
 Antwort("Richtig", "Falsch")
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

ja xD habe es eben mitbekommen bevor ich moch mal hier rein bin hehe

und zwar hatte ich ja:
Macro Name(Typ, WindowID)
openwindow(#Constand,X,Y,X,Y,"Text"+Typ,WindowID(WindowID)


naja es sah dann im debugger komisch aus
#Constand(#Constang)


naja ich habe es jedenfals verstanden wie das Makro funktioniert :) fielen dank auch für die erklärungen :)
Bild
Antworten