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.
CSHW89
Beiträge: 489 Registriert: 14.12.2008 12:22
Beitrag
von CSHW89 » 07.10.2012 11:39
Hi Leute,
hab mir gerade mal ein Mini-Macro gebaut mit dem man beim Enumerations in 2er-Potenz-Schritten Konstanten definieren. Dies wurde schon mehrfach im englischen Forum gewünscht, und auch ich selbst benutze des Öfteren z.B. für Flags solche Konstanten:
Code: Alles auswählen
; Hier das Macro
Macro enum2pow(_const_)
_const_ = ((#PB_Compiler_EnumerationValue=1 And 1) + (#PB_Compiler_EnumerationValue>1 And 1) * ((#PB_Compiler_EnumerationValue-1)<<1))
EndMacro
; Erster Test für Enumeration mit 2er-Potenzen-Schritten
Enumeration 1
enum2pow(#A1) ;1
enum2pow(#A2) ;2
enum2pow(#A3) ;4
enum2pow(#A4) ;8
EndEnumeration
Debug #A1
Debug #A2
Debug #A3
Debug #A4
Debug "----------"
; Zweiter Test mit Startwert
Enumeration 1 ; Muss immer 1 sein!!!!!!
enum2pow(#B1) * 16 ; Startwert hier multiplizieren
enum2pow(#B2) ;32
enum2pow(#B3) ;64
enum2pow(#B4) ;128
EndEnumeration
Debug #B1
Debug #B2
Debug #B3
Debug #B4
lg Kevin
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben: Ich liebe diese von hinten über die Brust ins Auge Lösungen
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
Beitrag
von ts-soft » 07.10.2012 12:27
Sehr nützlich, danke
RSBasic
Admin
Beiträge: 8047 Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:
Beitrag
von RSBasic » 07.10.2012 12:34
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
WPö
Moderator
Beiträge: 669 Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:
Beitrag
von WPö » 07.10.2012 19:47
Danke, Kevin, für's Teilen!
Ich nutze gern so etwas wie
usw.. Wenn Masken gebraucht werden, auch schonmal
Sowas ist immer sehr übersichtlich, platzsparend und sowieso der "Amiga-Weg".
Bisher wurden meine Projekte auch nicht so groß, daß bei der fälligen Handarbeit Finger abgebrochen wären.
Gruß - WPö
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz:
WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
CSHW89
Beiträge: 489 Registriert: 14.12.2008 12:22
Beitrag
von CSHW89 » 08.10.2012 11:16
Ja gut, ich hab statt Hex-Zahlen immer Bin-Zahlen verwendet, also:
Allerdings, wenn man dann doch mal ne Konstante irgendo da zwischen einfügen möchte, muss man wieder alle darunter ändern.
Ist ja auch der Sinn einer Enumeration: Eine Folge von Konstanten, ohne dass man wissen muss, welchen Wert jetzt eine bestimmte Konstante besitzt, sodass dieses "Problem" halt nicht auftaucht
lg Kevin
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben: Ich liebe diese von hinten über die Brust ins Auge Lösungen
Josh
Beiträge: 1028 Registriert: 04.08.2009 17:24
Beitrag
von Josh » 08.10.2012 13:12
Andre hats im englischen Forum unter
Wishlists gepostet
Demivec
Beiträge: 49 Registriert: 22.02.2008 20:49
Wohnort: Utah, USA
Beitrag
von Demivec » 21.07.2013 07:35
Für v5.20:
Code: Alles auswählen
Macro enum2pow(_const_)
_const_ = (Bool(#PB_Compiler_EnumerationValue = 1) + Bool(#PB_Compiler_EnumerationValue > 1) * ((#PB_Compiler_EnumerationValue - 1) << 1))
EndMacro
@Edit: aktualisiert, danke c4s.
Zuletzt geändert von
Demivec am 30.07.2013 16:34, insgesamt 1-mal geändert.
c4s
Beiträge: 1235 Registriert: 19.09.2007 22:18
Beitrag
von c4s » 30.07.2013 16:00
@Demivec
Danke, aber der angepasste Code funktioniert gar nicht:
PB 5.11 Debugger hat geschrieben: Only integer constant expressions allowed for an Enumeration.
Weiß irgendjemand wie das repariert werden kann?
"
Menschenskinder, das Niveau dieses Forums singt schon wieder! " —
GronkhLP ||| "
ich hogffe ihr könnt den fehle endecken " —
Marvin133 ||| "
Ideoten gibts ... " —
computerfreak ||| "
Jup, danke. Gruss " —
funkheld
NicTheQuick
Ein Admin
Beiträge: 8807 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
Beitrag
von NicTheQuick » 30.07.2013 16:10
Das funktioniert bei mir wunderbar:
Code: Alles auswählen
Macro enum2pow(_const_)
_const_ = (Bool(#PB_Compiler_EnumerationValue = 0) + Bool(#PB_Compiler_EnumerationValue > 0) * 2 * (#PB_Compiler_EnumerationValue - 1))
EndMacro
Enumeration
enum2pow(#c1)
enum2pow(#c2)
enum2pow(#c3)
enum2pow(#c4)
enum2pow(#c5)
enum2pow(#c6)
enum2pow(#c7)
EndEnumeration
Debug #c1
Debug #c2
Debug #c3
Debug #c4
Debug #c5
Debug #c6
Debug #c7
c4s
Beiträge: 1235 Registriert: 19.09.2007 22:18
Beitrag
von c4s » 30.07.2013 16:21
Bei mir funktioniert auch dein Code nicht mit gleicher Fehlermeldung (PB 5.11, x86, Windows).
Edit: Gerade mal mit PB5.20b5 getestet und es funktioniert, auch Demivec's Code.
Zuletzt geändert von
c4s am 30.07.2013 16:25, insgesamt 1-mal geändert.
"
Menschenskinder, das Niveau dieses Forums singt schon wieder! " —
GronkhLP ||| "
ich hogffe ihr könnt den fehle endecken " —
Marvin133 ||| "
Ideoten gibts ... " —
computerfreak ||| "
Jup, danke. Gruss " —
funkheld