AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Stringgrid: mehrfarbige Strings in einer Zelle?
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid: mehrfarbige Strings in einer Zelle?

Ein Thema von Mutier · begonnen am 17. Aug 2006 · letzter Beitrag vom 18. Aug 2006
Antwort Antwort
Mutier

Registriert seit: 22. Jul 2006
20 Beiträge
 
#1

Stringgrid: mehrfarbige Strings in einer Zelle?

  Alt 17. Aug 2006, 22:45
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Stringgrid: mehrfarbige Strings in einer Zelle?

  Alt 17. Aug 2006, 22:47
Da die Elemente des StringGrids Strings sind, ist das von dir angestrebte so nicht möglich.
Markus Kinzler
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#3

Re: Stringgrid: mehrfarbige Strings in einer Zelle?

  Alt 17. Aug 2006, 23:41
Nabend
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
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#4

Re: Stringgrid: mehrfarbige Strings in einer Zelle?

  Alt 18. Aug 2006, 00:32
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
  Mit Zitat antworten Zitat
Mutier

Registriert seit: 22. Jul 2006
20 Beiträge
 
#5

Re: Stringgrid: mehrfarbige Strings in einer Zelle?

  Alt 18. Aug 2006, 10:10
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...

Grüße
Mutier
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#6

Re: Stringgrid: mehrfarbige Strings in einer Zelle?

  Alt 18. Aug 2006, 13:16
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
  Mit Zitat antworten Zitat
Mutier

Registriert seit: 22. Jul 2006
20 Beiträge
 
#7

Re: Stringgrid: mehrfarbige Strings in einer Zelle?

  Alt 18. Aug 2006, 14:34
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
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Stringgrid: mehrfarbige Strings in einer Zelle?

  Alt 18. Aug 2006, 15:13
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;

    //---------
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Mutier

Registriert seit: 22. Jul 2006
20 Beiträge
 
#9

Re: Stringgrid: mehrfarbige Strings in einer Zelle?

  Alt 18. Aug 2006, 17:05
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
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Stringgrid: mehrfarbige Strings in einer Zelle?

  Alt 18. Aug 2006, 17:50
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.
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz