![]() |
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
|
Re: klassen prozedur
Liste der Anhänge anzeigen (Anzahl: 1)
hier mal der aufbau
auf dem panel eingabe kann sowohl die eingabemaske erscheinenn als auch die anpassung für den teechart, und noch andere sachen. dazu lösche ich immer die komponenten auf dem panel eingabe und erzeuge die komponenten die ich brauche |
Re: klassen prozedur
Mein Vorschlag:
Delphi-Quellcode:
class
TMyPanel = class(TPanel) // bzw. TWinControl private panTee, panInput : TPanel; // warum überhaupt zwei zusätzliche Panel's ???? public constructor Create(afOwner : TComponent); override; end; constructor Create(afOwner : TComponent); override; begin inherited Create(afOwner); panTee := TPanel.Create(Self); panTee.Parent := Self; .... end; |
Re: klassen prozedur
1.der chart selbst liegt auf keinem panel
2. die zweite variable deshalb da ich dann schneller zugreifen kann |
Re: klassen prozedur
Du baust mit ganz normalen TForm. D.h. statt mit einem Panel zu arbeiten das als Kontainer dient, ersetzt du dieses durch ein TForm. Dieses TForm dann .BorderSytle := bsNone; .Align := alClient; und mit .CreateParented() erzeugt.
Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 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