AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringGrid

Ein Thema von Willie1 · begonnen am 9. Apr 2021 · letzter Beitrag vom 13. Apr 2021
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#1

AW: TStringGrid

  Alt 12. Apr 2021, 19:57
Du beschreibst, dass der Fehler nicht auftritt, wenn Du Dich im StringGrid befindest und im StringGrid navigierst.

Deine ursprüngliche Fehlerbeschreibung besagte aber, dass, wenn Du das StringGrid verlässt und dann außerhalb des StringGrids das Mausrad betätigst, der Fehler auftritt.

Die Fehlermeldung lautet da: "Gitterindex außerhalb des gültigen Bereichs"

Dann suche doch bitte diese Fehlermeldung in den Sourcen Deines Delphis.

Bei meinem Delphi 7 ist sie in der Consts.pas der VCL zu finden.

Der Text ist der Konstanten SIndexOutOfRange zugewiesen.

Und nun suche bitte diese Konstante in den Delphiquellen zum StringGrid. Und wo landest Du nun?

Und die Begründung: Wenn ich im StringGrid mit Fokus auf im StringGrid navigiere und es passiert dann kein Fehler, kann auch kein Fehler passieren, wenn das StringGrid keinen Fokus hat und man dann quasi von außerhalb des StringGrids im StringGrid navigiert (was nunmal beim Scrollen per Mausrad passiert, wenn es sich über dem StringGrid befindet), ist etwas zu kurz gegriffen.

Mach Dir 'ne Sicherungskopie der Grids.pas und ändere die von mir oben beschrieben Stelle (z. B. durch einfügen eines Fehlerdialoges) und schau, ob Du den zu sehen bekommt.

Ansonsten einfach mal mit Debug-Dcus kompilieren und im Debugger schauen, wo denn der Fehler ausgelöst wird. Dann wirst Du sehen, ob das die Ursache sein kann oder eben auch nicht.

Oder 'nen eigenen Nachfahren des StringGrids machen und dort nur die Methode MoveCurrent überschreiben, so dass vor dem Aufruf der eigentlichen Methode, der Fehler bereits abgefangen wird.

Z. B. sowas?
Delphi-Quellcode:
procedure TEigenesGustomGrid.MoveCurrent(ACol, ARow: Longint; MoveAnchor, Show: Boolean);
begin
  if not ((ACol < 0) or (ARow < 0) or (ACol >= ColCount) or (ARow >= RowCount)) then inherited;
end;
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TStringGrid

  Alt 12. Apr 2021, 21:46
Naja, wenn man OutOfBounds werte eingibt, landet man auch out of bound.

Wie wäre es hiermit?
Delphi-Quellcode:
procedure TForm7.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  Farbe: TColor;
begin
  Farbe := clWhite;
  if (gdSelected in State) then
  begin
    TStringGrid(Sender).Canvas.Brush.Color := Farbe;
    TStringGrid(Sender).Canvas.FillRect(Rect);
  end;
end;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
698 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: TStringGrid

  Alt 13. Apr 2021, 17:41
Hallo,
das ist so richtig ein Thema für einen Freak wie mich.
Also: das ganze liegt nur an dem blöden Tipp StrGrOnExit s.o., er stammt aus dem an sich guten Delphi-Buch von Doberenz und Kowalski.
Wenn man dieses Event weglässt, ist alles in Ordnung. Ihr müsst euch nur damit abfinden, dass das selektierte Feld sich blau einfärbt, wenn der Fokus gewechselt wird. Falls goDrawFocusSelected = true, bleibt das ausgewählte Feld immer blau. Das ist alles!!!

Im Anhang Bilder, die das zeigen. Willie.

Screenshot-1 StrGr hat den Focus, alles Ok.
-2 hat nicht den Fokus, es gibt den Fehler. (Fehler durch OnExit verursacht)
-3 nicht den Focus, alles Ok.
Angehängte Grafiken
Dateityp: png Screenshot-3.png (81,1 KB, 19x aufgerufen)
Dateityp: png Screenshot-2.png (93,7 KB, 17x aufgerufen)
Dateityp: png Screenshot-1.png (90,3 KB, 17x aufgerufen)
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.

Geändert von Willie1 (13. Apr 2021 um 17:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TStringGrid

  Alt 13. Apr 2021, 18:09
Ihr müsst euch nur damit abfinden, dass das selektierte Feld sich blau einfärbt, wenn der Fokus gewechselt wird. Falls goDrawFocusSelected = true, bleibt das ausgewählte Feld immer blau.
wenn du es mit meinem event machst nicht.

viele grüße und bleib gesund.
Gruß vom KodeZwerg
  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 23:05 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