Wäre schön, wenn es das künftig auch cross-plattform (MacOS) geben würde...
Ribbon Menü
- Andre
- PureBasic Team
- Beiträge: 1765
- Registriert: 11.09.2004 16:35
- Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10 - Wohnort: Saxony / Deutscheinsiedel
- Kontaktdaten:
Re: Ribbon Menü
Coole Sache, dein RibbonGadget Projekt 
Wäre schön, wenn es das künftig auch cross-plattform (MacOS) geben würde...
Wäre schön, wenn es das künftig auch cross-plattform (MacOS) geben würde...
Re: Ribbon Menü
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.
Guten Morgen, das ist ein schöner Tnetennba!
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Re: Ribbon Menü
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.
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.
Guten Morgen, das ist ein schöner Tnetennba!
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Re: Ribbon Menü
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).
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).
Win11 x64 | PB 6.20
Re: Ribbon Menü
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?
Muss ich nicht erst das WaitWindowEvent() verlassen, damit ich das PostEvent() senden kann? Oder löse ich das mit BindEvent() ans Gadget?
Guten Morgen, das ist ein schöner Tnetennba!
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Re: Ribbon Menü
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)
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)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: Ribbon Menü
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?
Guten Morgen, das ist ein schöner Tnetennba!
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Re: Ribbon Menü
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.
Guten Morgen, das ist ein schöner Tnetennba!
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
- 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
Re: Ribbon Menü
Genau das macht mein Code, einfach mal angucken und probierenaber da es keine Funktionen, mit denen man eigene Events/EventTypes... sicher registrieren kann (beim nächsten Aufruf vom nächsten Modul entsprehend erhöht),
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
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Ribbon Menü
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.
Guten Morgen, das ist ein schöner Tnetennba!
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD