Ribbon Menü
- Andre
- PureBasic Team
- Beiträge: 1757
- 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...
- jacdelad
- Beiträge: 348
- Registriert: 03.02.2021 13:39
- Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
- Wohnort: Riesa
- Kontaktdaten:
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.
PureBasic 6.11/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/150TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/150TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
- jacdelad
- Beiträge: 348
- Registriert: 03.02.2021 13:39
- Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
- Wohnort: Riesa
- Kontaktdaten:
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.
PureBasic 6.11/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/150TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/150TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
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.10 (x64)
- jacdelad
- Beiträge: 348
- Registriert: 03.02.2021 13:39
- Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
- Wohnort: Riesa
- Kontaktdaten:
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?
PureBasic 6.11/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/150TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/150TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
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.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom
- jacdelad
- Beiträge: 348
- Registriert: 03.02.2021 13:39
- Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
- Wohnort: Riesa
- Kontaktdaten:
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?
PureBasic 6.11/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/150TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/150TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
- jacdelad
- Beiträge: 348
- Registriert: 03.02.2021 13:39
- Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
- Wohnort: Riesa
- Kontaktdaten:
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.
PureBasic 6.11/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/150TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/150TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
- 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.
- jacdelad
- Beiträge: 348
- Registriert: 03.02.2021 13:39
- Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
- Wohnort: Riesa
- Kontaktdaten:
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.
PureBasic 6.11/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/150TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/150TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB