Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - properties übergeben?


5000Watt - Mo 14.07.08 21:00
Titel: properties übergeben?
Hallo zusammen,

folgendes: Ich habe eine Klasse, welche eine Referenz auf eine String/Caption o.ä. Variable braucht. So, jetz hab ich also ne procedure (setStr), welche als argument ....(var str : String)... nimmt. Klappt auch alles schön und gut. Was ist aber, wenn ich einer Instanz der Klasse, sagen wir z.B.: TButton die Caption übergeben will?

ausschnitt meiner setStr meiner Klasse
1:
2:
3:
4:
procedure MeineKlasse.setStr(var str : String);
begin
  self.strpointer := @str;
end;

Meines Wissens sollte das eine property sein. Und da ist auch schon mein Problem. Die Klasse soll die Referenz nehmen, speichern und beeinflussen, dabei aber auf die ORIGINAL-Variable zugreifen...

Mein Projekt funkioniert wunderbar mit einfachen Variablen und aus Speicherplatzgründen will ich keine Zeiger auf alle möglichen Steuerelemente anlegen und dann per

so müsste ich dann prüfen, welcher zeiger belegt ist
1:
2:
3:
4:
if bttn <> nil then
   bttn.caption ... 
else if rdbttn <> nil then
   rdbttn.caption... ;
zugreifen. sind immerhin 32/64 bit. und ich müsste die setStr/getStr für recht viele Steuerelemente überladen. (Könnte das zwar auch wieder als Property machen, um arbeit zu sparen, aber dann baue ich selben solchen salat, über den ich mich gerade ärger :D)

Meine Idee war auch schon, einen Zeiger auf ein TButtonControl(oder so ähnlich) zu speichern, weil Buttons RadioButtons usw. die Caption von dem erben. Problem ist nur, das nützt mir auch nichts, weil dort die Caption protected ist....
Dann müsste ich Pointer auf die Methoden setText/getText speichern... doch das sind ja auch wieder zugriffsmethoden von eigenschaften :(.

Also, nochmal meinen "Kauderwelsch" zusammengefasst:

Wie kann ich eine property als argument an eine methode übergeben und dann in der instanz speichern/darauf zugreifen?
Oder wie kann ich die Sache irgendwie umgehen (siehe irgendwo oben)? Achja, die Property in eine Variable auslagern, dann diese Variable übergeben ist in meinem Fall auch quatsch, weil ich dann bei vielen Steuerelementen auch wieder Spagetti-Code erzeugen.

Danke schonmal vorweg! :D

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt und 5 Fragezeichen entfernt


Boldar - Mo 14.07.08 21:37

Zitat:
Meine Idee war auch schon, einen Zeiger auf ein TButtonControl(oder so ähnlich) zu speichern, weil Buttons RadioButtons usw. die Caption von dem erben. Problem ist nur, das nützt mir auch nichts, weil dort die Caption protected ist....


Dann machst du halt explizites typcasting aller Elemente mittels dem as-Operator nach dem Schema

Delphi-Quelltext
1:
2:
3:
4:
var a: tButtoncontrol;
begin
(a as TButton).caption
...


So kommst du an die Caption bei allen Buttons, darauf kannst du nun einen Pointer speichern.


Das müsste eigentlich funktionieren, oder ich habe dein Problem nicht ganz erfasst.


5000Watt - Mo 14.07.08 22:28

Klar, typecasting... das gimg ja umter delphi auch ^^

Sry für das WirrWarr, aber ich progge zur zeit nebenbei noch andere sprachen. :D

Danke schön! Gute Nacht.