Ribbon Menü

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1754
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ü

Beitrag 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)
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Ribbon Menü

Beitrag 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.
PureBasic 6.04/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/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Ribbon Menü

Beitrag 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.
PureBasic 6.04/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/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Andesdaf
Moderator
Beiträge: 2658
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Ribbon Menü

Beitrag 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).
Win11 x64 | PB 6.00 (x64)
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Ribbon Menü

Beitrag 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?
PureBasic 6.04/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/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Ribbon Menü

Beitrag 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)
PureBasic 6.04 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​​
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Ribbon Menü

Beitrag 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?
PureBasic 6.04/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/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Ribbon Menü

Beitrag 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.
PureBasic 6.04/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/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
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

Re: Ribbon Menü

Beitrag 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


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
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Ribbon Menü

Beitrag 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.
PureBasic 6.04/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/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Antworten