我如何创建一个新的框架实例以托管到 Tpagecontrol 中的每个动态选项卡中?
How can i create a new frame instance to be hosted into each dynamic tabsheet in Tpagecontrol?
我在页面控件中创建了动态标签表,然后每个页面都需要承载一个包含多个组件(如 Tedit 等)的框架。我框架中的这些 Tedit 主机数据来自 ini 文件。
如果我做我的 tabsheet 静态它工作!但是我需要做我的标签表动态...我试图创建一个框架但是当我放入我的循环时我得到错误
我该怎么做?
谢谢!
unit DlgXRechnung;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Xml.xmldom,
Xml.XMLIntf, Vcl.Buttons, Xml.XMLDoc, IniFiles, Vcl.ComCtrls;
type
TDlg_XRechnung = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
X_Rechnung: TXMLDocument;
Memo_XML: TMemo;
Btn_Laden: TBitBtn;
OpenDialog_Datei: TOpenDialog;
Panel5: TPanel;
Label1: TLabel;
Edit_LeitwegeID: TLabeledEdit;
Edit_Bestellnummer: TLabeledEdit;
Edit_Projektreferenz: TLabeledEdit;
Edit_Vertragsnummer: TLabeledEdit;
Edit_Rechnungsnummer: TLabeledEdit;
Edit_Rechnungsdatum: TDateTimePicker;
Label2: TLabel;
Label3: TLabel;
Edit_Leistungsdatum: TDateTimePicker;
Edit_Bemerkung: TMemo;
Label4: TLabel;
Btn_XML_erstellen: TBitBtn;
Btn_Close: TBitBtn;
Panel6: TPanel;
Label5: TLabel;
Edit_Rechnungsersteller_Name: TLabeledEdit;
Edit_Rechnungsersteller_Adresse: TLabeledEdit;
Edit_Rechnungsersteller_PLZ: TLabeledEdit;
Edit_Rechnungsersteller_UST_ID: TLabeledEdit;
Edit_Rechnungsersteller_Ort: TLabeledEdit;
Edit_Rechnungsersteller_Land: TLabeledEdit;
Edit_Rechnungsersteller_Firmenbuch: TLabeledEdit;
Edit_Rechnungsersteller_Steuerart: TLabeledEdit;
GroupBox1: TGroupBox;
Edit_Waehrung_Rechnung: TLabeledEdit;
Edit_Waehrung_UST: TLabeledEdit;
Panel7: TPanel;
Label6: TLabel;
Edit_Rechnungsempfänger_Name: TLabeledEdit;
Edit_Rechnungsempfänger_Adresse: TLabeledEdit;
Edit_Rechnungsempfänger_PLZ: TLabeledEdit;
LabeledEdit4: TLabeledEdit;
Edit_Rechnungsempfänger_Ort: TLabeledEdit;
Edit_Rechnungsempfänger_Land: TLabeledEdit;
LabeledEdit7: TLabeledEdit;
LabeledEdit8: TLabeledEdit;
PC_Positionen: TPageControl;
procedure Btn_LadenClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Btn_XML_erstellenClick(Sender: TObject);
procedure Btn_CloseClick(Sender: TObject);
procedure PC_PositionenChange(Sender: TObject);
private
INIDateiname : string;
INIDatei : TIniFile;
PDFDatei : string;
XRechnungDatei : string;
Version : integer;
DebugMode : integer;
AnzahlPositinen : integer;
procedure INIDatei_einlesen;
procedure XML_erstellen;
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Dlg_XRechnung: TDlg_XRechnung;
implementation
{$R *.dfm}
// -----------------------------------------------------------------------------
procedure TDlg_XRechnung.Btn_CloseClick(Sender: TObject);
begin
Close;
end;
// -----------------------------------------------------------------------------
procedure TDlg_XRechnung.Btn_LadenClick(Sender: TObject);
begin
if OpenDialog_Datei.Execute then
begin
INIDateiname := OpenDialog_Datei.FileName;
end;
if Trim(INIDateiname) <> '' then INIDatei_einlesen;
end;
// -----------------------------------------------------------------------------
procedure TDlg_XRechnung.Btn_XML_erstellenClick(Sender: TObject);
begin
XML_erstellen;
end;
// -----------------------------------------------------------------------------
procedure TDlg_XRechnung.FormCreate(Sender: TObject);
begin
INIDateiname := '';
end;
// -----------------------------------------------------------------------------
procedure TDlg_XRechnung.FormShow(Sender: TObject);
begin
if Trim(ParamStr(1)) <> '' then
begin
INIDateiname := ParamStr(1);
INIDatei_einlesen;
end;
end;
// -----------------------------------------------------------------------------
procedure TDlg_XRechnung.INIDatei_einlesen;
var NeueSeite : TTabSheet;
i,l: Integer;
begin
try
INIDatei := TIniFile.Create(INIDateiname);
Version := INIDatei.ReadInteger('INI','Version', 1);
DebugMode := INIDatei.ReadInteger('INI','DebugMode', 0);
PDFDatei := INIDatei.ReadString('PDF','PDFName', '');
XRechnungDatei := INIDatei.ReadString('PDF','XInvoice', '');
Edit_LeitwegeID.Text := INIDatei.ReadString('InvData','BT-10', '');
Edit_Bestellnummer.Text := INIDatei.ReadString('InvData','BT-13', '');
Edit_Projektreferenz.Text := INIDatei.ReadString('InvData','BT-11', '');
Edit_Vertragsnummer.Text := INIDatei.ReadString('InvData','BT-12', '');
Edit_Rechnungsnummer.Text := INIDatei.ReadString('InvData','BT-1', '');
Edit_Rechnungsdatum.Date := INIDatei.ReadDate('InvData','BT-2', now);
Edit_Leistungsdatum.Date := INIDatei.ReadDate('InvData','BT-9', now);
Edit_Bemerkung.Text := INIDatei.ReadString('InvData','BT-22', '');
Edit_Rechnungsersteller_Name.Text := INIDatei.ReadString('InvErst','BT-27', '');
Edit_Rechnungsersteller_UST_ID.Text := INIDatei.ReadString('InvErst','BT-31', '');
Edit_Rechnungsersteller_Adresse.Text := INIDatei.ReadString('InvErst','BT-35', '') + INIDatei.ReadString('InvErst','BT-36', '');
Edit_Rechnungsersteller_PLZ.Text := INIDatei.ReadString('InvErst','BT-38', '');
Edit_Rechnungsersteller_Ort.Text := INIDatei.ReadString('InvErst','BT-37', '');
Edit_Rechnungsersteller_Land.Text := INIDatei.ReadString('InvErst','BT-40', '');
Edit_Rechnungsempfänger_Name.Text := INIDatei.ReadString('InvEmp','BT-44','');
Edit_Rechnungsempfänger_Adresse.Text := INIDatei.ReadString('InvEmp','BT-50', '') + INIDatei.ReadString('InvEmp','BT-51', '');
Edit_Rechnungsempfänger_PLZ.Text := INIDatei.ReadString('InvEmp','BT-53', '');
Edit_Rechnungsempfänger_Ort.Text := INIDatei.ReadString('InvEmp','BT-52', '');
Edit_Rechnungsempfänger_Land.Text := INIDatei.ReadString('InvEmp','BT-55', '');
AnzahlPositinen := INIDatei.ReadInteger('POS','AnzPos', 1);
for i := 1 to AnzahlPositinen do
begin
NeueSeite := TTabSheet.Create(PC_Positionen);
NeueSeite.PageControl := PC_Positionen;
NeueSeite.Caption := 'Position ' + IntToStr(i);
end;
finally
INIDatei.Free;
end;
end;
首先使用 IDE 设计一个 TFrame
(很像你设计一个 TForm)。添加您需要的所有项目,例如 TEdit
。将框架的单位添加到表单单位的使用子句中。创建框架时,您需要指定所有者。您可以使用与您创建的 TabSheet 相同的内容。您应该清除名称 属性 或为每个名称设置一个合适的唯一名称。
然后在你用来创建TabSheet
的循环中,创建一个新的框架实例,将他的父属性赋值给刚创建的TabSheet
,然后读取所有项目来自 INI 文件的值。
顺便再读一遍我对你上一个问题的回答()。它已经包含了所有需要的信息。
我在页面控件中创建了动态标签表,然后每个页面都需要承载一个包含多个组件(如 Tedit 等)的框架。我框架中的这些 Tedit 主机数据来自 ini 文件。 如果我做我的 tabsheet 静态它工作!但是我需要做我的标签表动态...我试图创建一个框架但是当我放入我的循环时我得到错误
我该怎么做?
谢谢!
unit DlgXRechnung;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Xml.xmldom,
Xml.XMLIntf, Vcl.Buttons, Xml.XMLDoc, IniFiles, Vcl.ComCtrls;
type
TDlg_XRechnung = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
X_Rechnung: TXMLDocument;
Memo_XML: TMemo;
Btn_Laden: TBitBtn;
OpenDialog_Datei: TOpenDialog;
Panel5: TPanel;
Label1: TLabel;
Edit_LeitwegeID: TLabeledEdit;
Edit_Bestellnummer: TLabeledEdit;
Edit_Projektreferenz: TLabeledEdit;
Edit_Vertragsnummer: TLabeledEdit;
Edit_Rechnungsnummer: TLabeledEdit;
Edit_Rechnungsdatum: TDateTimePicker;
Label2: TLabel;
Label3: TLabel;
Edit_Leistungsdatum: TDateTimePicker;
Edit_Bemerkung: TMemo;
Label4: TLabel;
Btn_XML_erstellen: TBitBtn;
Btn_Close: TBitBtn;
Panel6: TPanel;
Label5: TLabel;
Edit_Rechnungsersteller_Name: TLabeledEdit;
Edit_Rechnungsersteller_Adresse: TLabeledEdit;
Edit_Rechnungsersteller_PLZ: TLabeledEdit;
Edit_Rechnungsersteller_UST_ID: TLabeledEdit;
Edit_Rechnungsersteller_Ort: TLabeledEdit;
Edit_Rechnungsersteller_Land: TLabeledEdit;
Edit_Rechnungsersteller_Firmenbuch: TLabeledEdit;
Edit_Rechnungsersteller_Steuerart: TLabeledEdit;
GroupBox1: TGroupBox;
Edit_Waehrung_Rechnung: TLabeledEdit;
Edit_Waehrung_UST: TLabeledEdit;
Panel7: TPanel;
Label6: TLabel;
Edit_Rechnungsempfänger_Name: TLabeledEdit;
Edit_Rechnungsempfänger_Adresse: TLabeledEdit;
Edit_Rechnungsempfänger_PLZ: TLabeledEdit;
LabeledEdit4: TLabeledEdit;
Edit_Rechnungsempfänger_Ort: TLabeledEdit;
Edit_Rechnungsempfänger_Land: TLabeledEdit;
LabeledEdit7: TLabeledEdit;
LabeledEdit8: TLabeledEdit;
PC_Positionen: TPageControl;
procedure Btn_LadenClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Btn_XML_erstellenClick(Sender: TObject);
procedure Btn_CloseClick(Sender: TObject);
procedure PC_PositionenChange(Sender: TObject);
private
INIDateiname : string;
INIDatei : TIniFile;
PDFDatei : string;
XRechnungDatei : string;
Version : integer;
DebugMode : integer;
AnzahlPositinen : integer;
procedure INIDatei_einlesen;
procedure XML_erstellen;
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Dlg_XRechnung: TDlg_XRechnung;
implementation
{$R *.dfm}
// -----------------------------------------------------------------------------
procedure TDlg_XRechnung.Btn_CloseClick(Sender: TObject);
begin
Close;
end;
// -----------------------------------------------------------------------------
procedure TDlg_XRechnung.Btn_LadenClick(Sender: TObject);
begin
if OpenDialog_Datei.Execute then
begin
INIDateiname := OpenDialog_Datei.FileName;
end;
if Trim(INIDateiname) <> '' then INIDatei_einlesen;
end;
// -----------------------------------------------------------------------------
procedure TDlg_XRechnung.Btn_XML_erstellenClick(Sender: TObject);
begin
XML_erstellen;
end;
// -----------------------------------------------------------------------------
procedure TDlg_XRechnung.FormCreate(Sender: TObject);
begin
INIDateiname := '';
end;
// -----------------------------------------------------------------------------
procedure TDlg_XRechnung.FormShow(Sender: TObject);
begin
if Trim(ParamStr(1)) <> '' then
begin
INIDateiname := ParamStr(1);
INIDatei_einlesen;
end;
end;
// -----------------------------------------------------------------------------
procedure TDlg_XRechnung.INIDatei_einlesen;
var NeueSeite : TTabSheet;
i,l: Integer;
begin
try
INIDatei := TIniFile.Create(INIDateiname);
Version := INIDatei.ReadInteger('INI','Version', 1);
DebugMode := INIDatei.ReadInteger('INI','DebugMode', 0);
PDFDatei := INIDatei.ReadString('PDF','PDFName', '');
XRechnungDatei := INIDatei.ReadString('PDF','XInvoice', '');
Edit_LeitwegeID.Text := INIDatei.ReadString('InvData','BT-10', '');
Edit_Bestellnummer.Text := INIDatei.ReadString('InvData','BT-13', '');
Edit_Projektreferenz.Text := INIDatei.ReadString('InvData','BT-11', '');
Edit_Vertragsnummer.Text := INIDatei.ReadString('InvData','BT-12', '');
Edit_Rechnungsnummer.Text := INIDatei.ReadString('InvData','BT-1', '');
Edit_Rechnungsdatum.Date := INIDatei.ReadDate('InvData','BT-2', now);
Edit_Leistungsdatum.Date := INIDatei.ReadDate('InvData','BT-9', now);
Edit_Bemerkung.Text := INIDatei.ReadString('InvData','BT-22', '');
Edit_Rechnungsersteller_Name.Text := INIDatei.ReadString('InvErst','BT-27', '');
Edit_Rechnungsersteller_UST_ID.Text := INIDatei.ReadString('InvErst','BT-31', '');
Edit_Rechnungsersteller_Adresse.Text := INIDatei.ReadString('InvErst','BT-35', '') + INIDatei.ReadString('InvErst','BT-36', '');
Edit_Rechnungsersteller_PLZ.Text := INIDatei.ReadString('InvErst','BT-38', '');
Edit_Rechnungsersteller_Ort.Text := INIDatei.ReadString('InvErst','BT-37', '');
Edit_Rechnungsersteller_Land.Text := INIDatei.ReadString('InvErst','BT-40', '');
Edit_Rechnungsempfänger_Name.Text := INIDatei.ReadString('InvEmp','BT-44','');
Edit_Rechnungsempfänger_Adresse.Text := INIDatei.ReadString('InvEmp','BT-50', '') + INIDatei.ReadString('InvEmp','BT-51', '');
Edit_Rechnungsempfänger_PLZ.Text := INIDatei.ReadString('InvEmp','BT-53', '');
Edit_Rechnungsempfänger_Ort.Text := INIDatei.ReadString('InvEmp','BT-52', '');
Edit_Rechnungsempfänger_Land.Text := INIDatei.ReadString('InvEmp','BT-55', '');
AnzahlPositinen := INIDatei.ReadInteger('POS','AnzPos', 1);
for i := 1 to AnzahlPositinen do
begin
NeueSeite := TTabSheet.Create(PC_Positionen);
NeueSeite.PageControl := PC_Positionen;
NeueSeite.Caption := 'Position ' + IntToStr(i);
end;
finally
INIDatei.Free;
end;
end;
首先使用 IDE 设计一个 TFrame
(很像你设计一个 TForm)。添加您需要的所有项目,例如 TEdit
。将框架的单位添加到表单单位的使用子句中。创建框架时,您需要指定所有者。您可以使用与您创建的 TabSheet 相同的内容。您应该清除名称 属性 或为每个名称设置一个合适的唯一名称。
然后在你用来创建TabSheet
的循环中,创建一个新的框架实例,将他的父属性赋值给刚创建的TabSheet
,然后读取所有项目来自 INI 文件的值。
顺便再读一遍我对你上一个问题的回答(