Autor Beitrag
UweK
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51
Erhaltene Danke: 1

Win 7
Delphi Enterprise XE6
BeitragVerfasst: Mi 25.04.18 11: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: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 25.04.18 11: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: 1321
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 25.04.18 11: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.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?

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

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 25.04.18 14: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.

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

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 25.04.18 15: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: 51
Erhaltene Danke: 1

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