Infoleiste (erweiterte StatusBar)

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.
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Infoleiste (erweiterte StatusBar)

Beitrag von SBond »

Infoleiste v1.0.0.1

Download:
https://dl.dropboxusercontent.com/s/khk ... iFOJmEWCmA


ähh...ja. Ich dachte ich gebe auch mal der Community etwas zurück, in der Hoffnung, dass es jemand gebrauchen kann.
Es nennt sich "Infoleiste", wobei dieser kreativlose Name hoffentlich niemanden abschreckt.

Genauer genommen handelt es sich um eine Statusleiste, die einen größeren Funktionsumfang aufweist. Da ich natürlich faul bin, habe ich einfach meine Beschreibung aus meinen Include herauskopiert und unten eingefügt. Dort gibt es genauere Informationen ;)


Screenshots:
Bild


Bild


Bild


Bild
das Tooltip erscheint neben der Maus, aber die ist irgendwie nicht auf dem Bild gelandet. Aber ich weiß ja, dass ihr viel Phantasie habt und euch einfach den Mauszeiger vorstellen könnt ;)


Bild
das selbe in Grün. Nur ist es hier das Kontextmenü der Infoleiste

Code: Alles auswählen

===========================================================================
MODUL-INFO
===========================================================================
Modulname..........:	Infoleiste
Version............:	1.0.0.1
Sprache............:	Deutsch
PureBasic-Version..:	5.22 LST
Copyright..........:	Martin Langer (alias SBond)

Autor..............:	SBond
Datum..............:	02.04.2014
E-Mail.............:	SBond.Softwareinfo@gmail.com
Unterstütze OS.....:	Windows (Linux und Mac nicht getestet)
Architekture.......:	x86, x64
Zeichensatz........:	ASCII, Unicode

Wichtige Hinweise..:	Ja, siehe Hilfe ("Einschränkungen und Konflikte")
===========================================================================

Code: Alles auswählen

===========================================================================
VERSIONS-GESCHICHTE
===========================================================================
1.0.0.1	- 02.04.2014 - Repariert: fehlerhafte Größenanpassung des Fensters (durch die SizeBox)
							  - Repariert: Tooltips und Ballon-Tipps flackern

1.0.0.0	- 01.04.2014 - Fertigstellung der Version 1.0
0.0.0.0	- 12.02.2014 - Start der Programmierung
===========================================================================

Code: Alles auswählen

===========================================================================
STATISTIKEN
===========================================================================
Compile Count..................:	3855
Dateigröße.....................:	500,6 KB
Programmiert unter.............:	Windows 7 Ultimate x64

Programmzeilen.................:	10484
Codezeilen.....................:	3786
Code mit Inline Kommentar......:	596
Kommentarzeilen................:	3127
Leerzeilen.....................:	2975
Kommentar/Code-Verhältnis......:	0,826

Anzahl der Prozeduren..........:	71
Public-Prozeduren..............:	55
Private-Prozeduren.............:	16
===========================================================================

Code: Alles auswählen

===========================================================================
HILFE UND HINWEISE
===========================================================================

Einleitung
---------------------------------------------------------------------------

Wer ein größeres Programm entwickelt und bestimmte Zustände anzeigen möchte, der greift höchstwahrscheinlich zu der StatusBar, die in PureBasic standardgemäß zur Verfügung steht. Diese bietet einige Grundfunktionen, um Texte, Symbole und Fortschrittsanzeigen darzustellen. Wer darüber hinaus mehr Funktionen nutzen möchte, steht vor einigen Problemen. Schon das Hinzufügen eines Buttons ist nicht so trivial wie es den anschein hat. Wurde dieser erfolgreich über SetParent_() eingebunden, so stellt man fest, dass von diesem Button keine Events über WindowEvent() empfangen werden. Auch das Ändern einer Feldbreite oder das Entfernen eines Feldes gestaltet sich als schwierig.

Aus diesem Grund wollte ich mir eine eigene Statusleiste programmieren, die ein wenig mehr Spielraum bietet. Herausgekommen ist allerdings die "Infoleiste", die wesentlich mehr Funktionen bietet, als eigentlich geplant war. Zugegeben.... der Name "Infoleiste" ist nicht sehr kreativ, aber sie eignet sich eben nicht nur als klassische Statusleiste. Welche Funktionen und Eigenschaften diese "Infoleiste" hat, werde ich in den Unterkapiteln näher erläutern.




Definition der Begriffe "Infoleiste, Elemente und Felder"
---------------------------------------------------------------------------

Zunächst möchte ich hier die Begriffe erläutern, die in der Hilfe und im Quellcode immer wieder erwähnt werden. Die wichtigsten drei Begriffe sind: "Elemente", "Felder" und "Infoleiste". Nun, die Infoleiste ist prinzipiell eine Leiste, wie die StatusBar in PureBasic. Sie unterteilt sich in Felder, auf denen verschiedene "Elemente" dargestellt werden können. Die Anzahl der Felder ist dabei frei definierbar und kann beliebig angepasst werden. Die Breite eines Feldes und sein Verhalten wird jedoch nicht direkt angegeben (so wie es in der StatusBar der Fall ist), sondern richtet sich nach den "Elementen" die darauf angezeigt werden. Ein Element ist in der Infoleiste eine Art Gadget, das in einem Feld der Infoleiste dargestellt werden kann. Die Anzahl der verwendeten Elemente ist dabei unbegrenzt. Jede Infoleiste kann zudem mehr Elemente verwalten, als angezeigt werden können. Ein Feld in der Infoleiste kann immer einem Element zugeordnet werden, wobei ein Element auch mehrfach dargestellt werden kann. Alle Elemente können ähnlich wie Gadgets erstellt, angepasst und entfernt werden. Dies ist unabhängig davon, ob diese in der Infoleiste angezeigt werden oder nicht. Die Element-Zuweisung eines Feldes in der Infoleiste geht allerdings nicht nur über explizite Prozeduraufrufe, sondern auch über das Kontextmenü.
....ja, jede Infoleiste besitzt ein Kontextmenü, mit dessen Hilfe die Felder leicht angepasst werden können ;)




Einsatzgebiet der Infoleiste und Funktionsumfang
---------------------------------------------------------------------------

Ich denke in diesem Bereich ist es sinnvoll die wichtigsten Funktionen der Infoleiste stichpunktartig zu erläutern:

- jede GUI kann beliebig viele Infoleisten besitzen
- es können mehrere Infoleisten auf mehreren Fenstern gleichzeitig verwaltet werden
- die Infoleiste kann frei plaziert werden und bietet verschiedene Optionen, sowie Autoresize-Einstellungen
- Infoleisten können ausgeblendet werden
- jede Infoleiste kann beliebig viele Felder verwalten
- jede Infoleiste kann beliebig viele Elemente verwalten
- die SizeBox der Infoleiste kann optional ein- und ausgeschaltet werden
- jede Infoleiste besitzt ihre eigenen Elemente
- die Infoleiste, die Elemente und die Felder werden automatisch synchronisiert
- das Aktualisierungsintervall kann angepasst werden (siehe Standard-Einstellungen im Modul)
- alle Elemente generieren Eventinformationen (auch Textfelder)
- jede Infoleiste verfügt über ein eigenes Kontextmenü, das optional auch deaktiviert werden kann
- das Kontextmenü wird alphabetisch sortiert und unterstützt Symbole, sowie Haupt- und Nebenkategorien
- jedes Element kann Tooltips und Ballon-Tipps anzeigen
- Tooltips und Ballon-Tipps können neben dem Text auch einen Titel und ein Symbol anzeigen
- Tooltips können "live" aktualisiert werden
- die Parameter und Einstellungen der Element-Typen sind vollkompatibel mit den Gadgets in PureBasic


- unterstützte Element-Typen in der Infoleiste:
------------------------------------------------
  ButtonGadget
  ButtonImageGadget
  CanvasGadget
  CheckBoxGadget
  ComboBoxGadget
  DateGadget
  ExplorerComboGadget
  HyperLinkGadget
  IPAddressGadget
  ProgressBarGadget
  ScrollBarGadget
  ShortcutGadget
  SpinGadget
  StringGadget
  TextGadget
  TrackBarGadget




Einschränkungen und Konflikte
---------------------------------------------------------------------------

Dieses Modul hat leider einige Konfliktpunkte, die ich hier noch erwähnen möchte.

1. Kontextmenü-Konflikt:
-------------------------
Sobald ein Rechtsklick auf der Infoleiste durchgeführt wird, erscheint ein Kontextmenü, das unmittelbar zuvor generiert wurde. Um anschließEnd die angeklickten Menüpunkte auswerten zu können, ist es nötig jedem Menüeintrag eine MenuID zu geben. Diese sind allerdings Global im ganzen Programm verfügbar und können im Konflikt mit anderen Menüleisten und Popup-Menüs stehen. Um dies zu verhindern, werden die MenuIDs in der Infoleiste >= 20000 sein. Für den unwahrscheinlichen Fall, dass dies zu einem Konflikt wird, kann der Wert in den Standard-Einstellungen des Moduls angepasst werden.



2. OS-Konflikt:
-------------------------
Diese Infoleiste wurde zur Zeit nur auf Windows getestet. Die Einschränkung auf Linux und Mac richtet sich nur bei den Tooltips (bzw. Ballon-Tipps), da die Prozedur "_Tooltip (...)" WinAPIs verwendet. Wird diese deaktiviert, so sollte der Rest auch auf anderen Betriebssystemen laufen




Programmierstruktur
---------------------------------------------------------------------------

Ich denke es wird vielen sofort auffallen, dass die Namen der Prozeduren und Variablen auf Deutsch sind und eine andere Form aufweisen als üblich. Ich habe also statt "MyNewProcedure()" folgende Bezeichnung angewendet: "Meine_neue_Prozedur ()". Der Grund dafür ist ganz einfach: neugier. Ich programmiere erst seit knapp 2 Jahren mit verschiedenen Sprachen, wobei ich PureBasic knapp 10 Monate kenne. Mit der deutsch Bezeichnung habe ich mir etwas mehr Übersicht erhofft. Naja, der Effekt ist zumindest kleiner als erwartet. Wem es stört, kann ja einfach mit suchen/ersetzen die Namen ändern ;)

Ich habe mir wirklich Mühe gegeben, den Quellcode so optimal wie möglich zu gestallten und zu dokumentieren. Ich denke es steckt noch Optimierungspotential drin, aber von meinem aktuellen Wissensstand sollte es ok sein. Die Dokumentation selber beläuft sich einmal als Inline-Kommentare und als Prozedur-Beschreibung. Letzteres findet man immer direkt über der jeweiligen Prozedur.


Variablen:
-------------------------
Alle Variablen sind nach außen hin gekapselt und können nicht verändert werden. Die Namen der Variablen habe ich immer mit einem Präfix versehen, um den Datentyp kenntlich zu machen:

iVariable.i	-> Integer (verwendet für Ganzzahlen, handles und boolsche Ausdrücke)
fVariable.f	-> Float
sVariable.s	-> String
bVariable.b	-> Byte


...achja für den Fall, dass die Darstellung verschoben sein sollte: meine Tab-Länge in der PureBasic IDE ist 4 (echter Tab)




Haftung / Lizenz
---------------------------------------------------------------------------
Dieser Quellcode wird in einem Zustand zu Verfügung gestellt, wie er ist. Die Fehlerfreiheit des Quellcodes wird nicht garantiert und ich übernehme keine Verantwortung für Schäden, die diesem Quellcode zugeschrieben werden. Die freie Verwendung, Anpassung und kostenlose Weitergabe, sowie die Anwendung im Kommerziellen Bereich sind gestattet, sofern der Bezug des Quellcodes zu dem Autor (SBond) nicht verloren geht.  
===========================================================================

Code: Alles auswählen

===========================================================================
DANKE
===========================================================================
An dieser Stelle möchte ich mich bei jenen bedanken, die mich bei der Entwicklung unterstützt haben. Besonderen Dank gilt:

NicTheQuick
STARGÅTE
ts-soft
RSBasic
Danilo
Chimorin

Die oben genannten User (siehe PureBasic-Forum: http://www.purebasic.fr/german/) haben mir bei Fragen immer zur Seite gestanden und mir wertvolle Tipps gegeben. Natürlich bedanke ich mich auch an den Rest der PureBasic-Community und das PureBasic-Entwicklerteam. :)

Zuletzt bedanke ich mich bei meinem Asus-Laptop N70S, der trotz fehlerhafter Sektoren, Abstürze und seiner grotten-schlechten Leistung, mein programmier-gefriemel wohlwollend duldete und erstaunlich wenig kurrupte Dateien erzeugte. ...und das trotz des Bügeleisen-Unfalls xD
===========================================================================

Code: Alles auswählen

===========================================================================
PROZEDUREN - BESCHREIBUNG
===========================================================================
----PUBLIC----

Infoleiste allgemein
----------------------------------------
_erstelle_Infoleiste							erzeugt eine Infoleiste, in der Elemente verwaltet werden können
_entferne_Infoleiste							entfernt die angegebene Infoleiste und gibt die verwendeten Ressourcen wieder frei
_verstecke_Infoleiste							blendet die Infoleiste aus oder zeigt diese wieder an
	
_setze_allgemeine_Optionen					ändert allgemeine Einstellungen der Infoleiste
_setze_Autoresize_Optionen					ermöglicht die automatische Größenanpassung der Infoleiste
	
_gebe_Element_Event 							ermittelt, ob das aktuelle Event von einem Element ausgelöst wurde
	
	
	
Verwalten von Elementen
----------------------------------------
_erstelle_ButtonGadget_Element				erstellt ein neues ButtonGadget-Element in der Infoleiste
_erstelle_ButtonImageGadget_Element		erstellt ein neues ButtonImageGadget-Element in der Infoleiste
_erstelle_CanvasGadget_Element				erstellt ein neues CanvasGadget-Element in der Infoleiste
_erstelle_CheckBoxGadget_Element			erstellt ein neues CheckBoxGadget-Element in der Infoleiste
_erstelle_ComboBoxGadget_Element			erstellt ein neues ComboBoxGadget-Element in der Infoleiste
_erstelle_DateGadget_Element					erstellt ein neues DateGadget-Element in der Infoleiste
_erstelle_ExplorerComboGadget_Element 		erstellt ein neues ExplorerComboGadget-Element in der Infoleiste
_erstelle_HyperLinkGadget_Element 			erstellt ein neues HyperLinkGadget-Element in der Infoleiste
_erstelle_IPAddressGadget_Element 			erstellt ein neues IPAddressGadget-Element in der Infoleiste
_erstelle_ProgressBarGadget_Element 		erstellt ein neues ProgressBarGadget-Element in der Infoleiste
_erstelle_ScrollBarGadget_Element 			erstellt ein neues ScrollBarGadget-Element in der Infoleiste
_erstelle_ShortcutGadget_Element 			erstellt ein neues ShortcutGadget-Element in der Infoleiste
_erstelle_SpinGadget_Element 				erstellt ein neues SpinGadget-Element in der Infoleiste
_erstelle_StringGadget_Element				erstellt ein neues StringGadget-Element in der Infoleiste
_erstelle_TextGadget_Element				erstellt ein neues TextGadget-Element in der Infoleiste
_erstelle_TrackBarGadget_Element 			erstellt ein neues TrackBarGadget-Element in der Infoleiste

_gebe_Element_Attribut							gibt einen Attribut-Wert des angegebenen Elements zurück
_gebe_Element_Farbe								gibt die Farbe des angegebenen Elements im RGB-Format zurück
_gebe_Element_Informationen 				gibt allgemeine Informationen über ein Element
_gebe_Element_Status							gibt den aktuellen Status des angegebenen Elements zurück
_gebe_Element_Text								gibt den Textinhalt des angegebenen Elements zurück
	
_setze_Element_Attribut						ändert einen Attribut-Wert des angegebenen Elements
_setze_Element_Breite							ändert die Abmessung der angegebenen Elemente
_setze_Element_Farbe							ändert die Farbe des angegebenen Elements
_setze_Element_Schriftart					weist dem angegebenen Element eine Schriftart zu
_setze_Element_Status							ändert den aktuellen Status des angegebenen Elements
_setze_Element_Text							ändert den Text-Inhalt des angegebenen Elements
	
_entferne_Element 							entfernt ein Element vollständig aus der Infoleiste
	
	
	
Verwalten von Element-Items
----------------------------------------
_erstelle_Element_Item						fügt einem Element ein Item hinzu
	
_gebe_Element_Item_Anzahl					gibt die Anzahl der Items eines Elements zurück
_gebe_Element_Item_Daten					gibt den Wert zurück, welcher zuvor für diesen Element-Eintrag mittels _setze_Element_Item_Daten() gespeichert wurde. Dies ermöglicht das Verknüpfen eines individuellen Werts mit den Einträgen eines Element. 
_gebe_Element_Item_Text						gibt den Textinhalt des angegebenen Eintrags vom angegebenen Element zurück
	
_setze_Element_Item_Daten					speichert den angegebenen Wert mit dem angegebenen Element-Eintrag. Dies ermöglicht das Verknüpfen eines individuellen Werts mit den Einträgen eines Element. 
_setze_Element_Item_Image					ändert das Bild des angegebenen Element-Eintrags
_setze_Element_Item_Text					ändert den Text des angegebenen Element-Eintrags
	
_entferne_alle_Element_Items					entfernt alle Items eines Elements
_entferne_Element_Item						entfernt ein Item eines Elements

	

Felder der Informationsleiste
----------------------------------------
_setze_Feld 								weist einem Feld in der Infoleiste ein Element zu, erstellt neue Felder oder entfernt diese
_entferne_Feld								entfernt das angegebene Feld aus der Infoleiste
	
	
	
Kontextmenü der Informationsleiste
----------------------------------------
_setze_Kontextmenue_Optionen				ändert allgemeine Einstellungen des Kontextmenüs einer Infoleiste
_setze_Kontextmenue_Eintrag 				fügt einem Element ein Kontextmenü-Eintrag hinzu
_entferne_Kontextmenue_Eintrag 				entfernt den Kontextmenü-Eintrag eines Elements
	
	
	
Tooltip der Informationsleiste
----------------------------------------
_setze_Tooltip_Optionen 						ändert allgemeine Einstellungen der Tooltips
_setze_Tooltip 								fügt einem Element ein Tooltip hinzu, ändert dieses oder entfernt es
_entferne_Tooltip 							entfernt das Tooltip eines Elements
	
	
	
Ballon-Tipps der Informationsleiste
----------------------------------------
_setze_Ballon_Tipp 						fügt einem Element ein Ballon-Tipp hinzu, ändert dieses oder entfernt es
_zeige_Ballon_Tipp 						zeigt ein Ballon-Tipp in der Infoleiste an
_verstecke_Ballon_Tipp 					blendet ein aktuell angezeigtes Ballon-Tipp aus
_entferne_Ballon_Tipp 						entfernt das Ballon-Tipp eines Elements
	
	
	
---- PRIVATE ----	
	
überprüfen der Mausparameter
----------------------------------------
_pruefe_Mausaktion 						gibt die Feldnummer zurück, über der sich die Maus befindet
_pruefe_Mausposition 						gibt die Feldnummer zurück, über der sich die Maus befindet
	

	
Größenanpassung der Infoleiste
----------------------------------------
_Infoleiste_groesse_automatisch_anpassen	berechnet anhand der GUI-Abmessung und des gewählten Modus die neuen Maße der Infoleiste
_Infoleiste_groesse_anpassen 				ändert die Position und Abmessung der Infoleiste und passt die darauf enthaltenen Felder an
	
	
	
Verwaltung der Felder
----------------------------------------
_berechne_Element_Felder 				berechnet anhand der Abmessung der Infoleiste die Positionen und Abmessungen der einzelnen Felder
_Felder_aktualisieren					aktualisiert alle Felder in der Infoleiste und synchonisiert so die Gadgets mit den Element-Einstellungen
_Felder_sortieren 							nummeriert die Felder in der Infoleiste neu
_gebe_Feld_des_Elements 				sucht das angegebene Element in den Feldern der Infoleiste und gibt dessen Position zurück
	
	
	
sonstige Prozeduren
----------------------------------------
_erneuere_Infoleiste 					erneuert die Felder in der Infoleiste und tauscht diese ggf. aus
_gebe_Anzahl_der_Elemente 				zählt die vorhandenen Elemente in der Infoleiste (nicht die Felder)
_Tooltip 								erzeugt ein Tooltip oder ein Ballon-Tipp
_zeige_Kontextmenue 					öffnet das Kontextmenü der Infoleiste
	
	
	
BindEvents
----------------------------------------
_Autoresize								BindEvent: ermöglicht die automatische Anpassung der Infoleiste bei einer Größenveränderung der GUI
_Element_Aktualisierung					BindEvent: prüft, ob ein Gadget im Feld der Infoleiste geändert wurde und synchronisiert anschließEnd die Elemente der Infoleiste
_Menue_Event							BindEvent: prüft, ob ein Eintrag im Kontextmenü ausgewählt wurde und führt diesen anschließEnd aus
_Timer_Event							BindEvent: aktualisiert periodisch die Tooltips und das Kontextmenü
===========================================================================

Code: Alles auswählen

===========================================================================
ZUKÜNFTIGE FUNKTIONEN
===========================================================================
- mehrere Infoleisten nutzen ein Element-Array
- Deaktivierung von Elementen (DisableGadget())
===========================================================================
 

viele Grüße,
Martin
Zuletzt geändert von SBond am 02.04.2014 01:33, insgesamt 4-mal geändert.
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

: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

Re: Infoleiste (erweiterte StatusBar)

Beitrag von ts-soft »

SBond hat geschrieben: ...ggf. werde ich das hier noch mal hübsch machen.
Ratschläge und Tipps sind natürlich gerne gesehen.

...muss jetzt schlafen :coderselixir:

viele Grüße,
Martin
Hoffentlich verkürzt oder entfernst Du dann auch diese durchenden =, weil das vertikale Scrollen im Browser macht
keinen Spaß. Es hat nicht jeder eine Auflösung von 1920 zur Verfügung, bzw. selbst wenn, ich mag nicht so breit
lesen, das ist anstrengend für meine alten Augen :mrgreen:

Muß hier 15 cm horizontal Scrollen um den Zitieren-Button zu erreichen. Deine Beschreibung hab ich auch erst-
mal ignoriert.

Also bitte dran denken, keine zu grossen Bilder und keine durchgehenden Linien oder Code ohne Leerzeichen, da-
mit der Browser eine Chance hat, das ganze umzubrechen.

Gruß
Thomas
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
Bisonte
Beiträge: 2467
Registriert: 01.04.2007 20:18

Re: Infoleiste (erweiterte StatusBar)

Beitrag von Bisonte »

Fein fein.... Aber den Bügeleisenvorfall würd ich doch gerne näher beschrieben wissen ;)

Aber in punkto Lesbarkeit muss ich ts-soft zustimmen... Selbst bei 1920px Breite muss man hin-, und herscrollen...
Auch wenn es antiquiert wirken mag... 80 Zeichen pro Zeile hat sich bewährt ....
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​​
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Infoleiste (erweiterte StatusBar)

Beitrag von NicTheQuick »

Unter Linux geht es schon mal nicht, weil schon mal die Konstante '#SS_ETCHEDFRAME' unbekannt ist, weil sie von der WinAPI stammt. Dann kommen noch '#SS_NOTIFY' und '#SS_CENTERIMAGE' und weiter habe ich nicht geschaut.

Sieht aber laut Screenshots nicht schlecht aus. Wieso nutzt du denn bei allen Namen immer einen Unterstrich als erstes Zeichen? Ist das deine eigene Konvention so?

Wegen der Textbreite habe ich jetzt keine Probleme, aber für nicht Full-HD-ler ist es sicherlich lästig.
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Re: Infoleiste (erweiterte StatusBar)

Beitrag von SBond »

sooo...
Ich denke nun sollte es besser sein. Ich habe auch gar nicht daran gedacht, dass es Probleme beim Skalieren geben könnte. War gestern aber auch recht müde und habe es einfach hineinkopiert.

@Bisonte: zum Thema Bügeleisen-Unfall. ja.... xD
Es war so: ich habe vor ca. 3 Monaten gebügelt und nebenbei Musik auf meinem Laptop gehört. Das Festnetz-Telefon hat geklingelt und ich habe vorsichtig das Bügeleisen weggelegt (dachte ich) und ging ans Telefon. Das Telefonat fand nach ca. 10 Minuten ein jähes Ende, als die Sicherung rausflog. Als Elektriker ging ich erstmal zum Sicherungskasten, um die Personenschutz-Sicherung (FI) einzuschalten. ... ging nicht. Also musste ich die Ursache suchen. Die Suche konnte ich allerdings nach wenigen Sekunden abbrechen, als ich das Problem roch. Ich weiß nicht warum, aber ich habe so geistiggegenwärtig wie ich war, das heiße Bügeleisen auf mein Laptop-Netzteil gelegt. Das hat scheinbar nach wenigen Minuten einen Einheitsklumpen mit dem Bügeleisen gebildet und einen Kurzschluss ausgelöst. Das Netzteil zu ersetzen war kein Problem, aber seit dem ist mein Laptop anfällig für Abstürze. :mrgreen:


@NicTheQuick: mit den Konstanten hast du Recht. Die Tooltips verwenden WinAPI-Aufrufe, und die Textfelder (bzw. der Rahmen) nutzen Konstanten die nur unter Windows verfügbar sind. #SS_NOTIFY habe ich genutzt um ein Event auslösen zu können, aber das ist auch anders leicht lösbar. Das werde ich mal einpflegen. #SS_CENTERIMAGE dient zur vertikalen Zentrierung und könnte ich über Compiler-Direktiven optional nur bei Windows aktivieren. Ansonsten habe ich eigentlich nur standard-PB-Befehle verwendet.

Dieser Unterstrich am Anfang der Prozeduren habe ich noch aus meiner Zeit von AutoIt übernommen. Dort wurden alle 'User Defined Functions' (UDF) die programmiert wurden, mit einem Unterstrich versehen, um Konflikte mit existierenden Funktionen auszuschließen. Da in PureBasic die Prozeduren innerhalb der Module gekapselt sind, ist es eigentlich überflüssig.

Wahrscheinlich merkt man daran auch, dass ich noch keine größeren Projekte realisiert habe. Ich probiere noch viel aus, um eine gute Struktur und Übersicht zu erhalten. Ich denke dafür braucht man auch einige Jahre Erfahrung, um so etwas besser einschätzen zu können.
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Infoleiste (erweiterte StatusBar)

Beitrag von Kiffi »

SBond hat geschrieben:Es war so: ich habe vor ca. 3 Monaten gebügelt und nebenbei Musik auf meinem Laptop gehört. Das Festnetz-Telefon hat geklingelt [...]
sorry für Off-Topic, aber der passt hier grade zu gut:
Ein Mann wird mit zwei verbrannten Ohren ins Krankenhaus eingeliefert. Fragt der Arzt ihn verwundert: "Wie haben Sie das denn hinbekommen?"
Sagt der Mann: "Ja, also, ich war gerade am Bügeln, als das Telefon klingelte und da habe ich das Telefon mit dem Bügeleisen verwechselt.
"Und wie ist das mit dem anderen Ohr passiert?"
Daraufhin antwortet der Mann: "Ich musste ja dann den Krankenwagen anrufen...!"
:wink:
a²+b²=mc²
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Re: Infoleiste (erweiterte StatusBar)

Beitrag von SBond »

zu geil :mrgreen:
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Infoleiste (erweiterte StatusBar)

Beitrag von GPI »

Ich hab für das CodeArchiv die public Proceduren ins englische übersetzt:
https://github.com/GPIforGit/PureBasic- ... WIN%5D.pbi

Genauso hab ich die führenden "_" vor den Proceduren entfernt. Imo wird ein "_" am Anfang eines Namens immer dann benutzt, wenn es nur intern verwendet werden soll. Ist halt etwas verwirrend. Bei den Englischen Namen hab ich mich an die PureBaisc-Syntax orientiert. Genauso hab ich Übergabe-Strings übersetzt. Ich hoffe mal, das ich nichts vergessen hab :)

Achja: Das Modul heißt jetzt schlicht "CustomStatusBar"

p.s.: Anscheinend hast du einen kleinen Bug in deinen Code. Mal heißt es "kein", andersmal "keins". Eventuell wäre es geschickter, dafür Konstanten wie #Icon_none einzuführen. Strings als Übergabe sind halt immer eine Fehlerquelle, weil man sich vertippen kann. Zudem ist es langsamer, als wenn man eine Zahlenkonstante nimmt.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Antworten