Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StringGrid: Zellen-Farbe bei Click ändern (https://www.delphipraxis.net/85294-stringgrid-zellen-farbe-bei-click-aendern.html)

Hansa 28. Jan 2007 20:42

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.

Lannes 28. Jan 2007 20:45

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;

Helmi 28. Jan 2007 21:00

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;

Hansa 28. Jan 2007 21:00

Re: StringGrid: Zellen-Farbe bei Click ändern
 
Zitat:

Zitat von Lannes
..falls Du StringGrid.Objects noch nicht anderweitig verwendest,
wäre das folgende denkbar...

Inwiefern "anderweitig" ? :shock: Er bräuchte doch nur den eventuell vorhandenen TObject Record um ein Feld, z.B. Farbe zu erweitern und diesen Wert im OnClick dann im Stringgrid.TObject [ACol,ARow] zu setzen. Und fertig. :zwinker:

Helmi 28. Jan 2007 21:11

Re: StringGrid: Zellen-Farbe bei Click ändern
 
Zitat:

Zitat von Hansa
Inwiefern "anderweitig" ? :shock: Er bräuchte doch nur den eventuell vorhandenen TObject Record um ein Feld, z.B. Farbe zu erweitern und diesen Wert im OnClick dann im Stringgrid.TObject [ACol,ARow] zu setzen. Und fertig. :zwinker:

Wie meinst du das Hansa?

ich muss gestehen - ich hab bisher nichts mit Objects zu tun gehabt

mkinzler 28. Jan 2007 21:18

Re: StringGrid: Zellen-Farbe bei Click ändern
 
Man kann zu jeder Zelle eine Klasseninstanz abspeichern. Diese kann man mit .Objects adressieren

Lannes 28. Jan 2007 21:52

Re: StringGrid: Zellen-Farbe bei Click ändern
 
hallo,
Zitat:

Zitat von Hansa
Zitat:

Zitat von Lannes
..falls Du StringGrid.Objects noch nicht anderweitig verwendest,
wäre das folgende denkbar...

Inwiefern "anderweitig" ? :shock:

könnte sein das er z.B. schon einen Record eingehängt hat.
Zitat:

Zitat von Hansa
Er bräuchte doch nur den eventuell vorhandenen TObject Record um ein Feld, z.B. Farbe zu erweitern und diesen Wert im OnClick dann im Stringgrid.TObject [ACol,ARow] zu setzen. Und fertig. :zwinker:

genau :mrgreen:

Hansa 28. Jan 2007 22:47

Re: StringGrid: Zellen-Farbe bei Click ändern
 
Das hier hat sich überschnitten mit meinem Posting :

Zitat:

Zitat von Helmi
hab deinen Code etwas angepasst und so funktionierts bestens:

Nur, wie hängt das hiermit zusammen :

Zitat:

Zitat von Helmi
ich muss gestehen - ich hab bisher nichts mit Objects zu tun gehabt

Dürfte dann wohl nur kurz gehen. :mrgreen:

Würde das ganze so aufbauen :

Delphi-Quellcode:
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;
Das ist je nach Anwendung lediglich die Spitze des Eisbergs. :cat:

Edit :

Delphi-Quellcode:
  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;
So ungefähr sieht der Typ (abgekürzt) aus. Automatisch geht da nicht viel. Es ist Programmierung gefragt. :duck:

Helmi 29. Jan 2007 04:15

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

Lannes 29. Jan 2007 08:02

Re: StringGrid: Zellen-Farbe bei Click ändern
 
Hallo,

TColor ist ein Integer.
Also kann man direkt mit
Delphi-Quellcode:
Objects[ACol,ARow] := Pointer(clRed);
eine Farbe in Objects speichern und mit
Delphi-Quellcode:
Color := Integer(Objects[ACol,ARow]);
wieder auslesen.

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 17:54 Uhr.
Seite 2 von 3     12 3      

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