Einzelnen Beitrag anzeigen

Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#1

Combobox - Zugriffsverletzung bei Syleänderung im OnChange

  Alt 15. Jan 2021, 11:44
Ich habe einen Fehler, den ich nicht wirklich eingrenzen kann. Vielleicht kann mir jemand einen Tipp geben.

Bei fehlerhaften Eingaben färbe ich gerne die Fläche des Eingabelementes Rot ein. Die Anwendung verwendet Styles, weshalb ich bei Einfärbung das Property StyleElements ändern muss. Das mache ich so:

Delphi-Quellcode:
procedure TFormCbColorTest.ComboBoxTestChange(Sender: TObject);
var
  lValid: Boolean;
  lCombobox:TCombobox;
begin
  lCombobox :=TCombobox(Sender);

  lValid := ComboDataIsValid(lCombobox);

  if lValid then
    begin
      lCombobox.StyleElements := lCombobox.StyleElements + [seClient];
    end
  else
    begin
      lCombobox.StyleElements := lCombobox.StyleElements - [seClient];
      lCombobox.Color := clRed;
    end;
end;
Das Funktioniert auch eigentlich in 99% der Fälle. Aber in manchen Fällen gibt es einen Fehler "Zugriffsverletzung bei Adresse xxxxx in Modul user32.dll. Lesen von Adresse 00000000."

Debuggen klappt nicht wirklich. Der Code geht fehlerfrei durch. Erst bei verlassen der Procedure, nach dem letzten "end" kommt die Fehlermeldung.

Wenn der Fehler in einen Form auftritt, dann tritt er immer in diesem Form auf. Deshalb kann ich es eingrenzen. Ich kann aber kein Beispielprogramm bereit stellen, da in allen Programmen, in dem der Fehler reproduziert werden soll, der Fehler nicht auftritt.

Der Fehler tritt auch nur ein einziges mal auf. Bei der zweiten Änderung der Combobox gibt es keine Fehlermeldung. Erst wenn das Formular geschlossen wird und neu aufgerufen wird, erscheint bei Änderung der Combobox der Fehler.

Vielleich übersehe ich ja was. Gibt es einen Grunde, weshalb ein Style NICHT in einem Event geändert werden sollte?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat