Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigene Komponenten EClassNotFound bei TImage in TPanel (https://www.delphipraxis.net/67556-eigene-komponenten-eclassnotfound-bei-timage-tpanel.html)

shockrocker 16. Apr 2006 17:32


Eigene Komponenten EClassNotFound bei TImage in TPanel
 
servus zusammen!

ich habe eine eigene komponente von TPanel abgeleitet und möchte jetzt im panel ein timage haben, um darauf zeichnen zu können etc.
beim compilieren funktioniert das ganze auch einwandfrei, wenn ich sie jetzt aber in ein programm einbinde kommt sofort nach dem start eine "eclassnotfound: timage" exception. weiß da jemand rat?

der code sieht so aus:

Delphi-Quellcode:
unit xtPanel;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type
  TxtPanel = class(TPanel)
  private
    img: timage;
  protected
    { Protected-Deklarationen }
  public
    constructor create(aowner: tcomponent); override;
  published
    { Published-Deklarationen }
  end;



procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Sonstiges', [TxtPanel]);
end;

constructor TxtPanel.create(aowner: tcomponent);
begin
 inherited create(aowner);
 
 img := timage.create(self);

 img.Left := 0;
 img.top := 0;
 img.Width := width;
 img.height := height;

 img.canvas.TextOut(5,5,'test');
end;

end.
vielen dank im voraus und frohe ostern!
frederik

mkinzler 17. Apr 2006 10:11

Re: Eigene Komponenten EClassNotFound bei TImage in TPanel
 
Warum rufst du in deinem Konstruktor das Create des Owener auf, der ist mit großer Wahrscheinlichkeit ein nAnderer Typ. Du mußt den Konstruktor der Superklasse ( also TPanel )aufrufen mit
Delphi-Quellcode:
inherited create;

shockrocker 17. Apr 2006 10:39

Re: Eigene Komponenten EClassNotFound bei TImage in TPanel
 
hö? ich ruf da doch das geerbte create von tpanel auf und übernehme einfach den besitzer :gruebel: 'inherited create' hat laut compiler+hilfe jedenfalls zu wenige parameter und mit dem owner 'self' krieg ich beim programmstart stacküberlauf...

habe das problem btw 'gelöst', indem ich einfach das paint-event des panels überschrieben und angepasst habe :???: würd mich aber trotzdem interessieren, wie man andere vcl in ner selbst erstellten komponente benutzen kann :wall:

gruß
shockrocker

Hawkeye219 17. Apr 2006 10:48

Re: Eigene Komponenten EClassNotFound bei TImage in TPanel
 
Hallo,

ich glaube, es hat nichts mit Deiner "neuen" Komponente zu tun. Der von Dir beschriebene Fehler tritt normalerweise auf, wenn man im Quelltext in der Formulardeklaration eine Komponente entfernt, das Formular aber diese Komponente noch enthält. Der Compiler bemerkt die Änderung nicht, beim Start des Programms wird aber unmittelbar eine Fehlermeldung ausgegeben.

Hast Du vielleicht (versehentlich) eine Zeile innerhalb der Formulardeklaration gelöscht?

Gruß Hawkeye

shockrocker 17. Apr 2006 10:55

Re: Eigene Komponenten EClassNotFound bei TImage in TPanel
 
erstmal thx für die schnellen antworten :thumb:

deklarationen habe ich keine entfernt. ich hab meine komponente abgeleitet und angelegt gehabt (wie sie oben steht) und dann getestet mit dem eclassnotfound-fehler. interessanterweise funktioniert das ganze, wenn ich manuell in meiner app zusätzlich zum TxtPanel manuell noch ein Timage draufziehe.

gruß
frederik

Khabarakh 17. Apr 2006 11:03

Re: Eigene Komponenten EClassNotFound bei TImage in TPanel
 
Zitat:

Zitat von shockrocker
deklarationen habe ich keine entfernt. ich hab meine komponente abgeleitet und angelegt gehabt (wie sie oben steht) und dann getestet mit dem eclassnotfound-fehler. interessanterweise funktioniert das ganze, wenn ich manuell in meiner app zusätzlich zum TxtPanel manuell noch ein Timage draufziehe.

Wahrscheinlich war ExtCtrls nicht in der Form-Unit eingebunden, durch das explizite Hinzufügen des Images wurde sie nun eingebunden.
http://www.delphipraxis.net/internal...ect.php?t=3128

Hawkeye219 17. Apr 2006 11:25

Re: Eigene Komponenten EClassNotFound bei TImage in TPanel
 
@Khabarakh:

Ich hab's gerade mal ausprobiert:

- leeres Formular, TxtPanel-Komponente abgelegt, gespeichert => Delphi fügt "xtPanel" und "ExtCtrls" in die USES-Anweisung ein
- beide Referenzen manuell entfernt, nicht gespeichert => beim Start des Compilers werden sie automatisch wieder eingefügt.

Gäbe es denn eine Möglichkeit, das automatische Einfügen durch Delphi zu verhindern :gruebel:
Das Ändern der "Optionen für Autospeichern" hat nichts gebracht...

Gruß Hawkeye

shockrocker 17. Apr 2006 11:59

Re: Eigene Komponenten EClassNotFound bei TImage in TPanel
 
Zitat:

Zitat von Khabarakh
Wahrscheinlich war ExtCtrls nicht in der Form-Unit eingebunden, durch das explizite Hinzufügen des Images wurde sie nun eingebunden.

doch doch, das hab ich extra geschaut. die extctrls war sowohl in der form-unit als auch in txtpanel eingebunden...

EDIT: davon abgesehen müsste es meinem form ja eigentlich schnuppe sein, ob extctrls eingebunden ist, wenn nur txtpanel ein timage benutzt :?:

gruß
frederik

TStringlist 17. Apr 2006 14:47

Re: Eigene Komponenten EClassNotFound bei TImage in TPanel
 
Zitat:

Zitat von shockrocker
würd mich aber trotzdem interessieren, wie man andere vcl in ner selbst erstellten komponente benutzen kann

Nötig dafür übrigens auch: Jede weitere Unterkomponente (wie hier dein 'img') muss, sofern diese von TWinControl abstammt, dann natürlich auch noch ihre Parent-Property geladen bekommen. Sonst kann sie nämlich keine Ahnung haben, worauf sie sich überhaupt abbilden soll:

Delphi-Quellcode:
img.parent := self;


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