Thema: Delphi TStringGrid

Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#6

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