Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Stringgrid: mehrfarbige Strings in einer Zelle? (https://www.delphipraxis.net/75334-stringgrid-mehrfarbige-strings-einer-zelle.html)

Mutier 17. Aug 2006 22:45


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

mkinzler 17. Aug 2006 22:47

Re: Stringgrid: mehrfarbige Strings in einer Zelle?
 
Da die Elemente des StringGrids Strings sind, ist das von dir angestrebte so nicht möglich.

Hobby-Programmierer 17. Aug 2006 23:41

Re: Stringgrid: mehrfarbige Strings in einer Zelle?
 
Nabend :)
Zitat:

Zitat von mkinzler
Da die Elemente des StringGrids Strings sind, ist das von dir angestrebte so nicht möglich.

Gibt bestimmt ne Möglichkeit, vielleicht nicht direkt über das schreiben in die Zelle. Werd mir das heut Nacht mal durch den Kopf gehen lassen.

LG Mario

_frank_ 18. Aug 2006 00:32

Re: Stringgrid: mehrfarbige Strings in einer Zelle?
 
so vielleicht? (mal fix zusammengeschustert)

Delphi-Quellcode:
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;
HTH Frank

Mutier 18. Aug 2006 10:10

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

_frank_ 18. Aug 2006 13:16

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

Mutier 18. Aug 2006 14:34

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

supermuckl 18. Aug 2006 15:13

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 www.xenon-clan.de rechts oben unter rcon miniAdmin
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;

    //---------

Mutier 18. Aug 2006 17:05

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

supermuckl 18. Aug 2006 17:50

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