AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fragen zum Färben einer Stringgrid-Zeile

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

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#5

AW: Fragen zum Färben einer Stringgrid-Zeile

  Alt 20. Apr 2015, 22:04
Nja, er hatte Glück, daß es zufällig fast funktiniert.

Genauso darf man gerne verkehrtrum auf der falschen Spur über die Autobahn rauschen.
Selbst wenn man dabei mit 120 km/h rückwärts fährt, bleibt es dennoch falsch und man darf sowas einfach nicht machen.

Also besser jetzt gleich ausmärtzen und es richtig machen, bevor es sich noch einbürgert.

In 20 Jahren schreibt er vielleicht mal die Firmware für die Herzlungenmaschine, an der ich später hänge und dann möchte ich nicht, daß sich darin grob fahrlässiger Code befindet.
Genauso hätte man es viel früher rigeros durchsetzen sollen, daß Programme nicht in ihr Programmverzeichnis schreiben.




Das mit den Fingern gilt nur für böse globale Variablen, if B = true then , leere Try-Except-Blöcke und Dergleichen.
Der Rest ist zwar dennoch falsch, aber das kann ja mal passieren und lässt sich reparieren.

DrawCell zeichnet nunmal nur die eine Zelle, für die der Aufruf gilt
und bei späteren Aufrufen sollte genau das selbe Verhalten erhalten bleiben, um bei eventuellen Repaints die Anzeige wiederherstellen zu können.

Delphi-Quellcode:
procedure TForm3.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if {(ClickedRow <> -1) and } (ClickedRow = ARow) then
    StringGrid1.Canvas.Brush.Color := clGreen
  else
    StringGrid1.Canvas.Brush.Color := clWhite;
  StringGrid1.Canvas.FillRect(Rect);
  StringGrid1.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+5, StringGrid1.Cells[ACol, ARow]);
end;


// Wenn die Zeile markiert werden soll, dann
ClickedRow := StringGrid1.Row;
StringGrid1.Invalidate; // oder StringGrid1.Repaint;

// und später, wenn die Bearbeitung fertig ist, wieder auf -1 setzen.

PS: Viele Komponenten besitzen Eigenschaften wie RowSelect und/oder HideSelection, um ein vergleichbares und vorallem einheitliches Standardverhalten hinzubekommen.



Bei vielen "ordentlichen" Grid-Komponenten kann man auch Folgendes machen, wo einfach nur die Hintergrundfarbe für das nachfolgende DefaultDrawing gesetzt wird.
Leider sind die delphieigenen Grids echt bescheiden. (in Delphi wirkt sich das nur auf den FocusRect aus)
So muß man hier auch noch den State manuell behandeln, weil hier nur "entweder" alles selber oder automatisch (Defaultverhalten) funktioniert.
Delphi-Quellcode:
// mit DefaultDrawing=True
procedure TForm3.StringGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas: ACol, ARow: Integer; ARect: TRect; AValue: string; AState: TGridDrawState);
begin
  if {(ClickedRow <> -1) and } (ClickedRow = ARow) then
    ACanvas.Brush.Color := clGreen;
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (20. Apr 2015 um 22:16 Uhr)
  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 18:36 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