Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Panel inkl. Labels zur Laufzeit erstellen (https://www.delphipraxis.net/39678-panel-inkl-labels-zur-laufzeit-erstellen.html)

Sascha L 6. Feb 2005 13:02


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:
type
TMeinPanel = class(TPanel)
Label1 : TLabel;
end;
Das klappt auch recht gut, nur muss ich dennoch das Label createn, es aufs Panel setzen, Caption angeben, usw.

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

alcaeus 6. Feb 2005 13:12

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

Sascha L 6. Feb 2005 13:26

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 :(

alcaeus 6. Feb 2005 13:35

Re: Panel inkl. Labels zur Laufzeit erstellen
 
Hallo Sascha,

dann will ich mal wieder IE-Coden ;)

Delphi-Quellcode:
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;
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).

Greetz
alcaeus

Sascha L 6. Feb 2005 13:42

Re: Panel inkl. Labels zur Laufzeit erstellen
 
Ah danke, ich hatte nicht Visible auf true gesetzt, alles andere hatte ich soweit ;)

m.wollert 6. Feb 2005 14:08

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:
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;
Änderungen am Code sind dann leider jedoch nicht mehr soo einfach durchzuführen, wie in der IDE.

Michael:)

m.wollert 6. Feb 2005 14:09

Re: Panel inkl. Labels zur Laufzeit erstellen
 
Ok, das Klassentypische musst Du natürlich noch drumherumstricken ;)

Sascha L 6. Feb 2005 14:17

Re: Panel inkl. Labels zur Laufzeit erstellen
 
Danke,aber ich glaube die Sache mit den Frames ist bei meiner Andwendung einfacher :D

BrinkschulteManfred 11. Nov 2005 09:37

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:

Undefinierter Bezeichner: 'LabelFirma'
Mein Code dazu sieht so aus:

Delphi-Quellcode:
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;
Was habe ich dabei übersehen?

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