Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi canvas.fillrect(rect); funktioniert nicht. (https://www.delphipraxis.net/67290-canvas-fillrect-rect-%3B-funktioniert-nicht.html)

anarkids 12. Apr 2006 14:47


canvas.fillrect(rect); funktioniert nicht.
 
Moin!

Man sieht ja öfters hier im Forum, dass jemand gern wissen würde, wie man eine bestimmte Zelle eines Stringgrids einfärbt. Dabei kommt dann oft sowas hier raus:
Delphi-Quellcode:
var matrix : array [0..17,0..7] of boolean;

procedure TForm1.stringgrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  if matrix[acol,arow] = false then
    matrix[acol,arow] := true
  else matrix[acol,arow] := false;
end;

procedure TForm1.stringgrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
case matrix[acol,arow] of
    false: stringgrid1.Canvas.brush.color:= clblack;
    true : stringgrid1.Canvas.brush.color:= clred;
  end;
  stringgrid1.Canvas.fillrect(rect); //genau das funktioniert bei mir nicht
end;
Aus irgendeinem Grund funktioniert der oben auskommentierte Befehl nicht. Ich bekomme so eine Fehlermeldung:
Es gibt keine überladene Version von 'Rect', die man mit diesen Argumenten aufrufen kann.

mfg...

Kroko1999 12. Apr 2006 14:51

Re: canvas.fillrect(rect); funktioniert nicht.
 
Delphi-Quellcode:
var matrix : array [0..17,0..7] of boolean;

procedure TForm1.stringgrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  //besser
  matrix[acol,arow] := not matrix[acol,arow];
end;

procedure TForm1.stringgrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  ARect: TRect; State: TGridDrawState);
begin
  //besser
  if matrix[acol,arow] then Stringgrid1.Canvas.brush.color:= clred
                       else stringgrid1.Canvas.brush.color:= clblack;
  stringgrid1.Canvas.fillrect(Arect); //genau das sollte jetzt klappen
end;

anarkids 13. Apr 2006 08:37

Re: canvas.fillrect(rect); funktioniert nicht.
 
hi und guten morgen,

danke für die antwort, aber wie rufe ich diese procedures jetzt auf?

mfg,
anarkids :dance:

Luckie 13. Apr 2006 08:44

Re: canvas.fillrect(rect); funktioniert nicht.
 
Im OI doppelt in das Ereignis klicken, Delphi erstellt den Prozedurrumpf selber und wenn OwnerDraw auf true steht wird sie automatisch aufgerufen, wenn das Grid neugezeichnet werden muss.

anarkids 13. Apr 2006 09:26

Re: canvas.fillrect(rect); funktioniert nicht.
 
danke für die schnelle antwort Lucky!

Nun bekomme ich allerdings eine Exception.

Luckie 13. Apr 2006 09:33

Re: canvas.fillrect(rect); funktioniert nicht.
 
Wer ist Lucky?

Zitat:

Zitat von anarkids
Nun bekomme ich allerdings eine Exception.

Ah ja. Und nun? Ohne eine nähere Beschreibung, wo und warum du sie bekommst kann man dir wohl nicht helfen.

Kroko1999 13. Apr 2006 09:33

Re: canvas.fillrect(rect); funktioniert nicht.
 
:? Glaskugel kaputt :? Welche :?:

anarkids 13. Apr 2006 09:37

Re: canvas.fillrect(rect); funktioniert nicht.
 
okai sorry.

Im Projekt Monit.exe ist eine Exception der Klasse EReadError mit der Meldung 'Ungültiger Eigenschaftswert' aufgetreten.

*grummel* Hab alles so übernommen, wie's mir vorgeschlagen wurde :)

Kroko1999 13. Apr 2006 09:38

Re: canvas.fillrect(rect); funktioniert nicht.
 
in welcher Zeile :?:

anarkids 13. Apr 2006 09:42

Re: canvas.fillrect(rect); funktioniert nicht.
 
also direkt bei der Benachrichtigung über die Debugger-Exception steht nix von ner Zeile.

Wenn ich auf Anhalten klicke, dann wird Zeile 14 von Monit.exe markiert: Application.Run;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 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 by Thomas Breitkreuz