![]() |
Re: StringGrid: Zellen-Farbe bei Click ändern
Ich würde jeder Zelle ein TObject mit den wichtigen Eigenschaften als Record verpassen und diese dann in OnDrawCell auswerten.
|
Re: StringGrid: Zellen-Farbe bei Click ändern
Hallo,
falls Du StringGrid.Objects noch nicht anderweitig verwendest, wäre das folgende denkbar:
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); const SelColor = ClRed; begin with TStringGrid(Sender), Canvas do begin if Integer(Objects[aCol,ARow]) = 1 then Brush.Color := FocusedColor else Brush.Color := Color; FillRect(Rect); TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]); end; end; procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ACol,ARow : Integer; begin with TStringGrid(Sender), Canvas do begin MouseToCell(X,Y,ACol,ARow); Objects[ACol,ARow] := Pointer(Integer(Objects[ACol,ARow]) xor 1); end; end; |
Re: StringGrid: Zellen-Farbe bei Click ändern
Hallo
und vielen Dank! hab deinen Code etwas angepasst und so funktionierts bestens:
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); const SelColor = ClRed; begin with TStringGrid(Sender), Canvas do begin If gdFixed in state then exit; If Integer(Objects[aCol,ARow]) = 1 then Brush.Color := SelColor else Brush.Color := Color; FillRect(Rect); end; end; |
Re: StringGrid: Zellen-Farbe bei Click ändern
Zitat:
|
Re: StringGrid: Zellen-Farbe bei Click ändern
Zitat:
ich muss gestehen - ich hab bisher nichts mit Objects zu tun gehabt |
Re: StringGrid: Zellen-Farbe bei Click ändern
Man kann zu jeder Zelle eine Klasseninstanz abspeichern. Diese kann man mit .Objects adressieren
|
Re: StringGrid: Zellen-Farbe bei Click ändern
hallo,
Zitat:
Zitat:
|
Re: StringGrid: Zellen-Farbe bei Click ändern
Das hier hat sich überschnitten mit meinem Posting :
Zitat:
Zitat:
Würde das ganze so aufbauen :
Delphi-Quellcode:
Das ist je nach Anwendung lediglich die Spitze des Eisbergs. :cat:
procedure Tfrm.AddAusgObject(ACol, ARow : integer); // protected
var AusgObject : TAusgObject; begin AusgObject := TAusgObject.Create; ... AusgObject.Color := clWhite; // Standardwert ... sgNr.Objects[ACol, ARow] := AusgObject; ObjektZaehler := ObjektZaehler + 1; // Abgleich Anzahl createter TObjects end; Edit :
Delphi-Quellcode:
So ungefähr sieht der Typ (abgekürzt) aus. Automatisch geht da nicht viel. Es ist Programmierung gefragt. :duck:
TAusgObject = class(TObject)
D : boolean; // später Auswertung, ob Anzeige als real erfolgt // und ein Hinweis in der Zelle erscheint Color : TColor; P : PTyp; constructor Create; destructor Destroy; end; |
Re: StringGrid: Zellen-Farbe bei Click ändern
Hallo Hansa,
ich versteh was du machen willst damit, aber findest du nicht, dass das etwas overload ist, um nur eine Farbe zu ändern? Ich mein, ich stell mit dem StringGrid nichts anderes an, als dass ich auf leere Zellen klicke und diese farbig markiere. Kein Text, kein sonstiges |
Re: StringGrid: Zellen-Farbe bei Click ändern
Hallo,
TColor ist ein Integer. Also kann man direkt mit
Delphi-Quellcode:
eine Farbe in Objects speichern und mit
Objects[ACol,ARow] := Pointer(clRed);
Delphi-Quellcode:
wieder auslesen.
Color := Integer(Objects[ACol,ARow]);
Alle Objects des StringGrids werden mit Pointer(0) bei der Erzeugung initialisiert. Vorteilhaft ist es beim Start der Anwendung in FormCreate allen Objects Pointer(StringGrid.Color) zuweisen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 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