Color bei DATA

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Blitzkrieg Bop

Betreff: Color bei DATA

BeitragSo, Okt 17, 2004 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin Moin.
Ehm, ich habe ne Frage:
In einer Funktion, werden per DATA/READ Strings, aus einem Data Feld gelesen. Hier ein mal ein lauffähiges Beispiel:
Code: [AUSKLAPPEN]

Graphics 640,480
SetBuffer BackBuffer()

Global test_anz = 2

Dim test$(test_anz)

For i = 1 To test_anz
   Read test$(i)
Next    

Repeat
Cls
   
For i = 1 To test_anz
   Text GraphicsWidth()/2,GraphicsHeight()/2-120 + (i*80),test$(i),1,1
Next
   
Flip
Until KeyHit(1):End

Data "Test1","Test2"


OK. Nun meine Frage: Wie schaffe ich es, die Color der beiden Strings Test1 und Test2 zu bestimmen? Test1 soll z.B rot und Test2 soll z.B grün.
Ich habe schon versucht, dem DATA Befehl ne Funktion vorzuschalten, wo man halt die Farbe wählen kann, aber das hat auch nicht hingehaut, weil man DATA ja auch nich in Funktionen aufrufen kann. Hm, viell weiß da jemand was!

MFG
~ Hey Ho Let's Go ~

Hubsi

BeitragSo, Okt 17, 2004 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Häng die Farbe an den String als Hexfarbe einfach an:Code: [AUSKLAPPEN]
Data "test#aabbcc", ...
dann extrahierst Du die Farbe aus dem String:Code: [AUSKLAPPEN]
color$=mid$(string$,instr(string,"#")+1)
und schließlich jagst Du die Werte durch diese Function (nicht von mir, weiß aber leider den Author nicht mehr):Code: [AUSKLAPPEN]
Function HexToInt%(inhex$)
  Local outint%,faktor%,i%,zeichen$,wert%,laenge%
  inhex$ = Upper(inhex$)
  laenge% = Len(inhex$)
  faktor% = 1
  For i% = 0 To laenge%-1
    zeichen$ = Mid(inhex$, laenge%-i%,1)
    If (zeichen$>="0") And (zeichen$<="9") Then
      wert% = Int(zeichen$)
    Else
      wert% = Asc(zeichen$)-55
    EndIf
    outint% = outint% + faktor% * wert%
    faktor% = faktor% * 16
  Next
  Return outint%
End Function
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

feider

ehemals "Decelion"

BeitragSo, Okt 17, 2004 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 640,480
SetBuffer BackBuffer()

Global test_anz = 2

Dim test$(test_anz, 4)

For i = 1 To test_anz
   Read test$(i, 2) ; Rotwert
   Read test$(i, 3) ; Grünwert
   Read test$(i, 4) ; Blauwert
   Read test$(i, 1)
Next     

Repeat
Cls
   
For i = 1 To test_anz
   color test(i,2), test(i, 3), test(i, 4) ; Farbe mit color zuweisen
   Text GraphicsWidth()/2,GraphicsHeight()/2-120 + (i*80),test$(i, 1),1,1
Next
   
Flip
Until KeyHit(1):End

data 255, 0 ; Rotwert
data 0, 255 ; Grünwert
data 0, 0    ; Blauwert
Data "Test1","Test2"


Du musst für jeden Farbwert einen Platz im Array schaffen, diesen dann einlesen lassen und schliesslich die Farbe vor der Ausgabe in color angeben.

Edit: MIST! Zu spät!
 

Apocalyptic

BeitragSo, Okt 17, 2004 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
@Hubsi

Code: [AUSKLAPPEN]
color$=right$(string$,len(string$)-instr(string,"#"))


So dürfte das auch funktionieren

EDIT: Ups, hab den optionalen Parameter von mid gar nicht gekannt Embarassed
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]
 

Blitzkrieg Bop

BeitragSo, Okt 17, 2004 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Wow, gleich so coole Antworten. 8)
@Hubsi:
Leider hab ich im mom noch Probs damit.
Also ich glaube ich schaffe es, bis zu Berechnung des Int Wertes. Aber sicher bin ich mir da nicht Confused Hier mal der Source:
Code: [AUSKLAPPEN]

Graphics 640,480
SetBuffer BackBuffer()

Global test_anz = 1

Dim test$(test_anz)
Dim Color$(test_anz)

For i = 1 To test_anz
   Read test$(i)
Next    

Repeat
Cls
   
For i = 1 To test_anz
   ;Text GraphicsWidth()/2,GraphicsHeight()/2-120 + (i*80),test$(i),1,1
Next

For i = 1 To test_anz
   Color$(i) = Mid$(test$(i),Instr(test$(i),"#")+1)
   Text 0,0,"Rausgefundener Hex-Wert: "+Color$(i)
   Text 0,30,"INT-Wert: "+HexToInt%(Color$(i))
Next    
   
Flip
Until KeyHit(1):End

Function HexToInt%(inhex$)
  Local outint%,faktor%,i%,zeichen$,wert%,laenge%
  inhex$ = Upper(inhex$)
  laenge% = Len(inhex$)
  faktor% = 1
  For i% = 0 To laenge%-1
    zeichen$ = Mid(inhex$, laenge%-i%,1)
    If (zeichen$>="0") And (zeichen$<="9") Then
      wert% = Int(zeichen$)
    Else
      wert% = Asc(zeichen$)-55
    EndIf
    outint% = outint% + faktor% * wert%
    faktor% = faktor% * 16
  Next
  Return outint%
End Function 

Data "Test1#FF0000"


Er zeigt mir ja 2 Werte an, aber ob das so stimmt... Smile
Wenn ja, was genau muss ich nun mit dem Wert anstellen, da steh ich wohl auf dem Schlauch Very Happy
~ Hey Ho Let's Go ~

Hubsi

BeitragSo, Okt 17, 2004 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Function will den Hexwert vorgekaut haben:Code: [AUSKLAPPEN]
r=HexToInt(Left$(color$(i),2))
g=HexToInt(Mid$(color$(i),3,2))
b=HexToInt(Mid$(color$(i),5))
Ungetestet, sollte aber schon funzen Smile
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Edlothiol

BeitragSo, Okt 17, 2004 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Sollte auch so gehen:Code: [AUSKLAPPEN]
rgb = HexToInt(Color$(i))
Color 0,0,rgb
in etwa.
 

Blitzkrieg Bop

BeitragSo, Okt 17, 2004 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Jau cool, r,g,b werden richtig berechnet.
Doch nun noch eine letzte Frage: Ist die Idee mit dem Color$ Array ein Muss? Weil wenn ich nun die Farbe setzen will, Color r,g,b dann meckert er an dem Color rum. Hier mal der ganze Source, der nun gehen sollte, halt bis auf das Color r,g,b:
Code: [AUSKLAPPEN]

Graphics 640,480
SetBuffer BackBuffer()

Global test_anz = 1

Dim test$(test_anz)
Dim Color$(test_anz)

For i = 1 To test_anz
   Read test$(i)
Next    

Repeat
Cls
   
For i = 1 To test_anz
   Color$(i) = Mid$(test$(i),Instr(test$(i),"#")+1)
   r=HexToInt(Left$(Color$(i),2))
   g=HexToInt(Mid$(Color$(i),3,2))
   b=HexToInt(Mid$(Color$(i),5))
   Color r,g,b
    Text GraphicsWidth()/2,GraphicsHeight()/2-120 + (i*80),test$(i),1,1
Next    
   
Flip
Until KeyHit(1):End

Function HexToInt%(inhex$)
  Local outint%,faktor%,i%,zeichen$,wert%,laenge%
  inhex$ = Upper(inhex$)
  laenge% = Len(inhex$)
  faktor% = 1
  For i% = 0 To laenge%-1
    zeichen$ = Mid(inhex$, laenge%-i%,1)
    If (zeichen$>="0") And (zeichen$<="9") Then
      wert% = Int(zeichen$)
    Else
      wert% = Asc(zeichen$)-55
    EndIf
    outint% = outint% + faktor% * wert%
    faktor% = faktor% * 16
  Next
  Return outint%
End Function 

Data "Test1#FF0000"


Edit1: Ach, ups Embarassed Klar das es Probleme gibt mit dem Color. Hab einfach das Array umbenannt Very Happy
Mit der Farbe funzt jetzt.
Nun muss noch ne Kleinigkeit geändert werden und dann poste ich nochmal alles Smile

Edit2: Ja, Edlothiol, es geht.
~ Hey Ho Let's Go ~
  • Zuletzt bearbeitet von Blitzkrieg Bop am So, Okt 17, 2004 16:56, insgesamt einmal bearbeitet

Hubsi

BeitragSo, Okt 17, 2004 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist ja auch klar. Color ist ein Befehl. Du kannst den ja nicht einmal als Variable und dann wieder als Befehl nutzen Wink Ändere das Color$ in col$ oder was weiß ich. Es muß auch nicht zwingend ein Array sein, das überlass ich ganz Dir. Ich habs nur als Beispiel verwendet, weil Du es ja in Deinem gepostetem Code bereits so hattest Razz
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Edlothiol

BeitragSo, Okt 17, 2004 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Benenn das Array um. Ich würde das HexToInt übrigens nicht in die Hauptschleife packen, sondern es so machen:Code: [AUSKLAPPEN]
Dim Col(test_anz)

For i = 1 To test_anz
   Read test$(i)
   Col(i) = HexToInt(Mid$(test$(i),Instr(test$(i),"#")+1))
Next 
undCode: [AUSKLAPPEN]
For i = 1 To test_anz

   Color 0,0,Col(i)
    Text GraphicsWidth()/2,GraphicsHeight()/2-120 + (i*80),test$(i),1,1
Next 
 

Blitzkrieg Bop

BeitragSo, Okt 17, 2004 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, wie oben editiert - hab das Array falsch benannt Rolling Eyes
Und ja, Edlothiol , so werde ich es auch machen. Der ganze Code hier ist ja nur nen Sample.
~ Hey Ho Let's Go ~
 

Blitzkrieg Bop

BeitragSo, Okt 17, 2004 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
So, hier nun der komplette, funktionierende Code.
Ich habe ne Bearbeitung der DATA Strings hinzugefügt, damit einem nicht noch die Hexzahl mit als String ausgegeben wird, sondern nur der String an sich.:

Code: [AUSKLAPPEN]

Graphics 640,480
SetBuffer BackBuffer()

Global test_anz = 4

Dim test$(test_anz)
Dim Color_test(test_anz)

For i = 1 To test_anz
   Read test$(i)
   Color_test(i) = HexToInt(Mid$(test$(i),Instr(test$(i),"#")+1))
Next

Repeat
Cls
   
For i = 1 To test_anz
   Color 0,0,color_Test(i)
    Text GraphicsWidth()/2,GraphicsHeight()/2-200 + (i*80),Mid(test(i),1,Instr(test(i),"#")-1),1,1
Next    
   
Flip
Until KeyHit(1):End

Function HexToInt%(inhex$)
  Local outint%,faktor%,i%,zeichen$,wert%,laenge%
  inhex$ = Upper(inhex$)
  laenge% = Len(inhex$)
  faktor% = 1
  For i% = 0 To laenge%-1
    zeichen$ = Mid(inhex$, laenge%-i%,1)
    If (zeichen$>="0") And (zeichen$<="9") Then
      wert% = Int(zeichen$)
    Else
      wert% = Asc(zeichen$)-55
    EndIf
    outint% = outint% + faktor% * wert%
    faktor% = faktor% * 16
  Next
  Return outint%
End Function 

Data "Test1#FF0000","Test2#FFFF00","Test3#FFFFFF","Test4#006600"



Danke nochmal, an die, die mir geholfen haben. Smile
~ Hey Ho Let's Go ~
  • Zuletzt bearbeitet von Blitzkrieg Bop am So, Okt 17, 2004 17:18, insgesamt einmal bearbeitet
 

Edlothiol

BeitragSo, Okt 17, 2004 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt nur noch das $ vor Color_test weg, das ist nämlich nicht nötig - der Farbwert wird ja als Zahl gespeichert.
 

Blitzkrieg Bop

BeitragSo, Okt 17, 2004 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup, ist unnütz und deshalb editiert.
~ Hey Ho Let's Go ~

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group