Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi methode in anderer unit implemtiren als die klasse (https://www.delphipraxis.net/137656-methode-anderer-unit-implemtiren-als-die-klasse.html)

tabl 25. Jul 2009 18:01


methode in anderer unit implemtiren als die klasse
 
ich möchte auf ein ereigness (z.B. TNotifyEvent) mit einer eigenen procedure reagieren.
das problem dabei ist, dass ereignisse ja eine methode benötigen. normalerweise wäre das ja kein problem, aber ich möchte die methode, der übersichtlichkeit wegen in einer anderen unit deklarieren. ist das irgenwie möglich?
am besten wäre sowas wie "externel" wie beim zugriff auf ne dll. gibs sowas auch für methoden?

ps.: über die methode einfach ne procedure aufzurufen wäre bestimmt ne infache lösung aba übersichtlich udn elegant is das sicherlich nciht^^

ps2: hab die suchfunction benutz und nichts gefunden

jfheins 25. Jul 2009 18:10

Re: methode in anderer unit implemtiren als die klasse
 
Du möchtest sozusagen die Definition der Klasse auf mehrere Units aufteilen? Das geht so in Delphi (Win32) nicht.

Lösung hast du schon erkannt, eine Produre aus einer anderen Unit auslagern ;)

Btw.: Warum teilen? Wenn die Klasse zu umfangreich wird, könntest du auch die Klasse selbst in mehrere Klassen aufteilen ;)

Namenloser 25. Jul 2009 18:13

Re: methode in anderer unit implemtiren als die klasse
 
Mir ist nicht ganz klar, was du vor hast, aber vielleicht sind Includes das, was du suchst. Allerdings halte ich persönlich nicht viel davon, Code, der zusammengehört, in viele kleine Einzelteile zu zerhacken - dadurch wird es nämlich keinesfalls übersichtlicher. Sorge lieber dafür, dass der Code gut strukturiert ist und jede Klasse oder Funktion genau eine Aufgabe erfüllt.

tabl 25. Jul 2009 18:20

Re: methode in anderer unit implemtiren als die klasse
 
Zitat:

Du möchtest sozusagen die Definition der Klasse auf mehrere Units aufteilen?
nicht wirklich. ich will bloß die "methoden beschreibung" in einer anderen unit haben.

ne eigene klassse macht glaube ich keinen sinn, da ich auf form1 mit label und später mit bitmap und änlcihen arbeiten will, die ich während der laufzeit erstellen lasse und mit der maus verschieben und änliches amchen will.
damit das noch übersichtlich bleibt soll jede komponentenart seine eigene unit geben.
eigene klassen machen also glaub ich keinen sinn und übersteigen meine fähigkeiten^^.

@namenlozer: werd mal dein tut angucken und sehen on es das is was ich brauch

thx schonmal an euch beide

himitsu 25. Jul 2009 18:21

Re: methode in anderer unit implemtiren als die klasse
 
TNotifyEvent ist als Procedure of Class definiert, also als Klassenprocedur und dieses ist ein Doppelzeiger, welcher die Klasseninstanz und den Prozedurzeiger kennt.

Also kannst du dieses auch ganz einfach auf eine Ereignisprozedur in einer anderen Klasse Zeigen lassen.

Delphi-Quellcode:
type TKlasse = class
    procedure irgendwas(sender: TObject);
  end;

var xyz: TKlasse;

// z.B.
Edit.OnClick := xyz.irgendwas;

// und falls es Namensprobleme gibt, dann auch inkl. Unit
// also ganz einfach den allgemeinen Namensregeln entsprechend
Edit.OnClick := unit2.xyz.irgendwas;

tabl 25. Jul 2009 18:27

Re: methode in anderer unit implemtiren als die klasse
 
ich hab ja für die methode keine klasse in der unit.
das man die unit auch im namen nennen kann wusste ich nicht, werds ausprobiren.
ich gib mich erstmal mit den antworten zu frieden und werde solange rumprobiren bis es klappt oder ihc aufgeben und den thrad wieder aktivire^^

jfheins 25. Jul 2009 18:55

Re: methode in anderer unit implemtiren als die klasse
 
Es gibt noch einen ganz hinterhältigen Weg: Du kannst ein TNotifyEvent erzeugen, dessen Self-Pointer auf nil und dessen anderer Pointer auf ne normale Prozedur zeigt :mrgreen:

Der Weg ist aber so pöhse den möchte ich hier jetzt nicht als Code ausführen :angel: (irgendwo in der DP ist aber ein Beispielcode)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 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