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 RadioButtons und Checkboxen zur Laufzeit erstellen. (https://www.delphipraxis.net/70331-radiobuttons-und-checkboxen-zur-laufzeit-erstellen.html)

RWarnecke 28. Mai 2006 20:51


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:
{-- 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;
Fehlermeldung : TWinControl ist nicht kompatibel mit TComponent.

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.

mkinzler 28. Mai 2006 20:58

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?

Hawkeye219 28. Mai 2006 20:59

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:
FieldPrimary.Parent := FindComponent('RadioGroup' + IntToStr(counter)) AS TWinControl;
Gruß Hawkeye

RWarnecke 28. Mai 2006 21:16

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:

Zitat von mkinzler
Hast du mal versucht zu casten?

Was ist denn das ? Davon habe ich ja noch nichts gehört.

Hawkeye219 28. Mai 2006 22:03

Re: RadioButtons und Checkboxen zur Laufzeit erstellen.
 
Zum Thema "casten": klick

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

RWarnecke 29. Mai 2006 04:31

Re: RadioButtons und Checkboxen zur Laufzeit erstellen.
 
Ich habe jetzt meinen Code natürlich dementsprechend abgeändert :
Delphi-Quellcode:
{-- 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;
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.

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 20:06 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