我撰写了一个由动态创建的小组组成的方案,每个小组都有几个组成部分,包括一个删除小组和增加小组纽州。 每个小组在小组人数之间显示20个餐厅,在小组组数结束时,在Click必须增加另一个小组,而OnClick为了删除,必须销毁其母子,然后将所有其他小组移至删除的空间。 我已经尝试过使用阵列的方法,但不幸的是,在穿过一阵阵列时,我就去过了中间物体。
如果情况明显或事先得到答复,但我刚刚在本周早些时候开始教授自己的联络处,那么我就知道所有术语,或者如果有一个等级的 lie子,我会做这些事情。
我撰写了一个由动态创建的小组组成的方案,每个小组都有几个组成部分,包括一个删除小组和增加小组纽州。 每个小组在小组人数之间显示20个餐厅,在小组组数结束时,在Click必须增加另一个小组,而OnClick为了删除,必须销毁其母子,然后将所有其他小组移至删除的空间。 我已经尝试过使用阵列的方法,但不幸的是,在穿过一阵阵列时,我就去过了中间物体。
如果情况明显或事先得到答复,但我刚刚在本周早些时候开始教授自己的联络处,那么我就知道所有术语,或者如果有一个等级的 lie子,我会做这些事情。
仔细利用Align财产,你可以更好地这样做。
如果我有三个小组与下文所示的调整一致:
|-----------------------|
| |
| alTop |
| |
|-----------------------|
|-----------------------|
| |
| alTop |
| |
|-----------------------|
|-----------------------|
| |
| alTop |
| |
|-----------------------|
我删除了第二点,然后第三点将自动消失。
在另一个母子控制(即另一个小组)内,所有三个小组都可以界定我们所说的“alTop”指的是什么。
如果你想改变这种影响,那么你就不得不稍加狂热。 您的目标是什么? 如果是的话,我相信我们能够拿出一些东西。
www.un.org/Depts/DGACM/index_spanish.htm Edit——我撰写了一些可能给你一些想法的法典:。
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TWhere = (wAtBeginning, wAtEnd);
type
TfrmMain = class(TForm)
panCtrl: TPanel;
panHost: TPanel;
btnAddPan: TBitBtn;
btnDelPan: TBitBtn;
lbAddWhere: TListBox;
lbDelWhere: TListBox;
procedure btnAddPanClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btnDelPanClick(Sender: TObject);
private
function GetPanel(HostPanel: TPanel; Where: TWhere): TPanel;
function BottomOfLastPanel(HostPanel: TPanel): integer;
procedure AddPanel(HostPanel: TPanel; AddWhere: TWhere);
procedure DelPanel(HostPanel: TPanel; DelWhere: TWhere);
procedure DelThisPanel(Sender: TObject);
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.AddPanel(HostPanel: TPanel; AddWhere: TWhere);
var
pnl: TPanel;
btn: TBitBtn;
begin
pnl := TPanel.Create(HostPanel);
with pnl do begin
case AddWhere of
wAtBeginning: Top := 0;
wAtEnd: Top := BottomOfLastPanel(HostPanel);
end;
Align := alTop;
Parent := HostPanel;
Caption := DateTimeToStr(Now);
end;
btn := TBitBtn.Create(pnl);
with btn do begin
Parent := pnl;
Left := 0;
Top := 0;
Width := 100;
Height := 30;
Align := alLeft;
Caption := Delete this panel ;
OnClick := DelThisPanel;
end;
end;
function TfrmMain.BottomOfLastPanel(HostPanel: TPanel): integer;
begin
//scan through all panels contained inside the host panel
//return the bottom of the lowest one (highest "top" value)
Result := 0;
if Assigned(GetPanel(HostPanel,wAtEnd)) then begin
Result := GetPanel(HostPanel,wAtEnd).Top + GetPanel(HostPanel,wAtEnd).Height;
end;
end;
procedure TfrmMain.btnAddPanClick(Sender: TObject);
begin
case lbAddWhere.ItemIndex of
0: AddPanel(panHost,wAtBeginning);
1: AddPanel(panHost,wAtEnd);
end;
end;
procedure TfrmMain.btnDelPanClick(Sender: TObject);
begin
case lbDelWhere.ItemIndex of
0: DelPanel(panHost,wAtBeginning);
1: DelPanel(panHost,wAtEnd);
end;
end;
procedure TfrmMain.DelPanel(HostPanel: TPanel; DelWhere: TWhere);
var
pnlToDelete: TPanel;
begin
case DelWhere of
wAtBeginning: pnlToDelete := GetPanel(HostPanel,wAtBeginning);
wAtEnd: pnlToDelete := GetPanel(HostPanel,wAtEnd);
end;
if Assigned(pnlToDelete) then begin
FreeAndNil(pnlToDelete);
end;
end;
procedure TfrmMain.DelThisPanel(Sender: TObject);
var
parentPnl: TPanel;
begin
//delete the parent panel of this button
if Sender is TBitBtn then begin
if (Sender as TBitBtn).Parent is TPanel then begin
parentPnl := (Sender as TBitBtn).Parent as TPanel;
parentPnl.Parent := nil;
FreeAndNil(parentPnl);
end;
end;
end;
procedure TfrmMain.FormShow(Sender: TObject);
begin
lbAddWhere.ItemIndex := 1;
lbDelWhere.ItemIndex := 1;
end;
function TfrmMain.GetPanel(HostPanel: TPanel; Where: TWhere): TPanel;
var
i: integer;
begin
Result := nil;
for i := 0 to panHost.ControlCount - 1 do begin
if panHost.Controls[i] is TPanel then begin
Result := (panHost.Controls[i] as TPanel);
if Where = wAtBeginning then begin
Break;
end;
end;
end;
end;
end.
www.un.org/Depts/DGACM/index_spanish.htm 这里是《外汇储备法》:。
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = Add / Delete Panel Demo
ClientHeight = 520
ClientWidth = 637
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = Tahoma
Font.Style = []
OldCreateOrder = False
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object panCtrl: TPanel
Left = 0
Top = 0
Width = 305
Height = 520
Align = alLeft
TabOrder = 0
object btnAddPan: TBitBtn
Left = 8
Top = 8
Width = 125
Height = 75
Caption = Add panel
TabOrder = 0
OnClick = btnAddPanClick
end
object btnDelPan: TBitBtn
Left = 8
Top = 89
Width = 125
Height = 75
Caption = Remove panel
TabOrder = 1
OnClick = btnDelPanClick
end
object lbAddWhere: TListBox
Left = 139
Top = 8
Width = 150
Height = 75
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = Tahoma
Font.Style = []
ItemHeight = 16
Items.Strings = (
Add to the top
Add to the bottom )
ParentFont = False
TabOrder = 2
end
object lbDelWhere: TListBox
Left = 139
Top = 89
Width = 150
Height = 75
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = Tahoma
Font.Style = []
ItemHeight = 16
Items.Strings = (
Delete from the top
Delete from the bottom )
ParentFont = False
TabOrder = 3
end
end
object panHost: TPanel
Left = 305
Top = 0
Width = 332
Height = 520
Align = alClient
TabOrder = 1
ExplicitLeft = 392
ExplicitTop = 264
ExplicitWidth = 185
ExplicitHeight = 41
end
end
如果你使用动态阵列,实际上删除你删除小组时的内容,你就可以使用你的阵容战略。 或者,你总是能够检查该要素是否被分配到签署时。
然而,你更不用说用TComponentList的解决办法取代你的阵容解决办法,这样就可以更容易地增加和删除名单上的小组,而设计的只是这种情况。