| 
| Autor | Beitrag |  
| galagher 
          Beiträge: 2556
 Erhaltene Danke: 45
 
 Windows 10 Home
 Delphi 10.1 Starter, Lazarus 2.0.6
 
 | 
Verfasst: Mo 06.06.16 19:29 
 
Hallo!
 Ich habe ein Panel auf dem ein Label liegt. Beiden ist die Prozedur MouseEnter des Panels zugeordnet.
 Folgender Code funktioniert auch, wenn man statt des Panels das Label benutzt:
 		                       Delphi-Quelltext 
 									| 1:2:
 
 | Panel1.Tag := TPanel(Sender).Tag;Caption := TPanel(Sender).Name;
 |  Da das anstandslos funktioniert, ist das wohl normal so. Jedenfalls war ich überrascht, ich wusste das nicht!_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
 |  |  |  
| Nersgatt 
          Beiträge: 1581
 Erhaltene Danke: 279
 
 
 Delphi 10 Seattle Prof.
 
 | 
Verfasst: Mo 06.06.16 21:08 
 
Uiuiui, das ist aber gefährlich...
 Nimm lieber TControl(sender).name, das wäre der saubere Weg.
 _________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi) Für diesen Beitrag haben gedankt: galagher
 |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Di 07.06.16 03:14 
 
Man sollte immer vorher mit is prüfen, ob es der passende Typ ist. Dann ist der Cast auch ungefährlich.
Oder man casten mit as, dann kommt zumindest der korrekte Fehler, dass die Typumwandlung nicht möglich ist.
 
 Denn auch wenn es unsauber ist, kann man ja die Eventhandling-Methode auch manuell aufrufen. Wenn man dort dann einen anderen Typ übergibt...
 
 Weshalb funktioniert es nun aber?
 Das liegt daran, dass die Eigenschaften abgeleiteter Klassen immer hinter denen der Elternklasse eingefügt werden.
 Bis zur Eigenschaft Tag sehen TLabel und TPanel daher gleich aus.
 
 Würdest du eine Eigenschaft benutzen, die nicht mehr aus gemeinsamen Vorfahren stammt, würde es knallen.
 Für diesen Beitrag haben gedankt: galagher
 |  |  |  
| galagher  
          Beiträge: 2556
 Erhaltene Danke: 45
 
 Windows 10 Home
 Delphi 10.1 Starter, Lazarus 2.0.6
 
 | 
Verfasst: Di 07.06.16 18:38 
 
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
 |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Mi 08.06.16 05:31 
 |  |  |  
| Nersgatt 
          Beiträge: 1581
 Erhaltene Danke: 279
 
 
 Delphi 10 Seattle Prof.
 
 | 
Verfasst: Mi 08.06.16 08:05 
 
Da muss ich Sebastian zustimmen, solchen harten Casts sollte man nur nach vorheriger Prüfung machen. Zumal es sonst durch Zufall mal funktionieren kann und beim Kunden knallt es dann.
Ich wollte allerdings ausdrücken, dass es sauberer ist, auf den gemeinsamen Vorfahren zu casten, als ein TLabel auf ein TPanel zu casten.
 _________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi) |  |  |  
| galagher  
          Beiträge: 2556
 Erhaltene Danke: 45
 
 Windows 10 Home
 Delphi 10.1 Starter, Lazarus 2.0.6
 
 | 
Verfasst: Mi 08.06.16 19:36 
 
	  |  Nersgatt hat folgendes geschrieben  : |  	  | Ich wollte allerdings ausdrücken, dass es sauberer ist, auf den gemeinsamen Vorfahren zu casten, als ein TLabel auf ein TPanel zu casten. | 
 Dann werde ich mal versuchen, das zu machen!
 Funktioniert sogar dann, wenn ich Form1 als Sender übergebe. Ich könnte natürlich auch einfach am Anfang der jeweiligen Prozedur prüfen, ob Sender  vom Typ TPanel  oder TLabel  ist. Aber um es wirklich korrekt zu machen, was anstelle von TControl(Sender)  muss ich angeben?_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
 |  |  |  
| Nersgatt 
          Beiträge: 1581
 Erhaltene Danke: 279
 
 
 Delphi 10 Seattle Prof.
 
 | 
Verfasst: Mi 08.06.16 20:12 
 
Also bei mir sähe es ungefähr so aus:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 
 | varc : TControl;
 begin
 if sender is TControl then
 begin
 c := TControl(sender);
 Panel1.Tag := c.Tag;
 Caption := c.Name;
 end;
 end;
 | _________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi) Für diesen Beitrag haben gedankt: galagher
 |  |  |  
| galagher  
          Beiträge: 2556
 Erhaltene Danke: 45
 
 Windows 10 Home
 Delphi 10.1 Starter, Lazarus 2.0.6
 
 | 
Verfasst: Fr 10.06.16 17:31 
 
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
 |  |  |  |