AGB  ·  Datenschutz  ·  Impressum  







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

Sender :TObject geht nicht als Zeiger?

Ein Thema von soup · begonnen am 5. Feb 2005 · letzter Beitrag vom 5. Feb 2005
Antwort Antwort
Benutzerbild von soup
soup

Registriert seit: 5. Feb 2005
9 Beiträge
 
Delphi 7 Personal
 
#1

Sender :TObject geht nicht als Zeiger?

  Alt 5. Feb 2005, 12:54
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:
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;
Das funktioniert einwandfrei, aber wie ich es auch versuche, ohne den (in meinen Augen) "Umweg" über den Pointer POverField geht es nicht!
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:
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'
...es will nich gehen
Deshalb: Bitte helft mir!

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

Danke!
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Sender :TObject geht nicht als Zeiger?

  Alt 5. Feb 2005, 12:57
Vielleicht

TObject(Sender).Name usw.

obwohl mit Name gehts aber mit Classname...

[edit]Oxmyx' Lösung geht besser...[/edit]
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Sender :TObject geht nicht als Zeiger?

  Alt 5. Feb 2005, 12:57
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#4

Re: Sender :TObject geht nicht als Zeiger?

  Alt 5. Feb 2005, 12:58
LabelName.Caption := TShape(Sender).Name;
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Sender :TObject geht nicht als Zeiger?

  Alt 5. Feb 2005, 13:00
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Sender :TObject geht nicht als Zeiger?

  Alt 5. Feb 2005, 13:02
Zitat von Sharky:
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;
Hi,

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;
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Sender :TObject geht nicht als Zeiger?

  Alt 5. Feb 2005, 13:04
Zitat von mirage228:
...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 ...
Das hat man nun vom Copy & Paste
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von soup
soup

Registriert seit: 5. Feb 2005
9 Beiträge
 
Delphi 7 Personal
 
#8

Re: Sender :TObject geht nicht als Zeiger?

  Alt 5. Feb 2005, 13:25
Wow! Das ging ja schnell! DANKE!

Ich glaub für meine kleine übersichtliche Anwendung reicht AS aber vollkommen aus
Egal...Vielen Dank! Wieder was gelernt! Juhu
  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 18:18 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