AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fragen zum Färben einer Stringgrid-Zeile

Ein Thema von stefankr · begonnen am 20. Apr 2015 · letzter Beitrag vom 21. Apr 2015
 
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#2

AW: Fragen zum Färben einer Stringgrid-Zeile

  Alt 20. Apr 2015, 20:04
Wenn man einmal auf den Canvas malt, dann ist das nur flüchtig (Ausnahme: Bitmaps). D.h. Du musst immer dann, wenn das Grid neu gezeichnet wird, die entsprechenden Zellen gemäß der gewünschten Logik zeichnen.

Daher solltest Du das OnDrawCell-Event belassen und Dir stattdessen merken, was die letzte doppelt geklickte Zeile war. Die malst Du dann grün, die anderen eben weiß.

Um auch den Selektionsrahmen wegzubekommen ist es das einfachste, die Eigenschaft "Defaultdrawing" des Grids auszuschalten.

So funktioniert es dann:
Delphi-Quellcode:
var
 GridColorCell: boolean = false;
 ClickedRow: Integer = -1;

 //StringGrid1.defaultdrawing im Objectinspector auf false setzen

procedure TForm10.StringGrid1DblClick(Sender: TObject);
begin
   ClickedRow := -1;
   StringGrid1.OnDrawCell := StringGrid1DrawCell;
   GridColorCell := true;
   StringGrid1.Repaint;
   PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
   //Form10.StringGrid1.OnDrawCell := nil;
end;

procedure TForm10.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var i: Integer;
begin
   if GridColorCell then
     begin
     if ClickedRow = -1 then begin
       ClickedRow := Stringgrid1.row;
     end;

     If ClickedRow = ARow then begin
       StringGrid1.Canvas.Brush.Color:=clGreen;
       with StringGrid1 do
       begin
         for i := (ColCount-5) to (ColCount) do
         begin
           Canvas.FillRect(Rect);
           Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+5, Cells[ACol, ClickedRow]);
         end;
       end;
     end else begin
       StringGrid1.Canvas.Brush.Color:=clWhite;
       stringGrid1.Canvas.FillRect(Rect);
       StringGrid1.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+5, Cells[ACol, ARow]);
     end;
   end;
end;
Übrigens solltest Du vermeiden, in dem Event direkt die Variable Stringgrid1 zu verwenden, da der Code sonst nicht mehr verwendbar ist, wenn Du z.B. auch andere Stringgrids in der Form so malen wolltest.

Besser wäre daher:

Delphi-Quellcode:
var
  sg: TStringGrind;
begin
  sg := TStringGrid (Sender);

  with sg do begin
    ....
  end;

Geändert von Harry Stahl (20. Apr 2015 um 21:33 Uhr)
  Mit Zitat antworten Zitat
 


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 11:24 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-2025 by Thomas Breitkreuz