![]() |
welche Informationen schickt eigentlich (Sender: TObject)
Hallo Leute
Hätte da ein bar fragen zu (Sender: TObject) wie kann ich feststellen welche Informationen von Sender an das onChange Ereignis weitergegeben werden? Oder besser noch von welcher Komponente sind die informationen. :gruebel: Kann man vielleicht auch eine Liste in ein Memo schreiben? Schöne Grüsse Tau |
Re: welche Informationen schickt eigentlich (Sender: TObject
In Sender wird dir eine Referenz auf das auslösende Objekt übergeben. Wenn also ein Button1 eine OnClick-Routine auslöst, so ist Sender vom Typ TButton und du kannst auf ihn zugreifen. Das ist praktisch wenn mehrere Komponenten ein und die selbe Ereignisbehandlungsprozedur erhalten. Du kannst dadurch also ermitteln wer genau das Ereignis ausgelöst hat, und auch gleich mit dem Objekt interagieren.
Es ist deswegen vom Typ TObject, da TObject Vorfahre aller Komponenten ist. Somit kann dort jeglicher Typ drin übergeben werden ohne die OOP zu treten. Bevor du jedoch die Methoden von z.B. TButton verwenden kannst, musst du casten.
Delphi-Quellcode:
Sollte Sender hier kein TButton sein gibt's eine Exception. Daher lässt sich das über den is-Operator auch im Vorfeld abprüfen.
procedure OnClick(Sender: TObject);
begin (Sender as TButton).Caption := 'Ich bin geklicked'; end; Gruss, Fabian |
Re: welche Informationen schickt eigentlich (Sender: TObject
Sender ist vom Typ Tobject (Steht ja auch schon da ;)) und beinhaltet das Objekt, von dem aus die Methode aufgerufen wird. Also in einer OnClick-Prozedur eines Buttons ist es der gedrückte Button. So kannst du zB eine Methode mehreren Komponenten zuordnen und per Typenüberprüfung trotzdem alles richtig zuordnen.
Zitat:
//Edit: Ich sollte öftes vor dem Abschicken mal unten im Fenster nachschauen :roll: |
Re: welche Informationen schickt eigentlich (Sender: TObject
'OnChange' ist ein TNotifyEvent und folgendermaßen deklariert:
Delphi-Quellcode:
Das einzige was du bekommst, ist das auslösende Objekt.
type
TNotifyEvent = procedure(Sender: TObject) of object; Zitat:
Delphi-Quellcode:
in ein TMemo-Objekt kopieren.
Memo1.Text:=StringList1.Text;
|
Re: welche Informationen schickt eigentlich (Sender: TObject
Hi
Zitat:
An diese Informationen möchte ich rankommen. Tau :hi: |
Re: welche Informationen schickt eigentlich (Sender: TObject
per "Sender.ClassName" (String) oder "Sender.ClassType" (TClass)!
|
Re: welche Informationen schickt eigentlich (Sender: TObject
Hi
D A N K E ! ! ! der tipp mit "Sender.ClassName" war genau das was ich gesucht hatte. :witch: :dancer2: :witch: Tau :hi: |
Re: welche Informationen schickt eigentlich (Sender: TObject
Hallo allerseits
Hab noch eine kleine Frage zu dem Sender : TObject. Kann man im Sender ausfinden von welchem Event aus diese Procedure aufgerufen wurde? z.B. wenn man in einem TEdit in dem OnChange und in dem OnExit die gleiche Procedure aufruft, kann man in der aufgerufenen Procedure rausfinden ob diese von OnChange oder von OnExit aufgerufen wurde?? Thx & Greetz |
Re: welche Informationen schickt eigentlich (Sender: TObject
TEdit(Sender) ist dein TEdit
du kannst es genauso wie die Variable verwenden ... z.B. TEdit(Sender).Text aber ob's nun von OnChange, oder OnExit kommt kannst du meines Wissens nicht rausbekommen. [add] ach ja, viele verwenden stadt TEdit(Sender) lieber (Sender as TEdit) es kommt aber etwa auf's selbe raus |
Re: welche Informationen schickt eigentlich (Sender: TObject
Gibt es irgend ein "work around" um doch rauszubekommen woher es kommt?
Greetz |
Re: welche Informationen schickt eigentlich (Sender: TObject
Diese Events sind ja als Typen Deklariert:
OnChange ist z.B. TNotifyEvent. Vielleicht kannst du irgendwie diesen Typ übergeben und in deiner Prozedur dann prüfen. Edit: Huch, sorry das ging mit Klassen, da hab ich was verwechselt... :oops: |
Re: welche Informationen schickt eigentlich (Sender: TObject
Zitat:
|
Re: welche Informationen schickt eigentlich (Sender: TObject
Wäre echt toll wenn irgend jemand eine Möglichkeit herausfinden würde.
Ich versuchs vorläufig mal anders. Thx & Greetz |
Re: welche Informationen schickt eigentlich (Sender: TObject
Es geht nicht anders, als mit verschiedenen EventHandlern.
PS: selbst wenn man auf TNotifyEvent prüfen könnte ... onExit ist das Selbe ... würde also eh nüschts bringen :zwinker: Du kannst höchstens noch kleine Eventhandler bauen, welche dann einen großen/gemeinsamen mit entsprechenden Parametern aufrufen, anhand derer man es unterscheiden könnte. |
Re: welche Informationen schickt eigentlich (Sender: TObject
OK. Ich mach es doch mit 2 Procedures.
Danke nochmal für eure Hilfe! :wink: Greetz |
Re: welche Informationen schickt eigentlich (Sender: TObject
Nur mal so am rande.. wofür brauchst du das eigentlich? :gruebel:
|
Re: welche Informationen schickt eigentlich (Sender: TObject
Konkretes Beispiel:
Ich habe ein TEdit wo man einen Wert zwischen x und y eingeben kann. OnChange brauch ich um bei der Eingabe schon zu kontrollieren ob der eingegebene Wert zwischen x und y liegt. Falls nicht ist der "OK" Button deaktiviert. Wenn ein Wert kleiner x oder grösser als y ist ist zwar der "OK" Button deaktiviert aber man kann ja logischerweise aus dem Feld raus klicke oder mit Tab. Dann soll eine Meldung kommen: "Wert liegt nicht zwischen x und y". Falls der Wert kleiner x ist wird dem Feld x zugewiesen, falls er grösser als y ist steht im Feld y. Ich hoffe du verstehst was ich hier versuche... :drunken: Greetz |
Re: welche Informationen schickt eigentlich (Sender: TObject
kontrollier doch in deiner Prozedur einfach ob das Edit noch den Fokus hat. wenn nicht dann gibst die Meldung aus.
|
Re: welche Informationen schickt eigentlich (Sender: TObject
Da das eh zwei verschiedene Prüfungen (eine prüft und [de]aktiviert den Button und die andere ndert die werte und giebt 'ne Meldung aus) sind, machen sich 2 Ereignishandler sowieso besser.
|
Re: welche Informationen schickt eigentlich (Sender: TObject
Ich brauche jetzt 2 Procedures.
Es funktioniert jetzt wunderbar, also lass ich es glaub ich :lol: Danke nochmal Greetz |
Re: welche Informationen schickt eigentlich (Sender: TObject
Nochwas zum Casten: Die Operatoren is und as PRÜFEN, ob der typ übereinstimmt. TType(Object) dagegen castet direkt.
Deshalb ist
Delphi-Quellcode:
performanter als
if Sender is TButton then
TButton(Sender).Free;
Delphi-Quellcode:
, weil da zwei mal geprüft wird.
if Sender is TButton then
(Sender as TButton).Free; (Es sei denn, der Compiler merkt das und optimiert die zweite Prüfung raus... weiss ich nicht) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz