FTT78 - Sa 22.09.18 16:00
Titel: Panel zur Laufzeit in mehreren Groupboxen erstellen
Hallo zusammen.
Ich versuche nach Jahren mal wieder mit Delphi zu Programmieren.
Ich habe eine Form1 und darin 4 Groupboxen mit den Namen Tipp1 bis Tipp4.
Nun wollte ich in jede Groupbox 49 Panel wärend der Laufzeit einfügen.
Leider bekomme ich es nicht hin an die jeweilige groupbox gebunden wird wegen der ausrichtung.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| procedure TForm1.FormCreate(Sender: TObject); var newpanel : Tpanel; feld: Integer; Zeile: Integer; Spalte: Integer; Nummer : Integer; x : Integer; y : Integer; begin
Nummer :=1; x:=10; y:=30; feld:=1; for feld := 1 to 4 do begin Nummer:=1; for Zeile := 1 to 7 do begin Y:=30; for Spalte := 1 to 7 do begin newpanel := Tpanel.create(form1.FindComponent('Tipp' + inttostr(feld))); newpanel.name := 'T' + inttostr(feld) + inttostr(Nummer); newpanel.caption := inttostr(Nummer); newpanel.parent := form1; newpanel.Width:=24; newpanel.Height:=24; newpanel.left := x; newpanel.Top := y; newpanel.visible := true;
y:=y+24; Nummer:=Nummer+1; end; x:=x+24; end; end; end; end. |
Moderiert von Narses: Code- durch Delphi-Tags ersetztModeriert von Narses: Beiträge zusammengefasstHabe jetzt eine andere lösung gefunden.
Ich erstelle die Groupboxes wärend der laufzeit.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56:
| procedure TForm1.FormCreate(Sender: TObject); var newpanel : Tpanel; newgroupbox : tgroupbox; ngbx : integer; ngby : integer; feld: Integer; Zeile: Integer; Spalte: Integer; Nummer : Integer; x : Integer; y : Integer; begin
ngbx:=20; ngby:=50; for feld := 1 to 4 do begin Nummer:=1; x:=10; y:=30; newgroupbox := tgroupbox.Create(Form1); newgroupbox.Name := 'Tipp' + inttostr(feld); newgroupbox.Caption := 'Tipp' + inttostr(feld); newgroupbox.Parent := Form1; newgroupbox.Width := 188; newgroupbox.Height :=225; newgroupbox.Left := ngbx; newgroupbox.Top := ngby; newgroupbox.Visible := true; for Zeile := 1 to 7 do begin for Spalte := 1 to 7 do begin newpanel := Tpanel.create(newgroupbox); newpanel.name := 'T' + inttostr(feld) + inttostr(Nummer); newpanel.caption := inttostr(Nummer); newpanel.parent := newgroupbox; newpanel.Width:=24; newpanel.Height:=24; newpanel.left := x; newpanel.Top := y; newpanel.visible := true;
x:=x+24; Nummer:=Nummer+1; end; y:=y+24; x:=10; end; ngbx := ngbx + 188 +20 ; end; end; |
Nun muss ich nur noch für jedes Panel ein onklick generieren, wo ich eine funktion aufrufe.
Moderiert von Narses: Code- durch Delphi-Tags ersetztModeriert von Narses: Beiträge zusammengefasstVileicht kann mir jemand helfen.
Ich versuche die zur Laufzeit erstellten Panel farblich zu ändern doch es klappt nicht so recht.
Habe zu Testzwecken ein Label erstellt, wo der Name des angeklickten Panel angezeigt wird, was auch funktioniert.
Nur das mit der Farbe klappt nicht.
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure Tform1.Myclick(Sender: TObject); begin Label1.Caption:= (Sender as Tpanel).name ; (sender as Tpanel).Color := clblue; end; |
Moderiert von Narses: Code- durch Delphi-Tags ersetztModeriert von Narses: Beiträge zusammengefasstHabe es geschafft.
Ich musste nur beim erstellen der Panel folgende eigenschaft anpassen.
Delphi-Quelltext
1:
| newpanel.parentbackground := false; |
Moderiert von Narses: Code- durch Delphi-Tags ersetzt