![]() |
Komponenten dynamisch erstellen
Ich versuche mit folgendem Code eine ganze Reihe von Komponenten zu erstellen. Allerdings funktioniert es nicht: Sie werden nicht angezeigt, allerdings kann ich beispielsweise die Werte Top und Left abfragen. Sobald ich das allerdings mit Parent versuche, bekomme ich eine Zugriffsverletzung. Ich habe keine Ahnung warum es nicht funktioniert und hoffe nun auf eure Hilfe.
Delphi-Quellcode:
Das ganze ist mir ein Rätsel.
var
Form1: TForm1; arraytabsheet: array of ttabsheet; arrayscrollbox: array of tadvscrollbox; arraymarkerback: array of tshape; arraymarker: array of tshape; arrayfreiraum: array of timage; arrayzurueck: array of timage; arraysavesw: array of timage; arraysave: array of timage; arrayvollbildsw: array of timage; arrayvollbild: array of timage; arraybildgross: array of timage; arrayhintergrund: array of timage; arrayinfobutton: array of tjvtransparentbutton; //... setlength(arraytabsheet, ordner.items.count); setlength(arrayscrollbox, ordner.items.count); setlength(arraymarkerback, ordner.items.count); setlength(arraymarker, ordner.items.count); setlength(arrayfreiraum, ordner.items.count); setlength(arrayzurueck, ordner.items.count); setlength(arraysavesw, ordner.items.count); setlength(arraysave, ordner.items.count); setlength(arrayvollbildsw, ordner.items.count); setlength(arrayvollbild, ordner.items.count); setlength(arraybildgross, ordner.items.count); setlength(arrayhintergrund, ordner.items.count); setlength(arrayinfobutton, ordner.items.count); for i3:=0 to ordner.Items.Count-1 do begin if ordner.Items.Strings[i3]<>'Test' then begin arraytabsheet[i3]:= ttabsheet.Create(seiten); arraytabsheet[i3].Name:= 'Bildersektion_'+ordner.Items.Strings[i3]; arraytabsheet[i3].Parent:=seiten; arraytabsheet[i3].TabVisible:=true; arrayhintergrund[i3]:= timage.Create(findcomponent('Bildersektion_'+ordner.Items.Strings[i3]) as ttabsheet); arrayhintergrund[i3].Name:='Bildersektion_'+ordner.Items.Strings[i3]+'_Hintergrund'; arrayhintergrund[i3].AutoSize:=true; arrayhintergrund[i3].Height:=600; arrayhintergrund[i3].Width:=900; arrayhintergrund[i3].Picture:= Bildersektion_Test_Hintergrund.Picture; arrayscrollbox[i3]:= tadvscrollbox.Create(findcomponent('Bildersektion_'+ordner.Items.Strings[i3]) as ttabsheet); arrayscrollbox[i3].Name:='Bildersektion_'+ordner.Items.Strings[i3]+'_Scrollbox'; arrayscrollbox[i3].BevelInner:=bvnone; arrayscrollbox[i3].BevelOuter:=bvnone; arrayscrollbox[i3].BorderStyle:=bsnone; arrayscrollbox[i3].Height:=576; arrayscrollbox[i3].Width:=286; arrayscrollbox[i3].Left:=602; arrayscrollbox[i3].Top:=8; arraysavesw[i3]:=timage.Create(findcomponent('Bildersektion_'+ordner.Items.Strings[i3]) as ttabsheet); arraysavesw[i3].Name:='Bildersektion_'+ordner.Items.Strings[i3]+'_Save_SW'; arraysavesw[i3].Height:=48; arraysavesw[i3].Width:=48; arraysavesw[i3].Left:= 504; arraysavesw[i3].Top:= 536; arraysavesw[i3].Picture:= Bildersektion_Test_Save_SW.Picture; arraysavesw[i3]:=timage.Create(findcomponent('Bildersektion_'+ordner.Items.Strings[i3]) as ttabsheet); arraysavesw[i3].Name:='Bildersektion_'+ordner.Items.Strings[i3]+'_Save'; arraysavesw[i3].Height:=48; arraysavesw[i3].Width:=48; arraysavesw[i3].Left:= 504; arraysavesw[i3].Top:= 536; arraysavesw[i3].OnClick:=Bildersektion_Test_SaveClick; arraysavesw[i3].Picture:= Bildersektion_Test_Save.Picture; arraysavesw[i3]:=timage.Create(findcomponent('Bildersektion_'+ordner.Items.Strings[i3]) as ttabsheet); arraysavesw[i3].Name:='Bildersektion_'+ordner.Items.Strings[i3]+'_Bildgross'; arraysavesw[i3].Height:=497; arraysavesw[i3].Width:=585; arraysavesw[i3].Left:= 13; arraysavesw[i3].Top:= 64; arraysavesw[i3].Center:=true; arraysavesw[i3].Proportional:=true; arraysavesw[i3].Stretch:=true; arrayinfobutton[i3]:=tjvtransparentbutton.Create(findcomponent('Bildersektion_'+ordner.Items.Strings[i3]) as ttabsheet); arrayinfobutton[i3].Name:='Bildersektion_'+ordner.Items.Strings[i3]+'_InfoButton'; arrayinfobutton[i3].Height:=16; arrayinfobutton[i3].Width:=441; arrayinfobutton[i3].Left:= 456; arrayinfobutton[i3].Top:= 584; arrayinfobutton[i3].FrameStyle:=fsnone; arrayinfobutton[i3].BorderWidth:=0; arrayinfobutton[i3].Cursor:=crHandPoint; arrayinfobutton[i3].OnClick:=Bildersektion_Test_InfoButtonClick; arraysavesw[i3]:=timage.Create(findcomponent('Bildersektion_'+ordner.Items.Strings[i3]) as ttabsheet); arraysavesw[i3].Name:='Bildersektion_'+ordner.Items.Strings[i3]+'_Vollbild'; arraysavesw[i3].Height:=48; arraysavesw[i3].Width:=48; arraysavesw[i3].Left:= 551; arraysavesw[i3].Top:= 536; arraysavesw[i3].OnClick:=Bildersektion_Test_Vollbild_SWClick; arraysavesw[i3].Picture:= Bildersektion_Test_Vollbild.Picture; arraysavesw[i3]:=timage.Create(findcomponent('Bildersektion_'+ordner.Items.Strings[i3]) as ttabsheet); arraysavesw[i3].Name:='Bildersektion_'+ordner.Items.Strings[i3]+'_Vollbild_SW'; arraysavesw[i3].Height:=48; arraysavesw[i3].Width:=48; arraysavesw[i3].Left:= 551; arraysavesw[i3].Top:= 536; arraysavesw[i3].Picture:= Bildersektion_Test_Vollbild_SW.Picture; arraymarkerback[i3]:= tshape.Create(findcomponent('Bildersektion_'+ordner.Items.Strings[i3]+'_Scrollbox') as tadvscrollbox); arraymarkerback[i3].name:='Bildersektion_'+ordner.Items.Strings[i3]+'_Scrollbox_MarkerBack'; arraymarkerback[i3].Visible:=false; arraymarkerback[i3].Width:=113; arraymarkerback[i3].Height:=113; arraymarkerback[i3].Brush.Color:=$00AAFFFF; arraymarkerback[i3].Pen.Style:=psclear; arraymarker[i3]:= tshape.Create(findcomponent('Bildersektion_'+ordner.Items.Strings[i3]+'_Scrollbox') as tadvscrollbox); arraymarker[i3].name:='Bildersektion_'+ordner.Items.Strings[i3]+'_Scrollbox_Marker'; arraymarker[i3].Visible:=false; arraymarker[i3].Width:=113; arraymarker[i3].Height:=113; arraymarker[i3].Pen.Color:=clyellow; arraymarker[i3].Brush.Style:=bsclear; arrayfreiraum[i3]:= timage.Create(findcomponent('Bildersektion_'+ordner.Items.Strings[i3]+'_Scrollbox') as tadvscrollbox); arrayfreiraum[i3].name:='Bildersektion_'+ordner.Items.Strings[i3]+'_freiraum'; arrayfreiraum[i3].Width:=105; arrayfreiraum[i3].Height:=8; arrayzurueck[i3]:= timage.Create(findcomponent('Bildersektion_'+ordner.Items.Strings[i3]) as ttabsheet); arrayfreiraum[i3].name:='Bildersektion_'+ordner.Items.Strings[i3]+'_zurueck'; arrayfreiraum[i3].Cursor:= crhandpoint; arrayfreiraum[i3].Height:=16; arrayfreiraum[i3].Width:=72; arrayfreiraum[i3].Left:= 30; arrayfreiraum[i3].Top:= 563; arrayfreiraum[i3].Picture:= Bildersektion_Test_zurueck.Picture; arrayfreiraum[i3].OnClick:=Bildersektion_Test_zurueckClick; end; end; //... |
Re: Komponenten dynamisch erstellen
Hallo,
du musst bei der manuellen Erstellung den Parameter Parent von Hand zuweisen. Parent ist das Control in der das erzeugte Control gezeichnet werden soll. Direkt auf deinem Formular würde das so aussehen
Delphi-Quellcode:
soll das neue Control bsw., auf einem Panel liegen, dann so.
control.parent := Form1;
Delphi-Quellcode:
MfG
control.parent := Panel1;
Kolbi |
Re: Komponenten dynamisch erstellen
Zitat:
Zitat:
|
Re: Komponenten dynamisch erstellen
Eigentlich hätte ich auch gedacht das es funktionieren müsste,
geht aber hier bei D2007 nur wenn man den PageControl zuweist:
Delphi-Quellcode:
arraytabsheet[i3].PageControl := seiten;
|
Re: Komponenten dynamisch erstellen
Danke,
jetzt funktioniert es. Ich habe es zunächst mit .Create(form1) erstellt und den Parent erst später zugewiesen. Außerdem habe ich den Vorschlag mit dem PageControl umgesetzt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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