![]() |
Sender :TObject geht nicht als Zeiger?
Hi! Hab ein ich sag mal "code-kosmetisches" Problem:
- Es geht um ein Schachspiel - Das "Schachbrett" besteht aus schwarzen und weißen Quadrat-TShapes, - Dem OnMouseMove-Event jedes shapes ist der Aufruf der Prozedur MouseMoveOverShape zugeordnet - Beim Ausführen der Prozdedur (d.h. wenn die maus sich auf ein "neues" Feld bewegt) soll ein Label den Namen des Feldes anzeigen. Die Felder sind entsprechend benannt (A1, B1,....) Die Prozedur sieht wie folgt aus (und funktioniert so auch):
Delphi-Quellcode:
Das funktioniert einwandfrei, aber wie ich es auch versuche, ohne den (in meinen Augen) "Umweg" über den Pointer POverField geht es nicht!
procedure TForm1.MouseMoveoverShape(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var POverShape :^TShape; //ein Zeiger auf das Shape-Objekt über dem sich die Maus befindet begin POverField := @Sender; //Dem Zeiger wird die Adresse des "Sender", also des "Auslösers" der Prozedur zugeordnet FieldNameLabel.Caption := POverField.Name; //in einem Label wird der Name des Objekts, das über den Zeiger referrenziert wird ausgegeben end; müsste ich mir nicht die Deklaration des ^TShape-Pointers sparen können? Schliesslich wird der Prozedur doch mit Sender :TObject eine Referenz auf die aktivierende Shape-Objekt-Instanz übergeben, oder nicht? Aber egal was ich mache...
Delphi-Quellcode:
...es will nich gehen
FeldLabel.Caption := Sender.Name; // -->undeclared identifier 'Name'
FeldLabel.Caption := ^Sender.Name; // -->missing Operator or Semicolon FeldLabel.Caption := Sender^.Name; // -->Pointer type required FeldLabel.Caption := Sender.Name^; // -->undeclared identifier 'Name' FeldLabel.Caption := @Sender.Name; // -->undeclared identifier 'Name' Deshalb: Bitte helft mir! :cry: das Problem ist bestimmt/hoffentlich ganz harmlos Ihr müsst entschuldigen, falls es schon nen Thread dazu gibt, aber ne Suche nach "Sender :TObject" oder so is in dem Forum wohl eher aussichtslos :shock: Danke! :) |
Re: Sender :TObject geht nicht als Zeiger?
Vielleicht
Delphi-Quellcode:
usw.
TObject(Sender).Name
obwohl mit Name gehts aber mit Classname... :gruebel: [edit]Oxmyx' Lösung geht besser...[/edit] |
Re: Sender :TObject geht nicht als Zeiger?
Hai soup,
einfach über ein Typcasting machen ;-)
Delphi-Quellcode:
procedure TForm1.MouseMoveoverShape(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin FieldNameLabel.Caption := (Sender AS TShape).Name; //in einem Label wird der Name des Objekts ausgegeben end; |
Re: Sender :TObject geht nicht als Zeiger?
Delphi-Quellcode:
LabelName.Caption := TShape(Sender).Name;
|
Re: Sender :TObject geht nicht als Zeiger?
Und um das ganze noch Wasserdicht zu machen ->
Delphi-Quellcode:
procedure TForm1.MouseMoveoverShape(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin If (Sender is TShape) then begin FieldNameLabel.Caption := (Sender AS TShape).Name; end; end; |
Re: Sender :TObject geht nicht als Zeiger?
Zitat:
wenn Du bereits mit IS prüfst, ob es ein TShape ist, dann brauchst Du nicht mehr mit AS casten, da AS intern selbst "IS" aufruft, um zu prüfen, ob es passt. Ein direkter Typecast wäre dann besser :)
Delphi-Quellcode:
procedure TForm1.MouseMoveoverShape(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin if (Sender is TShape) then begin FieldNameLabel.Caption := TShape(Sender).Name; end; end; |
Re: Sender :TObject geht nicht als Zeiger?
Zitat:
|
Re: Sender :TObject geht nicht als Zeiger?
Wow! Das ging ja schnell! DANKE! :dp:
Ich glaub für meine kleine übersichtliche Anwendung reicht AS aber vollkommen aus Egal...Vielen Dank! Wieder was gelernt! Juhu :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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 by Thomas Breitkreuz