Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi an die profis: eine funktion für mehrere klassen verwenden? (https://www.delphipraxis.net/43997-die-profis-eine-funktion-fuer-mehrere-klassen-verwenden.html)

prinz_inzide 11. Apr 2005 20:31


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:
var xyz:tcomponent;
...
xyz:=memo1; //oder eben richedit1
tmemo(xyz).lines.add('test');
das problem ist, dass ich hier
Delphi-Quellcode:
tmemo(xyz).lines.add('test');
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:
Delphi-Quellcode:
if (xyz=memo1) then
tmemo(xyz).lines.add('test');
if (xyz=richedit1) then
trichedit(xyz).lines.add('test');
aber ich wills eben kürzer haben.. also ich müsst des "tmemo" in der zeile
Delphi-Quellcode:
tmemo(xyz).lines.add('test');
irgendwie variabel machen..wie geht das, hab schon einges probiert hat aber nix geklappt..

DANKE!!

tommie-lie 11. Apr 2005 20:54

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:
var xyz:tcomponent;
...
xyz:=memo1; //oder eben richedit1
TCustomMemo(xyz).Lines.Add('test');
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:
Delphi-Quellcode:
if xyz is TCustomMemo then
  //blubb

Sanchez 11. Apr 2005 21:10

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.

prinz_inzide 11. Apr 2005 21:14

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!

tommie-lie 11. Apr 2005 21:21

Re: an die profis: eine funktion für mehrere klassen verwend
 
Zitat:

Zitat von prinz_inzide
ich brauch das als twebbrowser und tmoziallabrowser.

Dann musst du einen gemeinsamen Vorfahren finden, der das kann, was du willst. Da sie aber beide Active-X-Controls sind, wirst du da wohl arge Probleme haben.
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