DELPHI-如何在tpageControl中将tlabeledit插入动态选项卡 [英] DELPHI -how can i insert tlabeledit to dynamic tabsheet in TpageControl
问题描述
我需要拥有这个ini文件,我在动态创建的动态ttabsheet中提到了它!如您所见ini文件,在我的页面控件中,它分为三部分,每部分以001-002-003开头,然后让第一个选项卡中的部分以001开头,第二个选项卡中的部分以002开头,第三选项卡中的内容以003开头.
i need to have this ini file which i mentioned it in my dynamic ttabsheet which i created it dynamically ! as you see ini file , it has three parts each start with 001-002-003 and then let those which start with 001 in first tabsheet , those start with 002 in second tabsheet and those start with 003 in thired tabsheet in my page control .
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
我不知道该怎么办!?有什么主意吗?
i dont know how to do !? any idea ?
谢谢
推荐答案
代码显示[InvData]部分时,您显示的INI文件的[POS]部分中包含所有数据.解决这个问题.
You have every data in the [POS] section in the INI file you show while your code expact section [InvData]. Fix that.
在您的PageControl中,创建TabSheet是不够的,还必须创建一个新的框架实例以托管到每个页面中.所有框架都属于同一类,并带有主机编辑,复选框等以托管数据.
In your PageControl, it is not enough to create TabSheet, you must also create a new frame instance to be hosted into each page. All frames are the same class and host edit, checkbox and so on to host data.
然后,您必须在for循环内部读取除count以外的数据,以创建页面控件.要读取数据,必须将loop变量与固定部分组合以构建密钥.像这样:
Then you must read the data, except count, inside you for-loop to create the page control. To read the data, you must combine the loop variable with fixed part to build the key. Something like this:
Edit1.Text := IniFile.ReadString('POS', Format('%03.3dBT-154', [I]), 'Some default value');
在我的示例中,Edit1是框架的一个字段.
In my example, Edit1 is one field of the frame.
这篇关于DELPHI-如何在tpageControl中将tlabeledit插入动态选项卡的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!