Seite 3 von 5

Re: Ribbon Menü

Verfasst: 19.03.2021 18:45
von Andre
Coole Sache, dein RibbonGadget Projekt :allright:

Wäre schön, wenn es das künftig auch cross-plattform (MacOS) geben würde... 8)

Re: Ribbon Menü

Verfasst: 19.03.2021 19:26
von jacdelad
Sehr gern. Ich selbst nutzen nur Windows. Wenn es Irgendwann fertig ist kann sich gern jemand daran machen. Ich nutze eine Handvoll Windoes-APIs, wenn es auf anderen Plattformen Pendants dazu gibt bin ich für alles offen.

Re: Ribbon Menü

Verfasst: 06.04.2021 17:12
von jacdelad
So,
ich hab noch einige Fehler bereinigt, brauche jetzt aber Hilfe bei 2 Dingen.

1. Wenn das Ribbon zu groß für das Fenster ist möchte ich das abschneiden. Da bin ich immer noch nicht schlüssig, wie ich das bewerkstelligen soll. Mir schwebt ein Ausblenden am Rand und links und rechts ein Button zum Scrollen vor...
2. Die Integration in den Eventstrom macht mir Probleme. Kann ich das Ergebnis von EventGagdet(), EventType() etc. beeinflussen? Ich weiß nicht, wie ich das integrieren kann (mal abgesehen von der Sache mit den Konstanten). Idealerweise soll das Ribbon ja was bei EventGadget() ausspucken und das Item bei EventData() oder, vielleicht noch besser, die Nummer des Items als EventMenu() zurückliefern.

Re: Ribbon Menü

Verfasst: 06.04.2021 18:04
von Andesdaf
Zu 2.:

PostEvent() erlaubt die Angabe des Objekts (idR. dein Ribbon-Gadget), des Eventtyps und der Daten. Diese können dann mit den jeweiligen PB-Event-Funktionen in der Hauptschleife oder per BindEvent-Callback ausgelesen werden. Alle weiteren Informationen können dann per EventData übergeben werden (bspw. über einen Pointer auf eine Struktur).

Re: Ribbon Menü

Verfasst: 06.04.2021 20:19
von jacdelad
Verstehe ich das richtig, dass der Code in meinem Modul mit PostEvent() ein Event auslöst, das dafür sorgt, dass WaitWindowEvent() verlassen wird und EventGadget(), EventType() etc. bestückt sind (so wie ich das in PostEvent() angebe)?
Muss ich nicht erst das WaitWindowEvent() verlassen, damit ich das PostEvent() senden kann? Oder löse ich das mit BindEvent() ans Gadget?

Re: Ribbon Menü

Verfasst: 07.04.2021 00:40
von Bisonte
Per BindGadgetEvent()

Du sendest mit PostEvent genau das was du willst, an das Fenster das du willst (oder musst).
Ausser dem Window kannst du alle anderen Parameter frei wählen und mit EventGadget, EventType() und EventData() innerhalb deiner
"BindGadgetEvent" - @Procedure() abfragen. So braucht der User nichts weiter zu tun und alles was kein direktes eingreifen seitens des Users erfordert, wird von dir ausgeführt.

Dann kannst du innerhalb deiner EventProcedure() immer noch ein PostEvent senden, falls es gebraucht wird (z.B. bei Linksklick)

Re: Ribbon Menü

Verfasst: 12.04.2021 13:50
von jacdelad
Ich brauch nochmal einen Schubs. PostEvent klappt prinzipiell, aber da es keine Funktionen, mit denen man eigene Events/EventTypes... sicher registrieren kann (beim nächsten Aufruf vom nächsten Modul entsprehend erhöht), in PureBasic gibt würde ich gern die vorhandenen nutzen (z.B. #PB_EventType_LeftClick). Jetzt habe ich ein wenig rumexperimentiert (z.B. PostEvent(#PB_Event_Gadget,ribbons()\window,ribbons()\handle,#PB_EventType_LeftClick,ribbonid)), aber wie kann ich unterscheiden, ob das Event regulär ausgelöst wurde (User hat geklickt) oder von mir (das Event, das in die Hauptschleife zurückgegeben werden soll)? In EventData() soll die ID des Steuerelements im Ribbon stehen. Oder bin ich da auf dem Holzweg und MUSS eigene Events/EventTypes... definieren?

Re: Ribbon Menü

Verfasst: 15.04.2021 12:04
von jacdelad
Ich hab die Zip im ersten Beitrag aktualisiert. Das Modul fügt sich jetzt nahtlos in die Eventverarbeitung ein. Dazu wird ein Event "#PB_Event_Ribbon" erzeugt und als EventType #PB_EventType_LeftClick, #PB_EventType_RightClick, #PB_EventType_MouseEnter (Hovern gestartet) oder #PB_EventType_MouseLeave (Hovern beendet) zurückgegeben. EventGadget() liefert die ID des Items zurück. Das Beispiel wurde auch aktualisiert und vereinfacht.

Re: Ribbon Menü

Verfasst: 15.04.2021 15:54
von ts-soft
aber da es keine Funktionen, mit denen man eigene Events/EventTypes... sicher registrieren kann (beim nächsten Aufruf vom nächsten Modul entsprehend erhöht),
Genau das macht mein Code, einfach mal angucken und probieren :D

Code: Alles auswählen

CompilerIf Defined(CommonConstants, #PB_Module) = 0
  DeclareModule CommonConstants
    ; Form
    Enumeration FormWindow
    EndEnumeration
    Enumeration FormGadget
    EndEnumeration
    Enumeration FormMenu
    EndEnumeration
    Enumeration FormImage
    EndEnumeration
    Enumeration FormFont
    EndEnumeration
    ; Event
    Enumeration EventCustom #PB_Event_FirstCustomValue
    EndEnumeration
    Enumeration EventTypeCustom #PB_EventType_FirstCustomValue
    EndEnumeration
  EndDeclareModule
  
  Module CommonConstants
  EndModule
CompilerEndIf

UseModule CommonConstants

; ...

Enumeration EventCustom
  #numeventseins
  #numeventstwo
EndEnumeration 

Debug #numeventseins
Debug #numeventstwo

Enumeration EventCustom
  #numeventseirgendwas
EndEnumeration

Debug #numeventseirgendwas



Re: Ribbon Menü

Verfasst: 15.04.2021 17:59
von jacdelad
Ja, den kenne ich schon, aber das übernehmen sicher nicht alle so. Die Idee ist ganz gut, aber es wäre besser, wenn das PureBasic gleich selbst bereitstellen würde, siehe mein Beitrag im englischen Forum.