Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Stringgrid selected ändert Farbe (https://www.delphipraxis.net/213124-stringgrid-selected-aendert-farbe.html)

ratmalwer 31. Mai 2023 20:16

Stringgrid selected ändert Farbe
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo

ich ändere die Farbe der fixierten Zeile 0 nach Rot.
Danach ändert sich die Farbe der ersten selektierten Zelle auf violett.
Siehe Printscreen!
Wie krieg ich das los?

Code:
//DefaultDrawing := true;  //Info
//goRowSelect := true;

procedure TFormMain.SG1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
      if ARow = 0 then begin
        sg1.Canvas.Brush.Color := clred;
        sg1.Canvas.fillrect(Rect);
        sg1.Canvas.textout(rect.left+5,rect.top+2,SG1.Cells[aCol,aRow]);
      end;
end;

zeras 31. Mai 2023 21:16

AW: Stringgrid selected ändert Farbe
 
Bei Options gibt es die Eigenschaft "goRowSelect". Diese kannst du setzen. Dann wird die ganze Zeile markiert.
Vielleicht hilft das.

ratmalwer 31. Mai 2023 21:47

AW: Stringgrid selected ändert Farbe
 
Danke Matthias

in meinem Code habe ich oben in der Info geschrieben, dass GoRowSelect = true ist.
Das wars noch nicht.

Uwe Raabe 31. Mai 2023 23:03

AW: Stringgrid selected ändert Farbe
 
Vielleicht merkst du dir die Brush.Color und stellst sie nach dem Zeichnen wieder her.

ratmalwer 31. Mai 2023 23:15

AW: Stringgrid selected ändert Farbe
 
Danke Uwe

einfache Lösungen brauchen Zeit und liebe Mithilfe :-)

Code:
procedure TFormMain.SG1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var oldColor : Tcolor;
begin
      if ARow = 0 then begin
        oldColor := SG1.Canvas.Brush.Color;
        sg1.Canvas.Brush.Color := clActiveCaption;
        sg1.Canvas.Brush.Color := clred;
        sg1.Canvas.fillrect(Rect);
        sg1.Canvas.textout(rect.left+5,rect.top+2,SG1.Cells[aCol,aRow]);
        sg1.Canvas.Brush.Color := oldColor;
      end;
end;

himitsu 31. Mai 2023 23:48

AW: Stringgrid selected ändert Farbe
 
Warum Brush.Color zwei Mal setzen?




Gut, hier wird nur eine Eigenschaft geändert, aber so zur Info: es gibt auch Delphi-Referenz durchsuchenTRecall und seine Nachfahren, wie z.B. Delphi-Referenz durchsuchenTBrushRecall.

Delphi-Quellcode:
  BR := TBrushRecall.Create(Canvas.Brush);
  try
    ... sonstwas im Brush ändern
  finally
    BR.Free; // danach ist der Brush wieder wie vorher
  end;
Kann pinzipiell für alle TPersistent-Nachfahren verwendet werden, welche die Assign-Methode ausreichend implementiert haben.

Schade, dass es das nicht als Combi für TCanvas gibt, also inkl. Pen, Brush und Font (die es alle einzeln gibt).

Renate Schaaf 1. Jun 2023 01:55

AW: Stringgrid selected ändert Farbe
 
@ratmalwer

Dein Musikgeschmack gefällt mir:)

Blup 4. Jun 2023 17:43

AW: Stringgrid selected ändert Farbe
 
Wenn man nicht jede Änderung am Canvas einzeln zurücknehmen möchte:
Delphi-Quellcode:
procedure DrawCell(ACanvas: TCanvas; ARect: TRect; AColor: TColor; AText: string);
begin
  ACanvas.Brush.Color := AColor;
  ACanvas.TextRect(ARect, ARect.Left + 5, ARect.Top + 2, AText);
end;

procedure TFormMain.SG1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  SaveIndex: Integer;
begin
  if ARow = 0 then
  begin
    SaveIndex := SaveDC(SG1.Canvas.Handle);
    try
      DrawCell(SG1.Canvas, ARect, clRed, SG1.Cells[ACol, ARow]);
    finally
      RestorDC(SG1.Canvas.Handle, SaveIndex);
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:14 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