Seite 2 von 2

Verfasst: 22.09.2008 18:45
von Ractur
Kiffi hat geschrieben: Prozeduren zu verwenden ist die einfachste Lösung.
Alles andere wäre Murks. ;-)

Grüße ... Kiffi
Huhu,

habe soeben meine erste Prozedure ausprobiert, funktioniert soweit sogar, aber nicht alles ^^ Das Programm ist aber schon so gut wie fertig, und ich wills jetzt net komplett umprogrammieren nur damit ich Prozedure verwende.

Ich dachte an sowas:

Code: Alles auswählen

SendMessage_(MenuItem(0), #?????? , ?????? , 0)  
Allerding weiss ich net wie ich das MenuItem 0 senden könnte, damit es so aussieht als es geklickt worden wäre.

Wenn nicht bleibt mir wohl nur noch nochmal ganz neu anzufangen :oops: [schmipf, hätt ich nur von anfang an mit prozedure gearbeitet] *grins

Danke Ractur

Verfasst: 22.09.2008 19:05
von ts-soft
Ractur hat geschrieben: Ich dachte an sowas:

Code: Alles auswählen

SendMessage_(MenuItem(0), #?????? , ?????? , 0)  
Kein Problem :mrgreen:

Code: Alles auswählen

Import ""
  SendGadgetCommand(hWnd.l, EventType.l) As "_PB_Gadget_SendGadgetCommand@8"
EndImport

If OpenWindow(0, 200, 200, 200, 100, "Menu Example")
  If CreateMenu(0, WindowID(0))    ; hier beginnt das Erstellen des Menüs...
    MenuTitle("Project")
    MenuItem(1, "Open"   +Chr(9)+"Ctrl+O")
    MenuItem(2, "Save"   +Chr(9)+"Ctrl+S")
    MenuItem(3, "Save as"+Chr(9)+"Ctrl+A")
    MenuItem(4, "Close"  +Chr(9)+"Ctrl+C")
  EndIf
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10, 10, 160, 30, "This is the end")
  EndIf
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Menu
        Select EventMenu()
          Case 1
            Debug "Open"
          Case 2
            Debug "Save"
          Case 3
            Debug "Save as"
          Case 4
            SendGadgetCommand(GadgetID(0), #PB_EventType_LeftClick)
        EndSelect
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0
            Debug "This is the end"
            Break
        EndSelect
    EndSelect
  ForEver
EndIf
Aber schreib es besser um :wink:

Verfasst: 22.09.2008 19:51
von Ractur
ts-soft hat geschrieben: Aber schreib es besser um :wink:
Danke! Habe ich nun auch gemacht mit "Prozedur", und oh Wunder es funktioniert nun komplett so wie es soll, was mich wundert, vorhin gings noch nicht! Aber das macht bestimmt Dein gutes zureden aus :lol: ^^ Wird natürlich auch übersichtlicher nun die ganze Sache!

Eine Sache interessiert mich allerdings noch, warum hat das goto nicht funktioniert?

Wenn ich goto mache und dann die Sprungmarke nach Case0 einfüge müsste er normal das Programm weiterbearbeiten als ob Case 0 eingetreten wäre.

Grüsse und herzlichstes Danke an alle,

Mattis!

Verfasst: 22.09.2008 20:15
von Kaeru Gaman
in ein Case hineinzuspringen ist ein gutes Beispiel gegen die Verwendung von Goto.

in einem Case befinden sich alle möglichen Dinge auf dem Stack,
die sich auf das Select beziehen und relative Sprungadressen und soweiter.
wenn der Select-Block dann zuende ist, wird der Krempel wieder vom Stack runter geschmissen.
...wenn du von quer in ein Case reinspringst, schmeißt er bei EndSelect sachen vom Stack runter, die er drauflassen sollte, weil er denkt, es wären die, die runter müssen.

also, natürlich kann man auch heutzutage noch mit Goto programmieren,
nur muss man dann auch auf alles andere Neue ebenfalls verzichten.

Verfasst: 22.09.2008 21:47
von Ractur
Kaeru Gaman hat geschrieben:in ein Case hineinzuspringen ist ein gutes Beispiel gegen die Verwendung von Goto.

in einem Case befinden sich alle möglichen Dinge auf dem Stack,
die sich auf das Select beziehen und relative Sprungadressen und soweiter.
wenn der Select-Block dann zuende ist, wird der Krempel wieder vom Stack runter geschmissen.
...wenn du von quer in ein Case reinspringst, schmeißt er bei EndSelect sachen vom Stack runter, die er drauflassen sollte, weil er denkt, es wären die, die runter müssen.

also, natürlich kann man auch heutzutage noch mit Goto programmieren,
nur muss man dann auch auf alles andere Neue ebenfalls verzichten.
Danke Dir für Deine Hilfe! Ich versteh zwar nur halb was Du meinst, aber ich denke der Computer denkt er sei gerade woanders oder so :lol:!

Danke nochmal :allright:

Bye Matthias