0

我需要有这个我在动态创建的动态 ttabsheet 中提到的 ini 文件!如您所见,它包含三个部分,每个部分都以 001-002-003 开头,然后让那些在第一个标签页中以 001 开头的部分,在第二个标签页中以 002 开头的部分以及在我的页面控件中以第三个标签页中以 003 开头的部分。

  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;

这是我的ini文件

[POS] 
AnzPos=3 
 
;xxx ist die Zähl-Nr der Positionen mit Vornull 
001BT-155=643 
001BT-153=EID32 REI90-XC1-AN5C Bereich D  
001BT-129=219,85
001BT-130=M2 
001BT-152=19 
001BT-146=43,50 
001BT-154=EID 32/120 Spannbetondeckenplatte; d = 32 cmg 
001BT-131=9563,48 
001BT-132=11380,54 

002BT-155=299 
002BT-153=Auflagerstreifen 10X70X10 
002BT-129=7 
001BT-130=MTR
002BT-152=19
002BT-146=42,5 
002BT-154=Hartgummiauflagerstreifen 10 x 70 mm auf 10 m Roll 
002BT-131=297,5 
002BT-132=354,03 

003BT-155=40 
003BT-153=Stahlwechsel, grundiert (F0 
003BT-129=411.04 
001BT-130=CMT
003BT-152=19 
003BT-146=3,8 
003BT-154=Stahlwechsel, grundiert (Flachstahl) Netto- nicht rabattierfähig. 
003BT-131=1561.95
003BT-132=1858,72

我不知道该怎么办!?任何的想法 ?

谢谢

4

1 回答 1

2

您在显示的 INI 文件中的 [POS] 部分中拥有所有数据,而您的代码显示部分 [InvData]。修复它。

在您的 PageControl 中,仅创建 TabSheet 是不够的,您还必须创建一个新的框架实例以托管到每个页面中。所有框架都是相同的类和宿主编辑、复选框等来宿主数据。

然后,您必须在 for 循环中读取除计数之外的数据以创建页面控件。要读取数据,您必须将循环变量与固定部分结合起来构建密钥。像这样的东西:

Edit1.Text := IniFile.ReadString('POS', Format('%03.3dBT-154', [I]), 'Some default value');

在我的示例中,Edit1 是帧的一个字段。

于 2021-04-04T16:29:35.273 回答