![]() |
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:
die klassen prozedur Work_panel.panel_creation wird bei form OnCreate in einer anderen unit names main aufgerufen.
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; nun bekomme ich folgende fehlermeldung an der gekennzeichneten stelle: Zitat:
|
Re: klassen prozedur
FindComponent kann nur über eine Instanze gerufen werden.
|
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.
|
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; |
Re: klassen prozedur
Letztlich ist class procedure hier ein Holzweg.
|
Re: klassen prozedur
??? :gruebel: :gruebel: :gruebel:
|
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: |
Re: klassen prozedur
Zitat:
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 |
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; |
Re: klassen prozedur
ich mach mal ein bild um das zu erklären
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 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