Seite 2 von 3

Verfasst: 10.02.2008 01:00
von roherter
Ja gibt es lies Kiffis Posting :D .

Verfasst: 10.02.2008 01:03
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

Verfasst: 10.02.2008 01:25
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^^

Verfasst: 10.02.2008 01:29
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

Verfasst: 10.02.2008 11:15
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....)

Verfasst: 10.02.2008 12:29
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.

Verfasst: 10.02.2008 12:50
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

Verfasst: 10.02.2008 12:56
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?

Verfasst: 10.02.2008 13:14
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")

Verfasst: 10.02.2008 15:13
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 :)