Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Probleme mit OnCreate Event (https://www.delphipraxis.net/100913-probleme-mit-oncreate-event.html)

Flocke 5. Okt 2007 13:45

Re: Probleme mit OnCreate Event
 
Du könntest die OnCreate-Methode als Parameter des Konstruktors übergeben (oder eines alternativen überladenen), also
Delphi-Quellcode:
constructor Create(AOnCreate: TMyEvent);

kolbaschedder 5. Okt 2007 13:48

Re: Probleme mit OnCreate Event
 
Delphi-Quellcode:

TKlasse = class(TComponent) <---- Hier ändern
private
  FOnCreate: TMyEvent;
  // bla
public
  // bla
  constructor Create;override; <----- das muss geändert werden
published <----- und vorallem das
 property OnCreate: TMyEvent read FOnCreate write FOnCreate;
end;

constructor TKlasse.Create;
begin
  inherited Create;
  if Assigned(FOnCreate) then
    FOnCreate;
end;
Du musst das ganze von TComponent ableiten, und über RegisterComponents (am besten in einem eigenen package) installieren. Danach kannst du die Komponente in der IDE verwenden.

Alle als published!! deklarierten Properties lassen sich dann über die IDE bzw., ObjectInspector verwenden

Neutral General 5. Okt 2007 13:49

Re: Probleme mit OnCreate Event
 
Zitat:

Zitat von Flocke
Du könntest die OnCreate-Methode als Parameter des Konstruktors übergeben (oder eines alternativen überladenen), also
Delphi-Quellcode:
constructor Create(AOnCreate: TMyEvent);

So hatte ich es auch schonmal aber wie soll das gehn? (Früher gings aber da sah mein ganzes System etwas anders aus)

Delphi-Quellcode:
abc := TDings.Create(abc.CreateDings); // abc.CreateDings gibts noch nicht
Wenn ich TDings.CreateDings als Parameter übergeben will dann willer nicht compilieren. Außerdem muss dann CreateDings public sein was ich auch nicht unbedingt will.

Flocke 5. Okt 2007 14:27

Re: Probleme mit OnCreate Event
 
Moment! Du willst die Methode deiner eigenen Klasse benutzen, um sie im Create dann wieder aufzurufen? Wofür machst du den ganzen Mist denn dann?

Wenn du das machen möchtest, was ich denke, dann definiere in der Basisklasse eine leere virtuelle Methode "AfterCreate", die im Konstruktor als allerletztes aufgerufen wird, und die du in abgeleiteten Klassen nach Belieben überschreiben kannst.

sirius 5. Okt 2007 14:35

Re: Probleme mit OnCreate Event
 
Ich glaube der General möchte sein eigenes kleines VCL-Package schreiben ohne die VCL von Borland zu nutzen :zwinker:

Neutral General 5. Okt 2007 14:38

Re: Probleme mit OnCreate Event
 
Zitat:

Zitat von sirius
Ich glaube der General möchte sein eigenes kleines VCL-Package schreiben ohne die VCL von Borland zu nutzen :zwinker:

Psssst das is doch noch streng geheim :shock: :mrgreen:
Naja aber so könnte man es fast bezeichnen. sirius hat nicht ganz unrecht ;)

hermannhass 5. Okt 2007 15:00

Re: Probleme mit OnCreate Event
 
Ich würde die afterconstruction-procedure ableiten
also
im Interface
Protected
procedure afterconstruction; override;


Und dann
procedure <class>.afterconstruction;
begin
inherited
if assigned(oncreate) then oncreate(self);
end;

Ist somit rein komponentenabhängig...
ist oncreate eine published property, kannst Du sie auch
im Objectinspector nutzen.
Bei Oncreate ist die dfm eines evtl. formulars schon gelesen.
ich glauve, dass ist genau, was du suchst....

Neutral General 5. Okt 2007 16:23

Re: Probleme mit OnCreate Event
 
Hi,

Hab nen Plan..RTTI.. Also nehmen wir an wir haben folgendes:

Delphi-Quellcode:
{$M+}
TDings = class(TKlasse)
published
  procedure FormCreate;
end;
{$M-}
kommt man jetzt an den Pointer zu der FormCreate procedure?
Ich hab es versucht mit

Delphi-Quellcode:
GetMethodProp(Self,'FormCreate')
:arrow:

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EPropertyError mit der Meldung 'Eigenschaft FormCreate existiert nicht.' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Das MUSS einfach mit der RTTI gehn! :X

Gruß
Neutral General

sirius 5. Okt 2007 18:02

Re: Probleme mit OnCreate Event
 
Das würde ja bedeuten, dass die Methode immer "FormCreate" heißen muss.
Ist ne Lösung, aber dann kannst du gleich AfterConstruction nehmen. Das wird auch automatisch nach Create aufgerufen (und ist in TObject erstmal leer)

Apollonius 5. Okt 2007 18:10

Re: Probleme mit OnCreate Event
 
Wie man an dem Namen GetMethodProp sieht, ist das ganze für Eigenschaften (nämlich Events) gedacht.
Aber was spricht denn bitte gegen eine virtuelle Methode? Selber Effekt, aber performanter, leichter zu verstehen und OOP-konform.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr.
Seite 2 von 2     12   

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