![]() |
RadioButtons und Checkboxen zur Laufzeit erstellen.
Hallo,
ich stelle eine Form mit einem Panel und zwei Buttons zur Verfügung. Diese Form fülle ich ganz normal zur Laufzeit mit Komponenten. Nun erstelle ich auf dieser ScrollBox noch eine GroupBox, soweit komme iches hin. Ich lege mehrere von den Groupboxen an. Das funktioniert ja auch ganz wunderbar. Nun möchte ich noch zur Laufzeit entweder Checkboxen oder RadioButtons auf den zur Laufzeit erstellen GroupBoxen anlegen. Wie mache ich das ? Folgendes habe ich versucht :
Delphi-Quellcode:
Fehlermeldung : TWinControl ist nicht kompatibel mit TComponent.
{-- Erstellen der Group-Box für die Radio-Buttons --}
TableKeys := TGroupBox.Create(self); TableKeys.Parent := CreateTableScrollBox; TableKeys.Name := 'RadioGroup' + IntToStr(counter); TableKeys.Caption := ''; TableKeys.Left := 795; TableKeys.Top := kompotop - 2; TableKeys.Height := 25; TableKeys.Width := 94; {-- Erstellen des Radio-Buttons für den Primaryschlüssel --} FieldPrimary := TRadioButton.Create(self); FieldPrimary.Parent := FindComponent('RadioGroup' + IntToStr(counter)); //<--- Hier kommt der Fehler (s.u.) FieldPrimary.Name := 'RBFieldPrimary' + IntToStr(counter); FieldPrimary.Caption := ''; FieldPrimary.Top := kompotop; FieldPrimary.Left := radioprimary_left; FieldPrimary.Height := radiocheck_height; FieldPrimary.Width := radiocheck_wdith; {-- Erstellen des Radio-Buttons für den Index --} FieldIndex := TRadioButton.Create(self); FieldIndex.Parent := CreateTableScrollBox; FieldIndex.Name := 'RBFieldIndex' + IntToStr(counter); FieldIndex.Caption := ''; FieldIndex.Top := kompotop; FieldIndex.Left := radioindex_left; FieldIndex.Height := radiocheck_height; FieldIndex.Width := radiocheck_wdith; {-- Erstellen des Radio-Buttons für den Unique --} FieldUnique := TRadioButton.Create(self); FieldUnique.Parent := CreateTableScrollBox; FieldUnique.Name := 'RBFieldUnique' + IntToStr(counter); FieldUnique.Caption := ''; FieldUnique.Top := kompotop; FieldUnique.Left := radiounique_left; FieldUnique.Height := radiocheck_height; FieldUnique.Width := radiocheck_wdith; {-- Erstellen des Radio-Buttons für den --- --} FieldStrich := TRadioButton.Create(self); FieldStrich.Parent := CreateTableScrollBox; FieldStrich.Name := 'RBFieldStrich' + IntToStr(counter); FieldStrich.Caption := ''; FieldStrich.Checked := True; FieldStrich.Top := kompotop; FieldStrich.Left := radioline_left; FieldStrich.Height := radiocheck_height; FieldStrich.Width := radiocheck_wdith; Ich möchte damit folgendes Erreichen, wenn die RadioButtons erstellt werden müssen, dann sollen die RadioButtons nur innerhalb dieser Gruppe den Status wechseln. Vielleicht habe ich ja auch einen Denkfehler drin, dann sagt mir bitte wie ich das ganze realisieren kann. |
Re: RadioButtons und Checkboxen zur Laufzeit erstellen.
Die Fehlermeldung ist komiscg (Bug?) Den TWinControl ist Von TControl abgeleitet, welches wiederum von TComponent abgeleitet ist. Deshalb müßte eigentlich TWincontraol IS-A TComponenet gelten. Hast du mal versucht zu casten?
|
Re: RadioButtons und Checkboxen zur Laufzeit erstellen.
Hallo Rolf,
du mußt den Compiler davon überzeugen, daß FindComponent in diesem Fall ein TWinControl liefert:
Delphi-Quellcode:
Gruß Hawkeye
FieldPrimary.Parent := FindComponent('RadioGroup' + IntToStr(counter)) AS TWinControl;
|
Re: RadioButtons und Checkboxen zur Laufzeit erstellen.
Danke Hawkeye219, ich habe das jetzt mal ausprobiert. Es funktioniert nur zum Teil. Jetzt werden in der ersten GroupBox meine RadioButtons oder Checkboxen angezeigt, nur leider in meinen restlichen Groupboxen nicht.
Edit: Den Teil aus dem Code habe ich in einer Procedure stehen und rufe die immer wieder auf. An die Procedure werden die Variablen counter und kompotop übergeben. Edit2: Zitat:
|
Re: RadioButtons und Checkboxen zur Laufzeit erstellen.
Zum Thema "casten":
![]() Warum ordnest du eigentlich nur dem ersten RadioButton (FieldPrimary) die GroupBox als Parent zu, allen anderen aber die ScrollBox? Auf diese Weise gibst du dem Benutzer doch die Möglichkeit, zwei (möglicherweise benachbarte) RadioButtons gleichzeitig anzuwählen. Noch eine Frage: warum benutzt du überhaupt FindComponent? Den Zeiger auf die gesuchte Komponente hast du doch bereits in der Variablen TableKeys vorliegen. Gruß Hawkeye |
Re: RadioButtons und Checkboxen zur Laufzeit erstellen.
Ich habe jetzt meinen Code natürlich dementsprechend abgeändert :
Delphi-Quellcode:
Wenn ich den Code so ausführe, wird nur die erste GroupBox mit RadioButtons gefüllt. Jede einzelne Zeile mit GroupBoxen hat Ihre eigene Funktion. Deshalb brauche ich diese GroupBoxen.
{-- Erstellen der Group-Box für die Radio-Buttons --}
TableKeys := TGroupBox.Create(self); TableKeys.Parent := CreateTableScrollBox; TableKeys.Name := 'RadioGroup' + IntToStr(counter); TableKeys.Caption := ''; TableKeys.Left := 795; TableKeys.Top := kompotop - 2; TableKeys.Height := 25; TableKeys.Width := 94; {-- Erstellen des Radio-Buttons für den Primaryschlüssel --} FieldPrimary := TRadioButton.Create(self); FieldPrimary.Parent := FindComponent('RadioGroup' + IntToStr(counter)) As TWinControl; FieldPrimary.Name := 'RBFieldPrimary' + IntToStr(counter); FieldPrimary.Caption := ''; FieldPrimary.Top := kompotop; FieldPrimary.Left := radioprimary_left; FieldPrimary.Height := radiocheck_height; FieldPrimary.Width := radiocheck_wdith; {-- Erstellen des Radio-Buttons für den Index --} FieldIndex := TRadioButton.Create(self); FieldIndex.Parent := FindComponent('RadioGroup' + IntToStr(counter)) As TWinControl; FieldIndex.Name := 'RBFieldIndex' + IntToStr(counter); FieldIndex.Caption := ''; FieldIndex.Top := kompotop; FieldIndex.Left := radioindex_left; FieldIndex.Height := radiocheck_height; FieldIndex.Width := radiocheck_wdith; {-- Erstellen des Radio-Buttons für den Unique --} FieldUnique := TRadioButton.Create(self); FieldUnique.Parent := FindComponent('RadioGroup' + IntToStr(counter)) As TWinControl; FieldUnique.Name := 'RBFieldUnique' + IntToStr(counter); FieldUnique.Caption := ''; FieldUnique.Top := kompotop; FieldUnique.Left := radiounique_left; FieldUnique.Height := radiocheck_height; FieldUnique.Width := radiocheck_wdith; {-- Erstellen des Radio-Buttons für den --- --} FieldStrich := TRadioButton.Create(self); FieldStrich.Parent := FindComponent('RadioGroup' + IntToStr(counter)) As TWinControl; FieldStrich.Name := 'RBFieldStrich' + IntToStr(counter); FieldStrich.Caption := ''; FieldStrich.Checked := True; FieldStrich.Top := kompotop; FieldStrich.Left := radioline_left; FieldStrich.Height := radiocheck_height; FieldStrich.Width := radiocheck_wdith; Edit: Manchmal sollte man doch Schluss machen, wenn man müde ist, so wie gestern Abend. Ich habe falsche Werte für die Eigenschaft Top gesetzt. :wall: Damit konnten nur die RadioButtons in der ersten GroupBox angezeigt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 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