AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Was ist TGridDrawState

Ein Thema von Martin K · begonnen am 4. Nov 2005 · letzter Beitrag vom 5. Nov 2005
Antwort Antwort
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

Was ist TGridDrawState

  Alt 4. Nov 2005, 16:28
Hi,
ich will nur den Text einer bestimmten Zeile in einem StringGrid in einer anderen Farbe darstellen.

Dazu habe ich bereits folgendes gefunden:
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  StringGrid1.Canvas.Brush.Color:=clGreen;
  StringGrid1.Canvas.FillRect(Rect);
end;
Nun hab ich aber Probleme, wie ich diese Prozedur aufrufen soll.
Habe das hier geschrieben:StringGrid1DrawCell(Form1, StringGrid1.Col, StringGrid1.Row, Rect(0,StringGrid1.Row,StringGrid1.ColCount,0), gdFixed); Allerdings kommt dann diese Fehlermeldung:
Zitat:
[Error] Unit1.pas(69): Incompatible types: 'TGridDrawState' and 'Enumeration'
gdFixed hab ich aus der Delphi-Hilfe.type TGridDrawState = set of (gdSelected, gdFocused, gdFixed); Aber irgendwie funzts nich richtig...
Was muss ich sonst bei TGridDrawState angeben?

Oder wie kann ich sonst die Prozedur aufrufen, um die Textfarbe einer bestimmten Zeile zu ändern?

Vielen Dank schon mal!
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Was ist TGridDrawState

  Alt 4. Nov 2005, 16:38
Die Eckigen Klammern nicht vergessen! Es gibt mehrere Möglichkeiten, ähnlich wie bei Locate, StringReplace usw.
StringGrid1DrawCell(Form1, StringGrid1.Col, StringGrid1.Row, Rect(0,StringGrid1.Row,StringGrid1.ColCount,0), [gdFixed]);
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Textfarbe in einem StringGrid ändern (bestimmter Bereich)

  Alt 4. Nov 2005, 16:44
Ja, danke.
Aber ich hab gerade festgestellt, dass diese Prozedur zum Ändern der Textfarbe absoluter Schwachsinn ist.
Sie ändert nämlich die Farbe im kompletten StringGrid.

Wie kann man denn nur die Textfarbe ändern ?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Textfarbe in einem StringGrid ändern (bestimmter Bereich

  Alt 4. Nov 2005, 16:53
Du hast da etwas falsch verstanden. Diese Prozedur soll ein Eventhandler für TStringGrid.OnDrawCell sein, du musst sie also im OI für das Event auswählen und nicht selbst aufrufen.
Zitat von Martin K:
Wie kann man denn nur die Textfarbe ändern ?
Ich würde es mit Font.Color probieren .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Was ist TGridDrawState

  Alt 4. Nov 2005, 17:01
Ja, ich hab's jetzt auch verstanden.
Ich will aber die Textfarbe nur für bestimmte Zellen ändern, und nicht für's ganze StringGrid !

Also so geht's leider nicht:
Delphi-Quellcode:
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
  StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row]:='test';
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  StringGrid1.Canvas.Font.Color:=clRed;
end;
Wie könnte ich den obigen Code ändern, damit's funzt?

Ich will, dass die Schrift der Zelle, auf die ich geklickt habe (also 'test'), rot wird!
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#6

Textfarbe in einem StringGrid ändern (bestimmter Bereich)

  Alt 4. Nov 2005, 17:24
Hab's jetzt selber rausgefunden, das geht so:
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  If (ACol=5) and (ARow=5) then //für die Zelle 5,5
  begin
    StringGrid1.Canvas.Font.Color:=clRed;
    DrawText(StringGrid1.Canvas.Handle,PChar(StringGrid1.Cells[ACol,ARow]),Length(StringGrid1.Cells[ACol,ARow]),Rect,0);
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#7

Re: Was ist TGridDrawState

  Alt 4. Nov 2005, 18:05
Das sollte aber auch ohne DrawText möglich sein, einfach nur die Fontfarbe verändern (und bei den anderen Zellen wieder auf schwarz stellen).
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Was ist TGridDrawState

  Alt 4. Nov 2005, 18:30
Nein, das geht leider nicht (s. Beitrag #5)

Man könnte höchstens statt DrawText auch StringGrid1.Canvas.TextOut verwenden.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Textfarbe in einem StringGrid ändern (bestimmter Bereich

  Alt 5. Nov 2005, 07:05
Zitat von Martin K:
Hab's jetzt selber rausgefunden, ...
Hai Martin,

ich habe noch zwei Tips für deinen Code.
Zum einen ist der Code leichter zu lesen wenn Du für den Text der aktuelle Zelle eine Hilfsvariable verwendest. Dann musst Du nicht immer mit Cells[ACol,ARow] arbeiten. Aber das ist nur "kosmetik".
Wichtiger ist es die Verwendung von Objektnamen im Quellcode wenn immer möglich zu vermeiden und dafür den Sender der Methode zu verwenden. Wenn Du dein StringGrid einmal umbenennst musst Du auch den Namen in deinem Code ändern. Ausserdem könntest Du bei verwendung des Senders die selbe Methode für verschiedene StringGrids verwenden.

Hier mal ein Beispiel für das was ich meine:
Delphi-Quellcode:
procedure TDemoForm.StringGrid1DrawCell(Sender: TObject; ACol, ARow: integer;
  Rect: TRect; State: TGridDrawState);
var
  celltext: string;
begin
  with (Sender as TStringGrid) do // Sender ist ein TStringGrid
  begin
    celltext := Cells[ACol, ARow]; // Inhalt der aktuelle Zelle

    // Hier beginnt die Farb/Font Zuweisung

    if (ACol = 1) and (ARow = 1) then // Nur für Celle 1:1
    begin
      canvas.Brush.Color := clred; // Hintergrundfarbe
      canvas.Font.Color := clblue; // Schriftfarbe
    end;
    if (ARow = 3) then // Für die dritte Zeile
    begin
      canvas.Font.Style := canvas.Font.Style + [fsBold];
    end;
    if (ACol = 2) and (ARow > 0) then // Die zweite Spalte
    begin
      canvas.Brush.Color := clGreen;
    end;

    // Hier beginnt nun das Zeichnen:

    Canvas.FillRect(Rect); // Hintergrund zeichnen
    DrawText(Canvas.Handle, PChar(celltext), Length(celltext),
      Rect, DT_SINGLELINE); // Textausgeben

    // Optional kann der Text auch Zentriert werden.
    // dann mit diesem Parameter;
    // DT_SINGLELINE or DT_CENTER or DT_VCENTER
    // Für Rechtsbündige Ausgabe
    // DT_SINGLELINE or DT_RIGHT
  end;
end;
Wie Du siehst wird innerhalb der Methode der Name des StringGrids nicht mehr verwendet.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:09 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