![]() |
Panel inkl. Labels zur Laufzeit erstellen
Hallo,
ich möchte zur Laufzeit mehre Panels erstellen, auf denen sich Labels mit derselben Bezeichnung befinden. Ich könnte natürlich nun zur Laufzeit ein Panel erstllen (TPanel.Create), dann alle Labels, dann die Caption für die Labels angeben und die Positionen für die Labels einstellen und und und... Das ist sehr aufwendig, da es immer dasselbe ist. Gibt es da nicht einen kürzeren Weg? Könnte ich nicht irgendwie mit "type" und irgendeiner Art von Vererbeung soetwas erstellen? ich habe schon folgendes probiert:
Delphi-Quellcode:
Das klappt auch recht gut, nur muss ich dennoch das Label createn, es aufs Panel setzen, Caption angeben, usw.
type
TMeinPanel = class(TPanel) Label1 : TLabel; end; Ich möchte einfach nur ein Panel haben, wo ein paar Labels drauf sind, von denen einige schon Werte bei "Caption" haben und andere nicht, da diese erst bei der Nutzung des Programmes Werte für Caption bekommen. Das ganze möchte ich dann gerne mit TMeinPanel.Create erstellen ohne viel Theater. Gibt es da was, wie man das am besten machen kann, ohne dies über eine function zu machen? Ich möchte nämlich mit einer Variable arbeiten (x := TMainPanel.Create), um so ganz einfach die Captions von den einzelnen Labels ändern zu können. Gruß Sascha |
Re: Panel inkl. Labels zur Laufzeit erstellen
Hallo Sascha,
sieh dir mal TFrame an. Es ist so wie ein Form, du kannst Komponenten etc. drauftun, und das ganze zur Laufzeit erstellen und auf ein Panel setzen. Ist fuer dich wohl die einfachste Loesung. Greetz alcaeus |
Re: Panel inkl. Labels zur Laufzeit erstellen
super, genau das, was ich wollte!! :)
Aber irgendwie bin ich zu blöd, meinen Frame zur Laufzeit auf meinem Form1 sichtbar zu machen :( |
Re: Panel inkl. Labels zur Laufzeit erstellen
Hallo Sascha,
dann will ich mal wieder IE-Coden ;)
Delphi-Quellcode:
Wichtig: Ich habe keine Resourcenschutzbloecke verwendet, da ich die Variable ja nur lokal deklariert habe. Deklariere die Variable fuer das Form private in TForm1, erstelle das Frame im OnCreate. Um das Freigeben musst du dich nicht kuemmern, das Frame wird automatisch freigegeben, sobald Form1 freigegeben wird (durch die Angabe von "Self" als Owner).
var
DeinFrame: TDeinFrame; begin // Frame erstellen DeinFrame := TDeinFrame.Create(Self); // Einstellungen vornehmen DeinFrame.Visible := True; DeinFrame.Align := alClient; // Dem Frame einen Parent geben, und somit die Anzeige veranlassen DeinFrame.Parent := Panel1; end; Greetz alcaeus |
Re: Panel inkl. Labels zur Laufzeit erstellen
Ah danke, ich hatte nicht Visible auf true gesetzt, alles andere hatte ich soweit ;)
|
Re: Panel inkl. Labels zur Laufzeit erstellen
Und wenn Du alles anstelle eines Frames als "Klasse" machen möchtest, empfehle ich Dir GExperts. Mit diesem Tool kannst Du unter anderem auf dem Formular alles Designen wie Du es später haben möchtest und dann die Komponenten markieren. Ein Rechtsklick und "Components to Code" generiert Dir einen Source in der Zwischenablage. Anbei ein Beispiel:
Delphi-Quellcode:
Änderungen am Code sind dann leider jedoch nicht mehr soo einfach durchzuführen, wie in der IDE.
var
BitBtn3: TBitBtn; DelFilesB: TBitBtn; ImportFilesB: TBitBtn; InFilesLV: TListView; BitBtn3 := TBitBtn.Create(Self); DelFilesB := TBitBtn.Create(Self); ImportFilesB := TBitBtn.Create(Self); InFilesLV := TListView.Create(Self); with BitBtn3 do begin Name := 'BitBtn3'; Parent := FilesTopP; Left := 216; Top := 224; Width := 97; Height := 25; Caption := 'BitBtn3'; TabOrder := 3; end; with DelFilesB do begin Name := 'DelFilesB'; Parent := FilesTopP; Left := 112; Top := 224; Width := 97; Height := 25; Caption := 'DelFilesB'; TabOrder := 2; end; with ImportFilesB do begin Name := 'ImportFilesB'; Parent := FilesTopP; Left := 8; Top := 224; Width := 97; Height := 25; Caption := 'ImportFilesB'; TabOrder := 1; end; with InFilesLV do begin Name := 'InFilesLV'; Parent := FilesTopP; Left := 7; Top := 16; Width := 730; Height := 201; Anchors := [akLeft, akTop, akRight, akBottom]; with Columns.Add do begin Caption := 'Verzeichnis'; Width := 200; end; with Columns.Add do begin Caption := 'Datei'; Width := 100; end; with Columns.Add do begin Caption := 'Ausgabe'; Width := 250; end; with Columns.Add do begin end; TabOrder := 0; ViewStyle := vsReport; end; Michael:) |
Re: Panel inkl. Labels zur Laufzeit erstellen
Ok, das Klassentypische musst Du natürlich noch drumherumstricken ;)
|
Re: Panel inkl. Labels zur Laufzeit erstellen
Danke,aber ich glaube die Sache mit den Frames ist bei meiner Andwendung einfacher :D
|
Re: Panel inkl. Labels zur Laufzeit erstellen
Hallo zusammen,
bis hierhin bin ich nun auch gekommen, aber wenn ich nun ein Label auf dem Frame verändern will, bekomme ich beim Compilieren die Fehlermeldung Zitat:
Delphi-Quellcode:
Was habe ich dabei übersehen?
procedure TFormMain.FirmaAnzeigen;
begin if Assigned(FrameInhalt) then FrameInhalt.Destroy; FrameInhalt := TFrameFirma.Create(self); FrameInhalt.Parent := FormMain; FrameInhalt.Align := alClient; FrameInhalt.LabelFirma.Caption := '1232131'; FrameInhalt.Show; end; Gruß Manfred |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 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 by Thomas Breitkreuz