AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschied bei Sender?

Ein Thema von Igotcha · begonnen am 26. Nov 2004 · letzter Beitrag vom 26. Nov 2004
Antwort Antwort
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#1

Unterschied bei Sender?

  Alt 26. Nov 2004, 14:09
Hallo zusammen,

mir ist letztens etwas aufgefallen und wollte mal hören was der Unterschied zwischen den beiden folgenden Anweisungen ist, z.B.

Delphi-Quellcode:
(Sender As TLabel).caption

TLabel(Sender).caption
Habe nur als Beispiel das ".caption" hinzugefügt. Mir geht es um den Weg, die Komponente über Sender zu identifizieren.

In meinem speziellen Fall ging an einer Stelle nur der zweite Weg - weiss aber leider nicht mehr, in welchem Zusammenhang.

Gruß Igotcha
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Unterschied bei Sender?

  Alt 26. Nov 2004, 14:26
Bei der ersten Variante prüft Delphi vorher noch per is-Operator ob der Cast überhaupt zulässig ist, also Sender mit der Zielklasse abwärts verwandt oder identisch ist.

Bei der zweiten Variante fällt die Prüfung weg, und es wird einfach gecastet.

Gruss,
Fabian

\\edit: Variante 1 macht im Grunde das hier (pseudocodeish):
Delphi-Quellcode:
if (Sender is TLabel) then
  Rückgabe := TLabel(Sender);
else
  raise Exception....;
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 17. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Unterschied bei Sender?

  Alt 26. Nov 2004, 14:28
//Ursprungstext gelöscht//

--- Kommando zurück! ---

dizzy hat Recht.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: Unterschied bei Sender?

  Alt 26. Nov 2004, 16:03
Interessant ist in diesem Zusammenhang folgendes:
Ist Sender z.B. vom Typ TButton und du machst:TForm(Sender).Caption := 'Hallo Welt'; funktioniert das!
Dies ist so, weil sowohl TForm, als auch TButton über die Eigenschaft Caption verfügen. Dies geht sogar mit Methoden...
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Unterschied bei Sender?

  Alt 26. Nov 2004, 16:13
Zitat von Stevie:
Interessant ist in diesem Zusammenhang folgendes:...
Ist mir auch schon aufgefallen und spielt bei einer aktuellen Fragestellung bei mir eine Rolle:

Ich erstelle dynamisch Komponenten auf einer Form per Mausklick (ähnlich wie in der Delphi-IDE). Dazu habe ich der Form (die auch dynamisch erstellt wird) ein OnMouseDown-Ereignis mitgegeben, das ungefähr wie folgt verfährt:

Code:
WENN TAG=1 ERSTELLE Label mit Parent TForm(SENDER)
WENN TAG=2 ERSTELLE DBEdit mit Parent TForm(SENDER)
Nun kann man auch z.B. ein Pagecontrol mittels dieses Ereignisses auf der Form erstellen. Aber wenn ich jetzt eine Komponente auf dem Pagecontrol erstellen möchte, ist der "Sender" ja nicht mehr vom Typ TForm, sondern vom Typ "TPageControl" bzw. "TTabSheet".

Ich stehe momentan vor dem Problem, dass ich deshalb jeder "Container"-Komponente ein eigenes OnMouseDown-Ereignis (analog oben) mitgeben müsste, wegen dem Cast bzgl. der Parent-Eigenschaft.

Kann man das evtl. auch noch "neutral" erstellen, so dass obiger Pseudocode unabhängig vom der Klasse funktioniert?

Gruß Igotcha
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: Unterschied bei Sender?

  Alt 26. Nov 2004, 16:13
Zitat von Stevie:
Dies ist so, weil sowohl TForm, als auch TButton über die Eigenschaft Caption verfügen. Dies geht sogar mit Methoden...
Naja, ganz richtig ist das nicht. Auf jeden Fall sehr gefährlich, weil es nur funktioniert, wenn die Eigenschaft in einem gemeinsamen Vorfahren (hier TControl) definiert sind, weil dann die gleichen Offsets benutzt werden. Wenn du statt Caption zum Beispiel ModalResult benutzt, dürfte es ehrhebliche Probleme geben. Die Eigenschaften heissen zwar gleich, liegen aber bei den beiden Klassen an unterschiedlichen Adressen.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Unterschied bei Sender?

  Alt 26. Nov 2004, 16:19
Alle Klassen wie TForm oder TPanel etc. die als Container für weitere Komponenten dienen können sind imho von TComponent abgeleitet. (Oder doch von TWinControl? Müssteste mal nachschauen.)
Wenn du dann auf diesen gemeinsamen Vorfahren castest ist das sauber und möglich.

Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort


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 +1. Es ist jetzt 20:09 Uhr.
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