000
15.04.2005, 13:07 Uhr
insaint
|
Hallo zusammen:
Ich versuche mich gerade mal daran, eine eigenen Komponente zu schreiben. Zum ausprobieren, möchte ich eine TForm in ein Panel bringen.
Zuerst habe ich also ein neues Panel angelegt, von TPanel abgeleitet, ...
den Quellcode verändert, kompiliert, installiert, gespeichert.
Bis dahin alles wunderbar! Sobald ich das neue Panel auf eine Form in einem neuen Projekt ziehe, zeigt er alles so an, wie er soll. Auch wenn das Projekt dann läuft, gibt es keinerlei Probleme!
Wenn ich die Form dann aber schließe, also das Projekt beende, gibt er mir einen Fehler in einem Popup aus, dass ich irgendeine Speicherverletzung bei Adresse [irgendwas] habe, und schmiert dann ab!
Also, weiss jemand eine Lösung für mein Problem? Freue mich über jede Antwort.
Hier mein Code:
.cpp
C++: |
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "O_Panel.h" #pragma package(smart_init) //--------------------------------------------------------------------------- // Mit ValidCtrCheck wird sichergestellt, daß die erzeugten Komponenten // keine rein virtuellen Funktionen besitzen. // TForm *ONForm;
static inline void ValidCtrCheck(TOPanel *) { new TOPanel(NULL); } //--------------------------------------------------------------------------- __fastcall TOPanel::TOPanel(TComponent* Owner) : TPanel(Owner) { ONForm = new TForm(this); ONForm->Parent = this; //ONForm->BorderStyle = bsNone; ONForm->WindowState = wsMaximized;
} //---------------------------------------------------------------------------
__fastcall TOPanel::~TOPanel() { delete ONForm; }
void __fastcall TOPanel::Paint(void) { TPanel::Paint(); ONForm->Show(); } //---------------------------------------------------------------------------
namespace O_panel { void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(TOPanel)}; RegisterComponents("KOPanel", classes, 0); } } //---------------------------------------------------------------------------
|
und die .h
C++: |
//---------------------------------------------------------------------------
#ifndef O_PanelH #define O_PanelH //--------------------------------------------------------------------------- #include <SysUtils.hpp> #include <Classes.hpp> #include <Controls.hpp> #include <ExtCtrls.hpp> //--------------------------------------------------------------------------- class PACKAGE TOPanel : public TPanel { private: protected: public: __fastcall TOPanel(TComponent* Owner); __fastcall ~TOPanel(); void __fastcall Paint(void); __published: }; //--------------------------------------------------------------------------- #endif
|
-- don't be insane, be mad ;p |