Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Variable sender im Debugger überwachen (https://www.delphipraxis.net/187027-variable-sender-im-debugger-ueberwachen.html)

andzie 21. Okt 2015 15:23

Variable sender im Debugger überwachen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallöchen,

auf folgendes Problem bin ich gestoßen:
Ich habe ein bisschen mit der Variable sender rumgespielt und mir ist aufgefallen, dass sich die Variable beim Debuggen nicht beobachten lässt(Siehe Anhang). Mache ich etwas falsch oder geht das einfach nicht. Wenn es nicht geht würde mich aus Interesse interessieren wieso nicht. ;)

Benutzt wird XE7 und folgenden Code habe ich benutzt:
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
begin
if sender = btn1 then
  pnl1.caption := 'erster sender erkannt'
end;
Grüße

Andzie

Sir Rufo 21. Okt 2015 15:38

AW: Variable sender im Debugger überwachen
 
Das Argument
Delphi-Quellcode:
Sender
ist vom Typ
Delphi-Quellcode:
TObject
und der Debugger zeigt alle Informationen zu diesem Typ
Delphi-Quellcode:
TObject
an ... und da gibt es einfach nichts.

haentschman 21. Okt 2015 15:46

AW: Variable sender im Debugger überwachen
 
Hallöle...:P

In den überwachten Ausdrücken kannst du den Sender (TObject) auf den zu erwartenden Typ casten und somit sehen. :thumb: Nur mit Maus drüber wird das nix...

andzie 22. Okt 2015 07:41

AW: Variable sender im Debugger überwachen
 
Zitat:

Zitat von haentschman (Beitrag 1319369)
Hallöle...:P

ok, ok dann eben MAHLZEIT und kein Hallöle :wink:

Zitat:

Zitat von haentschman (Beitrag 1319369)
In den überwachten Ausdrücken kannst du den Sender (TObject) auf den zu erwartenden Typ casten und somit sehen. :thumb: Nur mit Maus drüber wird das nix...


Ich habe es zu den überwachten Ausdrücken hinzugefügt. Einen Typ hatte ich aber nicht angegeben. Werde es später mal ausprobieren!


Zitat:

Zitat von Sir Rufo (Beitrag 1319367)
Das Argument
Delphi-Quellcode:
Sender
ist vom Typ
Delphi-Quellcode:
TObject
und der Debugger zeigt alle Informationen zu diesem Typ
Delphi-Quellcode:
TObject
an ... und da gibt es einfach nichts.

Naja ich hätte eventuell erwartet, die Adresse des aufrufenden Buttons zu erhalten. Zumindest denke ich, dass
Delphi-Quellcode:
if sender = btn1 then
diesen Vergleich durchführt.

Muss dazu sagen, dass ich erst seitdem ich beruflich mit Programmieren zu tun habe, mich intensiver mit den Grundlagen beschäftige. Davor war ich eher das typische Scriptkiddy.

haentschman 22. Okt 2015 09:47

AW: Variable sender im Debugger überwachen
 
Moin...:P
Zitat:

Zumindest denke ich, dass if sender = btn1 then diesen Vergleich durchführt.
eher doch (Bsp.):
Delphi-Quellcode:
if TButton(Sender).Name = 'btn1'

himitsu 22. Okt 2015 12:03

AW: Variable sender im Debugger überwachen
 
Zitat:

Zitat von haentschman (Beitrag 1319413)
Moin...:P
Zitat:

Zumindest denke ich, dass if sender = btn1 then diesen Vergleich durchführt.
eher doch (Bsp.):
Delphi-Quellcode:
if TButton(Sender).Name = 'btn1'

Njain.

Will man nun die korrekte Refernz vergleichen, oder ob es den selben gleichen Namen besitzt?

Sir Rufo 22. Okt 2015 12:10

AW: Variable sender im Debugger überwachen
 
Zitat:

Zitat von himitsu (Beitrag 1319433)
Zitat:

Zitat von haentschman (Beitrag 1319413)
Moin...:P
Zitat:

Zumindest denke ich, dass if sender = btn1 then diesen Vergleich durchführt.
eher doch (Bsp.):
Delphi-Quellcode:
if TButton(Sender).Name = 'btn1'

Njain.

Will man nun die korrekte Refernz vergleichen, oder ob es den selben gleichen Namen besitzt?

Vor allem, weil damit sogar ein
Delphi-Quellcode:
TEdit
mit dem Namen btn1 durchgelassen würde ;)

Delphi-Quellcode:
if Sender = btn1 
then
ist vergleichbar mit
Delphi-Quellcode:
if (Sender is TButton) // ah ein Button
and (TButton(Sender).Owner = Self) // diese Form ist der Owner
and (TButton(Sender).Name = 'btn1' ) // der Name passt auch
then // dann wird es wohl btn1 sein
  Assert( Sender = btn1 );
und auch nur deswegen, weil der Owner dafür sorgt, dass der Name der Unter-Komponenten eindeutig ist.

haentschman 22. Okt 2015 12:14

AW: Variable sender im Debugger überwachen
 
Zitat:

Vor allem, weil damit sogar ein TEdit mit dem Namen btn1 durchgelassen würde
boah eh...:roll: Die Wahrscheinlichkeit ist im TForm1.btn1Click wohl eher gering. Das ist doch nur ein Beispiel. Müßt ihr immer alles bis ins kleinste Detail zerpflücken? Am Anfang ging es um die Sichtbarkeit des Senders... :roll:

mkinzler 22. Okt 2015 12:29

AW: Variable sender im Debugger überwachen
 
Zitat:

Die Wahrscheinlichkeit ist im TForm1.btn1Click wohl eher gering.
Man kann diese Eventmethode auch anderen Komponenten zuweisen.
Es ist aber auch möglich eine Editkomponente btn1 zu nennen.
Delphi-Quellcode:
if Sender = btn1
überprüft auf die Instanz und nicht den Typ

Delbor 22. Okt 2015 16:13

AW: Variable sender im Debugger überwachen
 
Hi zusammen

Zitat:

Man kann diese Eventmethode auch anderen Komponenten zuweisen.
Sicher, kann man. Man kann sie auch von (fast) überall aufrufen. Die Frage ist eigentlich eher: wann wird der Sender befüllt? Wenn der User mit der Komponente interagiert, indem er darauf clickt? Oder wenn die Onclickmethode ausgeführt wird? Im 2. Fall müsste der Sender mit dem Sender des Aufrufers belegt werden. Ist dieser eine andere Prozedur oder Funktion, hat er keinen Sender-Parameter. Das heisst für mich: Der Sender übergibt eine Referenz auf das TObject, das angeklickt, hochgeklappt oder was auch immer wurde.
Delphi-Quellcode:
if Sender = btn1
Ich glaube nicht, das das wirklich funktionieren kann. Der Sender ist erstmal ein TObject und btn1 kann weiss was sein: der Ausdruck ist also immer false. Was auch heisst: So kann man Fehler einbauen, ohne es zu bemerken. Zumindest solange, bis einem klar wird, dass das ohne Cast nicht geht.
Sollte ich daneben liegen, lasse ich mich gerne eines besseren brlehren. Ansonsten würde ich nur noch sagen: wer sein TEdit Btn1 nennt, it echt selber schuld...

Gruss
Delbor


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:22 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz