Autor Beitrag
UweK
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

Win 7
Delphi Enterprise XE6
BeitragVerfasst: Mi 25.04.18 10:11 
Guten Tag

Ich habe eine verschönerte Komponente TMyEdit = class(TEdit) geschrieben. Diese prüft beim Verlassen in ihrem Ereignis OnExit automatisch, ob der Eingabetext eine korrekte Fließkommazahl darstellt, und färbt widrigenfalls den Eingabetext rot. Von diesem TMyEdit habe ich mehrere Instanzen in meinem Formular. Hier möchte ich im OnExit einer jeden Instanz eine gültige Eingabe automatisch in eine zugehörige Zahlen-Variable schreiben, und für jede ungültige Eingabe eine individuelle Fehlermeldung anzeigen. Jeweils einzeln funktioniert das. Wenn ich den OnExits im Formular aber Prozeduren zuweise, verschwindet leider das ursprünglich in TMyEdit implementierte Verhalten. Da wird wohl das ursprüngliche OnExit durch das neue OnExit nicht ergänzt, sondern ersetzt.

Wie kann ich erreichen, dass beides ausgeführt wird, zuerst das Umfärben (das für jede Instanz das gleiche Verhalten zeigen soll und deshalb am besten in der Komponente liegt), und dann die Variablenzuweisung (die für jede Instanz verschieden ist und deshalb nur im Formular liegen kann)?

Vielen Dank für Tipps.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6317
Erhaltene Danke: 126

Windows 7 + Windows 10
Tokyo Prof + CE
BeitragVerfasst: Mi 25.04.18 10:39 
Das existierende OnExit merken und dann an der richtigen Stelle zusätzlich aufrufen.

Für diesen Beitrag haben gedankt: UweK
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1145
Erhaltene Danke: 79

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: Mi 25.04.18 10:52 
Da es sich ja um eine abgeleitete Komponente handelt hast Du Zugriff auf die als protected deklarierten Methoden.
Also kannst Du DoExit überschreiben. Aber dann nicht vergessen via inherited die geerbte Methode aufzurufen.

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.

Für diesen Beitrag haben gedankt: UweK
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18689
Erhaltene Danke: 1619

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 25.04.18 13:23 
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Das existierende OnExit merken und dann an der richtigen Stelle zusätzlich aufrufen.
Das sollte man wirklich nur im äußersten Notfall machen. Wenn eine Komponente sauber entworfen ist, geht es normalerweise auch sauber, meistens so wie es user profile iconSinspin für diesen Fall beschrieben hat.

_________________
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!

Für diesen Beitrag haben gedankt: UweK
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6317
Erhaltene Danke: 126

Windows 7 + Windows 10
Tokyo Prof + CE
BeitragVerfasst: Mi 25.04.18 14:06 
user profile iconSinspin und user profile iconjaenicke haben natürlich Recht.
Wenn du schon eine eigene Komponente erstellt hast, dann solltest du meinen Vorschlag ignorieren. :wink:
UweK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

Win 7
Delphi Enterprise XE6
BeitragVerfasst: Mi 25.04.18 16:41 
Vielen Dank. Das DoExit ist die Lösung.