EventMenu() Klick manuell per Befehl auslösen?

Anfängerfragen zum Programmieren mit PureBasic.
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Beitrag 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
Ractur, der mit dem Programmierstil der 80er Jahre :D
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

Beitrag 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:
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
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Beitrag 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!
Ractur, der mit dem Programmierstil der 80er Jahre :D
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Beitrag 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
Ractur, der mit dem Programmierstil der 80er Jahre :D
Antworten