AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Combobox - Zugriffsverletzung bei Syleänderung im OnChange

Combobox - Zugriffsverletzung bei Syleänderung im OnChange

Ein Thema von bernau · begonnen am 15. Jan 2021 · letzter Beitrag vom 15. Jan 2021
Antwort Antwort
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.186 Beiträge
 
Delphi 10.3 Rio
 
#1

Combobox - Zugriffsverletzung bei Syleänderung im OnChange

  Alt 15. Jan 2021, 12: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
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.186 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Combobox - Zugriffsverletzung bei Syleänderung im OnChange

  Alt 15. Jan 2021, 12:55
Folgendes ist mir noch aufgefallen. Wenn ich den Style nicht direkt im OnChange ändere, sondern einen Timer mit 50ms starte, und im TimerEvent den Style ändere, dann kommt der Fehler nicht.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.383 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Combobox - Zugriffsverletzung bei Syleänderung im OnChange

  Alt 15. Jan 2021, 13:04
Man sollte bedenken, dass ein Ändern von StyleElements ein RecreateWnd auslöst. Insofern kann das Entkoppeln dieses Aufrufs schon eine heilende Wirkung haben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 02:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf