Problem mit erzeugen von Komponenten
-
Hi,
ich bin gerade dabei eine Klasse zu schreiben. Diese KLasse habe ich von TTabSheet abgeleitet. In dieser Klasse sollen nun auf dem TabSheet einige Komponenten erzeugt werden. Bei einigen habe ich es auch schon hinbekommen, nur beim erzeugen von Buttons bekomme ich eine AccessViolation.Hier mal mein Code
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "register_class.h" //--------------------------------------------------------------------------- TDllRegister *Dll_Register; //--------------------------------------------------------------------------- __fastcall TDllRegister::TDllRegister(TComponent* Owner) : TTabSheet(Owner) { //Owner auf TPageControl prüfen //Parent setzen TPageControl *pcTemp; pcTemp = dynamic_cast<TPageControl*>(Owner); if(pcTemp) { Parent = (TWinControl*)Owner; PageControl = (TPageControl*)Owner; Align= alClient; Caption = "Register aus DLL"; Enabled = true; Visible = true; ParentFont = true; OnShow = ShowRegister; Create_Elements(); } } //--------------------------------------------------------------------------- void __fastcall TDllRegister::ShowRegister(TObject *Sender) { Create_Elements(); } //--------------------------------------------------------------------------- void __fastcall TDllRegister::Create_Elements() { //GameSpyListenFeld erzeugen TListView *GameSpyListe; GameSpyListe = new TListView(this); GameSpyListe->Parent = this; GameSpyListe->Align = alClient; GameSpyListe->GridLines = true; GameSpyListe->ReadOnly = true; GameSpyListe->ViewStyle = vsReport; GameSpyListe->Visible = true; //Panel für Bedienung erzeugen TPanel *pUI = new TPanel(this); pUI->Parent = this; pUI->Height = 75; pUI->Align = alBottom; pUI->Caption = ""; //Button zum starten der GS Abfrage TButton *bstartGameSpy(NULL); bstartGameSpy->Parent = pUI; //<-- hier tritt die violation auf bstartGameSpy->Caption = "Gamespy abfragen"; bstartGameSpy->Width = 120; bstartGameSpy->Top = 10; bstartGameSpy->Left = 15; // bstartGameSpy->OnClick = QueryGameSpy; /* //Button zum beitretten eines Servers TButton *bJoinServer(NULL); bJoinServer->Parent = pUI; bJoinServer->Caption = "Server beitreten"; bJoinServer->Width = 120; bJoinServer->Top = 10; bJoinServer->Left = 150; // bstartGameSpy->OnClick = JoinServer; //Button zum unterbrechen der GS abfrage TButton *bCancelGameSpy(NULL); bCancelGameSpy->Parent = pUI; bCancelGameSpy->Caption = "Abfrage abrechen"; bCancelGameSpy->Width = 120; bCancelGameSpy->Top = 40; bCancelGameSpy->Left = 15; // bstartGameSpy->OnClick = JoinServer; */ //erzeugen der labels zum anzeigen der anzahl von Servern TLabel *lCountSvr = new TLabel(this); lCountSvr->Parent = pUI; lCountSvr->Caption = "Anzahl gefundener Server : 0"; lCountSvr->Width = 120; lCountSvr->Top = 40; lCountSvr->Left = 150; //Fortschritt anzeige für Abfrage TProgressBar *pbGSFortschritt = new TProgressBar(pUI); pbGSFortschritt->Parent = pUI; pbGSFortschritt->Align = alBottom; pbGSFortschritt->Smooth = true; }
Ich habe schon beim aufruf von new einige Kompos übergeben und auch bei parent verschiedene versucht. Die Button sollen auf dem Panel angelegt werden, aber irgendwie nimmt der das Panel nicht als Parent an.
Ich hoffe das jemand eine Idee hat was ich falsch gemacht habe.
-
Hallo zusammen
@Fox-Alpha
Ich habe zwar nicht wirklich viel Ahnung von Klassen, Komponenten und so, jedoch wenn ich das richtig gesehen habe erstellst Du einen Pointer von Typ TButton, jedoch es wird keiner mit new erzeugt.
Bei den restlichen Elementen (ListView, Panel, ...) erzeugst Du mit new doch auch das entsprechende Element.
Ich bin der Meinung, daß wenn du einen Button noch mit new erzeugst alles funktionieren sollte.MfG Stephan
Und allen noch frohe Weihnachten.
-
Danke genau das ist wohl der Fehler.
Ich habe wirklich einige Zeit herumprobiert und bin selber nicht darauf gekommen.
Natürlich muss ich die Buttons auch mit new erstellen.
Naja manchmal sieht man eben den Wald vor lauter Bäumen nicht
Foxy