Color bei DATA
Übersicht

Blitzkrieg BopBetreff: Color bei DATA |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... |
feiderehemals "Decelion" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@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 ![]() |
||
Suum cuique
[ www.ffs-net.de.vu ] [ Raycaster ] |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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... ![]() Wenn ja, was genau muss ich nun mit dem Wert anstellen, da steh ich wohl auf dem Schlauch ![]() |
||
~ Hey Ho Let's Go ~ |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Function will den Hexwert vorgekaut haben:Code: [AUSKLAPPEN] r=HexToInt(Left$(color$(i),2))
Ungetestet, sollte aber schon funzen g=HexToInt(Mid$(color$(i),3,2)) b=HexToInt(Mid$(color$(i),5)) ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sollte auch so gehen:Code: [AUSKLAPPEN] rgb = HexToInt(Color$(i))
in etwa.
Color 0,0,rgb |
||
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() ![]() Mit der Farbe funzt jetzt. Nun muss noch ne Kleinigkeit geändert werden und dann poste ich nochmal alles ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist ja auch klar. Color ist ein Befehl. Du kannst den ja nicht einmal als Variable und dann wieder als Befehl nutzen ![]() ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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)
undCode: [AUSKLAPPEN] For i = 1 To test_anz Read test$(i) Col(i) = HexToInt(Mid$(test$(i),Instr(test$(i),"#")+1)) Next 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, wie oben editiert - hab das Array falsch benannt ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() |
||
~ Hey Ho Let's Go ~ |
- Zuletzt bearbeitet von Blitzkrieg Bop am So, Okt 17, 2004 17:18, insgesamt einmal bearbeitet
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jetzt nur noch das $ vor Color_test weg, das ist nämlich nicht nötig - der Farbwert wird ja als Zahl gespeichert. | ||
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jup, ist unnütz und deshalb editiert. | ||
~ Hey Ho Let's Go ~ |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group