AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi RadioButtons und Checkboxen zur Laufzeit erstellen.
Thema durchsuchen
Ansicht
Themen-Optionen

RadioButtons und Checkboxen zur Laufzeit erstellen.

Ein Thema von RWarnecke · begonnen am 28. Mai 2006 · letzter Beitrag vom 29. Mai 2006
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

RadioButtons und Checkboxen zur Laufzeit erstellen.

  Alt 28. Mai 2006, 21:51
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: RadioButtons und Checkboxen zur Laufzeit erstellen.

  Alt 28. Mai 2006, 21:58
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?
Markus Kinzler
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: RadioButtons und Checkboxen zur Laufzeit erstellen.

  Alt 28. Mai 2006, 21:59
Hallo Rolf,

du mußt den Compiler davon überzeugen, daß FindComponent in diesem Fall ein TWinControl liefert:

FieldPrimary.Parent := FindComponent('RadioGroup' + IntToStr(counter)) AS TWinControl; Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

Re: RadioButtons und Checkboxen zur Laufzeit erstellen.

  Alt 28. Mai 2006, 22:16
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 von mkinzler:
Hast du mal versucht zu casten?
Was ist denn das ? Davon habe ich ja noch nichts gehört.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: RadioButtons und Checkboxen zur Laufzeit erstellen.

  Alt 28. Mai 2006, 23:03
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
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

Re: RadioButtons und Checkboxen zur Laufzeit erstellen.

  Alt 29. Mai 2006, 05:31
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. Damit konnten nur die RadioButtons in der ersten GroupBox angezeigt werden.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:17 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