AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

klassen prozedur

Ein Thema von LoL · begonnen am 20. Sep 2003 · letzter Beitrag vom 22. Sep 2003
Antwort Antwort
Seite 1 von 2  1 2      
LoL
(Gast)

n/a Beiträge
 
#1

klassen prozedur

  Alt 20. Sep 2003, 15:23
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
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#2

Re: klassen prozedur

  Alt 22. Sep 2003, 08:02
FindComponent kann nur über eine Instanze gerufen werden.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: klassen prozedur

  Alt 22. Sep 2003, 08:40
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.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#4

Re: klassen prozedur

  Alt 22. Sep 2003, 09:08
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;
Manuel Pöter
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: klassen prozedur

  Alt 22. Sep 2003, 09:34
Letztlich ist class procedure hier ein Holzweg.
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#6

Re: klassen prozedur

  Alt 22. Sep 2003, 09:36
???
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#7

Re: klassen prozedur

  Alt 22. Sep 2003, 09:38
Vielleich bin ich blöd!



Aber was soll das ganze mal werden!

- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#8

Re: klassen prozedur

  Alt 22. Sep 2003, 09:46
Zitat von neolithos:
Vielleich bin ich blöd!


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
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#9

Re: klassen prozedur

  Alt 22. Sep 2003, 09:46
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;
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#10

Re: klassen prozedur

  Alt 22. Sep 2003, 09:50
ich mach mal ein bild um das zu erklären
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:27 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