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:
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

[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:
Kein Problem
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

Verfasst: 22.09.2008 19:51
von Ractur
ts-soft hat geschrieben:
Aber schreib es besser um

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

^^ 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

!
Danke nochmal
Bye Matthias