Hallo zusammen,
gibt es eine Möglichkeit, einen Stringinhalt von vorneherein in einer anderen Farbe abzuspeichern, so dass er automatisch in dieser dargestellt wird?
z.B. a$ = "Toni"
b$ = "Markus"
c$ = "Heinz"
Bei der Ausgabe der Strings (die immer wieder im Programm in einem Fenster ausgegeben werden) soll c$ automatisch immer in roter Schrift oder in Fett dargestellt werden.
Ich möchte aber nicht jedes mal abfragen, ob nun gerade c$ ausgegeben wird und die Schriftfarbe umständlich mit setgadgetfont und -color auf rot (oder Fett) und anschließend wieder zurück stellen (was die einzige Lösungsmöglichkeit ist, die mir bisher eingefallen ist).
Habt ihr noch eine Idee?
Vielen Dank
Oli
String in anderer Farbe
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
es geht nicht anders.
wenn du einem text in einem gadget eine andere farbe geben willst als die,
die im farbprofil des benutzers eingestellt ist, musst du sie direkt ändern.
du kannst die farbinformation im string abspeichern, so ähnlich wie die BB-Tags im forum,
aber dann musst du dir einen parser für die strings schreiben,
der erst den inhalt interpretiert und die farben einstellt
und dann den text ins gadget packt.
wenn du einem text in einem gadget eine andere farbe geben willst als die,
die im farbprofil des benutzers eingestellt ist, musst du sie direkt ändern.
du kannst die farbinformation im string abspeichern, so ähnlich wie die BB-Tags im forum,
aber dann musst du dir einen parser für die strings schreiben,
der erst den inhalt interpretiert und die farben einstellt
und dann den text ins gadget packt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Du könntest aber auch mit Strukturen arbeiten. (Code ungetestet, soll nur zur Idee anregen)Das war's. Mit Strukturen kannst du sozusagen mehrere Variablen in einer Variablen speichern.
Warum habe ich bei a und b keine Schrift gespeichert? Nun, da die normale Schriftart ja im Beispiel mit 0 geladen wurde ist es egal. Beim deklarieren ist zunächst schrift (genauso wie farbe) sowieso 0. Warum also nochmal schreiben?
Die Strukturen kannst du beliebig erweitern. Sie funktionieren sogar mit Arrays und LinkedLists. Sieh mal in der Hilfe nach, Strukturen sind überaus praktisch.
Ich hoffe, ich konnte die einigermaßen helfen. Feedback wäre nett.
Code: Alles auswählen
; Du brauchst diese Struktur
Structure farbe
string.s
farbe.l
schrifttyp.l
EndStructure
; Wir laden zwei Schriften, eine normale, eine FETTE
LoadFont(0, "Arial", 10)
LoadFont(1, "Arial", 10, #PB_Font_Bold)
; Deine Strings werden nun so deklariert:
define a.farbe, b.farbe, c.farbe
; Füllen der Strings
a\string="Toni"
a\farbe=RGB(255, 255, 0) ; Toni wird grün (vor Neid ;-) )
b\string="Markus"
b\farbe=RGB(128, 128, 255) ; Helles blau
c\string="Heinz"
c\farbe=RGB(255, 0, 0) ; Genauso rot wie der Heinz-Ketschup
c\schrift=1 ; Hier soll zusätzlich noch die Schrift 1 gespeichert werden
; Sagen wir, du hast ein TextGadget() und möchtest nun die einzelnen Strings abspeichern. Dann kannst du bequem auf die Struktueren zurückgreifen:
SetGadgetText(#Gadget, b\text)
SetGadgetFont(#Gadget, FontID(b\schrift))
SetGadgetColor(#Gadget, #PB_Gadget_FrontColor, b\farbe) ; Konstante nachgucken, habe ich die richtig geschrieben?
Warum habe ich bei a und b keine Schrift gespeichert? Nun, da die normale Schriftart ja im Beispiel mit 0 geladen wurde ist es egal. Beim deklarieren ist zunächst schrift (genauso wie farbe) sowieso 0. Warum also nochmal schreiben?
Die Strukturen kannst du beliebig erweitern. Sie funktionieren sogar mit Arrays und LinkedLists. Sieh mal in der Hilfe nach, Strukturen sind überaus praktisch.
Ich hoffe, ich konnte die einigermaßen helfen. Feedback wäre nett.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Schau mal hier: http://www.purebasic.fr/german/viewtopic.php?t=10981
- 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
@Oli:
Ich hab dir mal schnell eine Procedure gebastelt. Vielleicht sagt sie dir ja zu.
Ein Beispiel ist dabei:
Ich hab dir mal schnell eine Procedure gebastelt. Vielleicht sagt sie dir ja zu.
Ein Beispiel ist dabei:
Code: Alles auswählen
;{c:255,0,0}{cb:0,0,0}{f:0}Text
Procedure SetGadgetTextEx(Gadget.l, Text.s)
Protected *c.Character, open.l = #False, dontopen.l = #False, ctrl.s = "", part.s = ""
SetGadgetFont(Gadget, #PB_Default)
SetGadgetColor(Gadget, #PB_Gadget_FrontColor, -1)
SetGadgetColor(Gadget, #PB_Gadget_BackColor, -1)
*c = @Text
While *c\c
If *c\c = '}' And dontopen = #False
open = #False
Select LCase(StringField(ctrl, 1, ":"))
Case "c"
ctrl = StringField(ctrl, 2, ":")
SetGadgetColor(Gadget, #PB_Gadget_FrontColor, RGB(Val(StringField(ctrl, 1, ",")), Val(StringField(ctrl, 2, ",")), Val(StringField(ctrl, 3, ","))))
Case "cb"
ctrl = StringField(ctrl, 2, ":")
SetGadgetColor(Gadget, #PB_Gadget_BackColor, RGB(Val(StringField(ctrl, 1, ",")), Val(StringField(ctrl, 2, ",")), Val(StringField(ctrl, 3, ","))))
Case "f"
SetGadgetFont(Gadget, FontID(Val(StringField(ctrl, 2, ":"))))
EndSelect
Debug ctrl
ElseIf open
ctrl + Chr(*c\c)
ElseIf *c\c = '{' And dontopen = #False
open = #True
ctrl = ""
ElseIf *c\c = '\'
dontopen = #True
Else
dontopen = #False
part + Chr(*c\c)
EndIf
*c + SizeOf(Character)
Wend
SetGadgetText(Gadget, part)
Debug part
EndProcedure
If Not LoadFont(0, "Arial", 10) : Debug "Fehler" : EndIf
If Not LoadFont(1, "Times New Roman", 12, #PB_Font_StrikeOut) : Debug "Fehler" : EndIf
If Not LoadFont(2, "Helvetica", 8, #PB_Font_Bold | #PB_Font_Italic) : Debug "Fehler" : EndIf
If OpenWindow(0, 0, 0, 300, 60, "SetGadgetTextEx()-Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
TextGadget(0, 0, 0, 300, 20, "")
TextGadget(1, 0, 20, 300, 20, "")
TextGadget(2, 0, 40, 300, 20, "")
SetGadgetTextEx(0, "{c:255,0,0}{f:0}Das ist ein Testtext!")
SetGadgetTextEx(1, "{cb:32,32,32}{c:0,255,0}{f:1}Das ist ein \{Testtext\}!")
SetGadgetTextEx(2, "{c:64,128,255}{cb:255,128,64}{f:2}\{Die\} \{Klammern\} funktionieren auch!")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
EndIf