AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi StringGrid: Aktion beim Zellenanklicken
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid: Aktion beim Zellenanklicken

Ein Thema von Freaky89 · begonnen am 2. Jun 2006 · letzter Beitrag vom 25. Jan 2007
Antwort Antwort
Freaky89

Registriert seit: 2. Jun 2006
3 Beiträge
 
#1

StringGrid: Aktion beim Zellenanklicken

  Alt 2. Jun 2006, 14:24
Hallo!

Ich würde gerne eine Simulation programmieren und bräuchte dazu vorerst ein Gitterfeld, dass, wenn man ein Feld anklickt, in diesem Feld die Farbe ändert.

Ich hatte es mit StringGrid versucht und dabei bin ich auf das Problem gestoßen, dass ich zwar Zellen durch Canvas.Pixels[x,y]:=TColor; färben kann, aber es nicht schaffe, dass sie sich erst färbt, wenn ich auf die Zelle klicke!

Wenn so eine Aktion nicht möglich ist hat jemand vielleicht eine andere Idee, wie man das realisieren könnte (durch die andere Komponente vielleicht).

LG Freaky
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: StringGrid: Aktion beim Zellenanklicken

  Alt 2. Jun 2006, 15:24
Das lässt sich mit einen StringGrid durchaus lösen.
Jede Zelle des StringGrid muss aber zusätzlich zum Text eine Information (Farbe) tragen.
Diese Info kann man nun im Text der Zelle selbst unter bringen oder im
Property Objects[].

Delphi-Quellcode:
// StringGrid.DefaultDrawing auf False setzen
// OnDrawCell - Handler
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
   celltext:string;
   canvas : TCanvas;
   color : TColor;
begin
   celltext := StringGrid1.Cells[Acol, ARow];
   Canvas := StringGrid1.Canvas;

   if (ACol >= StringGrid1.FixedCols) and (ARow>= StringGrid1.FixedRows) then
   begin
      color := clGreen;
      if celltext = '*then
         color := clRed
   end
   else
      color := clBtnface;

   // Hintergrund zeichnen
   Canvas.Brush.Color := color;
   Canvas.FillRect(Rect);
   // Text ausgeben
   DrawText(Canvas.Handle, PChar(celltext), Length(celltext), Rect, DT_SINGLELINE);
end;
Du brauchst jetzt du die Zellen mit einem '*' zu belegen und sie werden rot.
Andreas
  Mit Zitat antworten Zitat
Freaky89

Registriert seit: 2. Jun 2006
3 Beiträge
 
#3

Re: StringGrid: Aktion beim Zellenanklicken

  Alt 3. Jun 2006, 12:25
Hey,
danke für die Antwort, hat geklappt.

Nur noch ne Frage, damit ich besser versteh wieso das funktioniert..

onDrawCell heißt in meinem Buch, tritt ein, wenn die Zelle neu gezeichnet werden muss, bedeutet dass immer, wenn man was an der Zelle verändert tritt die Aktion ein?

Und wieso fräbt er bei dieser Anweisung nicht die komplette StringGrid, sondern nur die ausgewählte Zelle?

Danke jetzt schon Freaky!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: StringGrid: Aktion beim Zellenanklicken

  Alt 6. Jun 2006, 09:11
Zitat von Freaky89:
onDrawCell heißt in meinem Buch, tritt ein, wenn die Zelle neu gezeichnet werden muss, bedeutet dass immer, wenn man was an der Zelle verändert tritt die Aktion ein?
Das Event OnDrawCell wird "abgefeuert" wenn:
* der Inhalt der Zelle wurde verändert wurde
* Das StringGrid oder Teile davon aufgedeckt werden, nachdem es von einem anderen Fenster verdeckt wurde
* das StringGrid und/oder sein Parent (das Form auf dem es liegt) sichtbar geworden sind.
Zitat von Freaky89:
Und wieso fräbt er bei dieser Anweisung nicht die komplette StringGrid, sondern nur die ausgewählte Zelle?
Weil die Farbe nur auf den aktuellen Canvas angewendet wird (Canvas.Brush.Color := ...) und nicht auf
das gesamte Stringgrid (StringGrid1.Color :=...).
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#5

Re: StringGrid: Aktion beim Zellenanklicken

  Alt 25. Jan 2007, 19:02
Hallo,

ich hätte zu diesem Thema auch ne Frage:

Ich würd gern das gleiche machen, also beim Klick auf eine Zelle diese farbig ändern.

Tests mit OnSelectCell haben leider nichts gebracht.

Hier mein momentaner Code:
Delphi-Quellcode:
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
  r: TRect;

begin
  with StringGrid1 do
    begin
      r := CellRect(ACol, ARow);



      If Canvas.Brush.Color = clBlue then
        Canvas.Brush.Color := clRed
      else
        Canvas.Brush.Color := clNavy;

    Canvas.FrameRect(R);
  end;
end;
Den "TRick" mit eintragen eines Zeichens in die Zelle und dann das decodieren der Farbe der Zelle im OnDrawCell kenn ich, aber ginge das nicht einfach auch mit OnSelectRect?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:51 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