Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi eigener klasse (https://www.delphipraxis.net/9141-eigener-klasse.html)

LoL 19. Sep 2003 07:37


eigener klasse
 
hi

ich hab folgenden code:

Delphi-Quellcode:
unit u_prog
...
type Work_Panel = Class ( TPanel )
  procedure button_creation;
end;
...

var mybutton : TButton;

procedure Work_Panel.button_creation;
begin
  mybutton := TButton.create(self);
  mybutton.parent := self;
end;

procedure CreateComponents;
begin
  Work_Panel.button_creation;
end;
CreateComponents wir von der haupt unit aus in form.oncreate aufgerufen.
ich bekomme folgende fehler meldung:
'[Error] u_prog.pas(283): This form of method call only allowed for class methods'

ich kann damit aber nicht wirklich was anfangen. wer kann mir helfen?

gruß christoph

LoL 19. Sep 2003 08:02

Re: eigener klasse
 
hat denn davon niemand eine ahnung? :cry: *nachobenhohl*

neolithos 19. Sep 2003 08:03

Re: eigener klasse
 
Sag erst mal was das werden soll?

Luckie 19. Sep 2003 08:04

Re: eigener klasse
 
Bitte unterlass das. Dein Post ist gerade mal 25 Minuten alt! :x

LoL 19. Sep 2003 08:05

Re: eigener klasse
 
hi

tut mir leid luckie sorry

ich hab mir die klasse erstellt um darauf meine anderen komponenten zu erstellen, so dass ich diese klasse unabhängig vom zuverwendeten programm bzw. formular funktioniert!

gruß christoph

Robert Marquardt 19. Sep 2003 08:06

Re: eigener klasse
 
Gemeinerweise hat Tform eine Methode CreateComponents. Die wird aufgerufen und bekommt den Schluckauf.
Ausserdem solltest du deine Funktion nicht im OnCreate aufrufen. Das ist zu frueh.

LoL 19. Sep 2003 08:09

Re: eigener klasse
 
hi

es gibt die methode CreateComponent aber nicht CreateComponents.
und warum sollte ich die procedure nicht in OnCreate aufrufen bisher hats immer geklappt?
ich werde aber besonders auf der fehlermeldung nicht schlau!

mfg christoph

neolithos 19. Sep 2003 08:28

Re: eigener klasse
 
Ich weiß zwar immer noch nicht was das soll!
Aber ein vorschlag...

Delphi-Quellcode:
unit u_prog
...
type Work_Panel = Class
  class procedure button_creation(Self : TPanel);
end;
...

var mybutton : TButton;

class procedure Work_Panel.button_creation(Self : TPanel);
begin
  mybutton := TButton.create(self);
  mybutton.parent := self;
end;

procedure CreateComponents;
begin
  Work_Panel.button_creation;
end;
Und CreateComponents ganzt du in OnCreate aufrufen.

LoL 19. Sep 2003 08:31

Re: eigener klasse
 
thx :hello:

das wars

gruß christoph

Robert Marquardt 19. Sep 2003 08:37

Re: eigener klasse
 
Du hast mich verwirrt. Typen IMMER mit T vorne schreiben!
Der Aufruf Work_panel.button_creation waere nur als class function erlaubt.
Als solcher kann er aber nicht funktionieren. class functions kann man naemlich ohne Instanz des Objekts aufrufen. Das Erzeugen der Buttons geht dann schief. Self ist dann namenlich nicht vorhanden.

Du musst CreateComponents zu einer Methode deiner Form machen (auf der du wahrscheinlich eine Work_panel genannte Komponente hast).

Mit zu frueh meine ich das bei OnCreate Loaded noch nicht ausgefuehrt wurde.
Die Komponenten auf der Form sind noch nicht vollstaendig initialisiert.
Ich mache es immer im OnActivate (mit einer booleschen Variablen abgesichert damit es nur einmal aufgerufen wird).

neolithos 19. Sep 2003 08:42

Re: eigener klasse
 
Zitat:

Zitat von Robert Marquardt
Mit zu frueh meine ich das bei OnCreate Loaded noch nicht ausgefuehrt wurde.
Die Komponenten auf der Form sind noch nicht vollstaendig initialisiert.
Ich mache es immer im OnActivate (mit einer booleschen Variablen abgesichert damit es nur einmal aufgerufen wird).

Loaded wird im Constructor Create aufgerufen bevor das Ereignis OnCreate ausgelöst wird.

Und wer es nicht glaubt

Zitat:

Zitat von >Delphi Hilfe<
Wenn OldCreateOrder den Wert false hat (Voreinstellung), tritt das Ereignis OnCreate ein, nachdem die Ausführung aller Konstruktoren abgeschlossen ist. Das Ereignis OnDestroy tritt ein, bevor ein Destruktor aufgerufen wird.

Dieses Vorgehen unterscheidet sich früheren Versionen der Bibliothek (Delphi 3 und früher sowie von C++Builder Version 1); in diesen Versionen trat das Ereignis OnCreate ein, wenn der Konstruktor von TCustomForm ausgeführt wurde und das Ereignis OnDestroy trat ein, wenn der Destruktor von TCustomForm ausgeführt wurde. In Anwendungen, die diese Auslösezeitpunkte für die Ereignisse OnCreate und OnDestroy erfordern, setzen Sie OldCreateOrder auf true.


Motzi 19. Sep 2003 08:58

Re: eigener klasse
 
Jap.. seit Delphi4 wird das OnCreate von der AfterConstruction-Methode und das OnDestroy von der BeforeDestruction-Methode ausgelöst. AfterConstruction wird automatisch aufgerufen, wenn der letzte Konstruktor einer Klasse fertig ist, während BeforDestruction aufgerufen wird, noch bevor der erste Destruktor einer Klasse aufgerufen wird...


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