![]() |
an die profis: eine funktion für mehrere klassen verwenden?
hi jungs&mädels^^!
also ich möcht ne funktion schreiben, die je nach dem ob ich vorher ein memo oder ein richedit ausgewählt hab, dann dort eine zeile einfügt.. nur so zum beispiel.. also:
Delphi-Quellcode:
das problem ist, dass ich hier
var xyz:tcomponent;
... xyz:=memo1; //oder eben richedit1 tmemo(xyz).lines.add('test');
Delphi-Quellcode:
vorne "tmemo" angeben muss, was aber auch genausogut "trichedit" sein kann, je nach dem, was der user haben will. jetzt könnt ich einfach 2 abfragen mit if machen,also so:
tmemo(xyz).lines.add('test');
Delphi-Quellcode:
aber ich wills eben kürzer haben.. also ich müsst des "tmemo" in der zeile
if (xyz=memo1) then
tmemo(xyz).lines.add('test'); if (xyz=richedit1) then trichedit(xyz).lines.add('test');
Delphi-Quellcode:
irgendwie variabel machen..wie geht das, hab schon einges probiert hat aber nix geklappt..
tmemo(xyz).lines.add('test');
DANKE!! |
Re: an die profis: eine funktion für mehrere klassen verwend
Man suche sich einen geeigneten gemeinsamen Vorfahren, der die gewünschten Features hat. Hier wäre das TCustomMemo, das bereits FLines als TStrings und das public property Lines bereitstellt. Man caste in den gemeinsamen Vorfahren und kanndann unabhängig vom Laufzeittyp auf die Eigenschaften des Vorfahrens zugreifen:
Delphi-Quellcode:
Idealweise deklariert man schon xyz als TCustomMemo und nicht als TComponent, um sicherzustellen, daß zur Laufzeit auch wirklich ein CustomMemo drinsteckt. Wenn nicht, sollte man vorher unbedingt den Laufzeittyp abfragen:
var xyz:tcomponent;
... xyz:=memo1; //oder eben richedit1 TCustomMemo(xyz).Lines.Add('test');
Delphi-Quellcode:
if xyz is TCustomMemo then
//blubb |
Re: an die profis: eine funktion für mehrere klassen verwend
Oder man übergibt der Funktion gleich das TStrings-Objekt. Dann kann man auch mal eine Stringliste übergeben, falls man das mal möchte.
|
Re: an die profis: eine funktion für mehrere klassen verwend
achso..cool danke
ist nur dumm,dass ich das mit den memos uns richedits jetzt nur als bsp gewählt hatte. ich brauch das als twebbrowser und tmoziallabrowser. aber ich wollt des halt im allgemeinen wissen.. trotzdem schon ma danke! wer kann mir helfen? danke! |
Re: an die profis: eine funktion für mehrere klassen verwend
Zitat:
Du könntest höchstens wie schon oben angedeutet mit dem is-Operator abfragen, welche Komponente du da gerade hast und entsprechend casten. Als Variablentyp nimmst du dann einen gemeinsamen Vorfahren, auch wenn er nicht die gewünschte Funktionalität hat (du castest ja ;-)), im Zweifelsfall ist das mindestens TObject, du solltest dir aber den "höchsten" raussuchen. Welcher das ist, steht entweder in irgendeiner Dokumentation oder im Quellcode, indem du die Vererbungshierarchie abklapperst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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-2025 by Thomas Breitkreuz