Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi klassen prozedur (https://www.delphipraxis.net/9206-klassen-prozedur.html)

LoL 20. Sep 2003 14:23


klassen prozedur
 
hi

ich hatte vor 2 tagen schon mal über dieses thema gpostet aber nun habe ich ein neues problem. da ich es schlecht erklären kann poste ich mal den quelltext:

Delphi-Quellcode:
unit test
...
type Work_Panel = Class ( TPanel )
  class procedure panel_creation;
end;
...
var pnl_3d : Tpanel;
    pnl : TPanel;
...

class procedure Work_panel.panel_creation;
begin
  pnl       := TPanel.create(pnl_3d);
  pnl.Align := alclient;
  pnl.name  := 'p_eingabe';
  pnl.Parent := pnl_3d;

  pnl        := TPanel.create(FindComponent('p_eingabe')); <---------
  pnl.Name   := 'p_daten';
  pnl.Caption := '';
  pnl.Parent := FindComponent('p_eingabe');
end;
die klassen prozedur Work_panel.panel_creation wird bei form OnCreate in einer anderen unit names main aufgerufen.
nun bekomme ich folgende fehlermeldung an der gekennzeichneten stelle:
Zitat:

This form of method call only allowed for class methods

neolithos 22. Sep 2003 07:02

Re: klassen prozedur
 
FindComponent kann nur über eine Instanze gerufen werden.

Robert Marquardt 22. Sep 2003 07:40

Re: klassen prozedur
 
Eine class procedure wird nicht mit der Instanz eines Objektes aufgerufen, sondern seiner Klasse. Es muss also keine Instanz des Objektes vorhanden sein. FindComponent aber will die Instanz des Objektes nach untergeordneten Komponenten absuchen.

Motzi 22. Sep 2003 08:08

Re: klassen prozedur
 
Du brauchst aber in deinem Fall gar kein FindComponent:
Delphi-Quellcode:
class procedure Work_panel.panel_creation;
begin
  pnl       := TPanel.create(pnl_3d);
  pnl.Align := alclient;
  pnl.name  := 'p_eingabe';
  pnl.Parent := pnl_3d;

  pnl        := TPanel.create(pnl);
  pnl.Name   := 'p_daten';
  pnl.Caption := '';
  pnl.Parent := TWinControl(pnl.Owner);
end;

Robert Marquardt 22. Sep 2003 08:34

Re: klassen prozedur
 
Letztlich ist class procedure hier ein Holzweg.

LoL 22. Sep 2003 08:36

Re: klassen prozedur
 
??? :gruebel: :gruebel: :gruebel:

neolithos 22. Sep 2003 08:38

Re: klassen prozedur
 
Vielleich bin ich blöd!

:gruebel:

Aber was soll das ganze mal werden!

:gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel:

LoL 22. Sep 2003 08:46

Re: klassen prozedur
 
Zitat:

Zitat von neolithos
Vielleich bin ich blöd!

:gruebel:

kanst du ja nicht wissen, habs schon oft erklärt aber für dich auch nochmal:
ich habe einen auftrag bekommen ein programm zu entwickeln. da der auftraggeber mein programm in seines implementieren will und er ja ein formular schon hat und er quasi von mir nur ein panel braucht wo meine programmoberfläche drauf ist, will ich mein panel von meinem formular "abkoppeln", d.h. unhabhängig machen. man hat dann praktisch so wie in office ein leiste wo man die ganzen programmteile ausführen kann. er bledet dann prktisch immer blos mein panel ein und aus

Robert Marquardt 22. Sep 2003 08:46

Re: klassen prozedur
 
Du leitest ein TPanel ab um auf dem frisch kreierten Panel weitere Komponenten unterzubringen. Dazu ist aber eine class procedure der falsche Weg. Eine class procedure ist dazu da ohne die Instanz eines Objektes zu funktionieren. Du hast also moeglicherweise kein TPanel-Objekt um darauf Komponenten zu erzeugen.

Der richtige Weg ist es die Methode Loaded von TPanel zu ueberschreiben. Loaded wird aufgerufen wenn Delphi das .dfm file zur Erzeugung einer Form abgearbeitet hat und damit alle Komponenten auf der Form vollstaendig initialisiert sind
Code:
TWorkPanel = class(TPanel) // IMMER T-PREFIX AN TYPNAMEN!!!!!
protected
   procedure Loaded; override;
end;

TWorkPanel.Loaded;
begin
  inherited Loaded;
  // hier die Komponentne erzeugen
end;

LoL 22. Sep 2003 08:50

Re: klassen prozedur
 
ich mach mal ein bild um das zu erklären


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 Uhr.
Seite 1 von 2  1 2      

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