![]() |
Stringgrid: mehrfarbige Strings in einer Zelle?
Hi,
ist es möglich, in einer Zelle eines Stringgrids einen "bunten String" darzustellen? Als Beispiel soll in Zelle (1,1) "Hallo" stehen. Wie man den gesamten Text einfärbt, ist mir klar. Bei meinen Versuchen, einzelne Buchstaben einzufärben, erhalte ich jedoch böse Fehlermeldungen. Vielen Dank für Eure Hilfe! Ciao Mutier |
Re: Stringgrid: mehrfarbige Strings in einer Zelle?
Da die Elemente des StringGrids Strings sind, ist das von dir angestrebte so nicht möglich.
|
Re: Stringgrid: mehrfarbige Strings in einer Zelle?
Nabend :)
Zitat:
LG Mario |
Re: Stringgrid: mehrfarbige Strings in einer Zelle?
so vielleicht? (mal fix zusammengeschustert)
Delphi-Quellcode:
HTH Frank
procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer; begin for i:=0 to stringgrid1.colcount-1 do begin for j:=0 to stringgrid1.rowcount-1 do begin stringgrid1.cells[i,j]:='('+IntToStr(i)+'-'+IntToStr(j)+')'; end; end; randomize; end; procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer; Rect: TRect; State: TGridDrawState); var i,p,r:integer; s:string; begin s:=stringgrid1.cells[col,row]; p:=rect.left+4; stringgrid1.canvas.FillRect(rect); for i:=1 to length(s) do begin r:=random($FFFFFF); with stringgrid1.Canvas do begin Font.Color:=r; textout(p,rect.top+4,s[i]); p:=p+textwidth(s[i]); end; end; end; |
Re: Stringgrid: mehrfarbige Strings in einer Zelle?
Hi _Frank_,
thx für die Antwort. Ganz ähnlich hatte ich es auch gemacht. Allerdings beinhalten meine Strings bereits die Farbcodes als Steuerzeichen, die ich dann entsprechend auswerte. Dabei habe ich mich jedoch kräftig vertan und die Compiler-Fehlermeldung falsch interpretiert. Entweder hatte ich viel zu viel Kaffee oder viel zu wenig... Jetzt bin ich froh, dass mein prinzipielles Herangehen richtig war und gleichzeitig peinlich berührt, weil ich bei 'ner simplen String-Operation richtig daneben gegriffen hab... :dp: Grüße Mutier |
Re: Stringgrid: mehrfarbige Strings in einer Zelle?
welche steuerzeichen nimmst du für die farbcodierung?
Kannst du evtl. den code posten, wenn er funktioniert? Ich denke es gibt evtl. noch andere die sowas interessiert... Gruß Frank |
Re: Stringgrid: mehrfarbige Strings in einer Zelle?
Hi,
ich habe für ein Rennspiel (Live For Speed) ein kleines Tool programmiert, das parallel zum Spiel läuft und ein paar Fahrzeugdaten und Zeitentabellen ausgibt. In diesem Spiel kann man den Spielernamen mit '^0' bis '^9' einfärben, wovon viele Fahrer Gebrauch machen, um u.a. Team-Zugehörigkeiten aufzuzeigen. Außerdem werden mit anderen '^'-Codes u.a. Codepages umgestellt. Früher habe ich die Farbcodes einfach rausgefiltert, sodass die Namen einfarbig dargestellt worden sind. Beispiel: Der Speielername lautet ^1M^2u^3t^4i^5e^6r. Früher habe ich den Namen als Mutier ausgegeben, jetzt siehts halt so aus: Mutier. Ciao Mutier |
Re: Stringgrid: mehrfarbige Strings in einer Zelle?
stelle es in ein drawgrid dar!
musst nur nen array 2D artiger weise im hintergrund mit den daten haben und dann ondraw cell die sache selber zeichnen und da kannst dann deinen text parsen und bunt anzeigen die gleiche variante hab ich in meinem miniAdmin verwendet (cod rcon tool) zu finden auf ![]() mein ondraw code auszug:
Delphi-Quellcode:
//---------
txt := Tstatusinfoaddonitem(Tstatusinfoaddon(Tserver(servers[selectedserver]).statusinfoaddon).items[arow-1]).name; if ansicontainsstr(txt,'^') then begin pixelcount := rect.left +2; for i := 1 to length(txt) do begin if i > 1 then if txt[i-1] = '^' then begin if i <= length(txt) then begin case strtointdef(txt[i],-1) of 0: playergrid.Canvas.Font.Color := clblack; 1: playergrid.Canvas.Font.Color := $000000D2; 2: playergrid.Canvas.Font.Color := $00509F00; 3: playergrid.Canvas.Font.Color := $0003B7C0; 4: playergrid.Canvas.Font.Color := clblue; 5: playergrid.Canvas.Font.Color := $00D2D200; 6: playergrid.Canvas.Font.Color := clfuchsia; 7: playergrid.Canvas.Font.Color := clwhite; 8: playergrid.Canvas.Font.Color := $00408000; 9: playergrid.Canvas.Font.Color := clgray; end; end else playergrid.Canvas.Font.Color := clWindowText; end; davorok := false; if i = 1 then davorok := true; if i > 1 then if txt[i-1] <> '^' then davorok := true; if (txt[i] <> '^') and davorok then begin playergrid.Canvas.TextOut(pixelcount,rect.top+2,txt[i]); pixelcount := pixelcount + playergrid.Canvas.TextWidth(txt[i])+1; end; end; end else begin playergrid.Canvas.TextOut(rect.Left+2,rect.top+1,txt); end; //--------- |
Re: Stringgrid: mehrfarbige Strings in einer Zelle?
Hi,
für meine Zwecke ist ein Stringgrid besser geeignet, da ich neben den Fahrernamen auch noch Positionen, Rundenzahlen, Zwischenzeiten, Zeitdifferenzen etc. darstellen muss. Ciao Mutier |
Re: Stringgrid: mehrfarbige Strings in einer Zelle?
naja die paar spalten mehr machen den bock nicht fett - wie gesagt - 2dim array oder ähnliches und fertig ist der käse. mit einem stringgrid haste da mehr aufwand glaube ich.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz