Q: 如何清除一個視覺化元件上面所有子控制的 Text 屬性
A: 可以使用下面的函式
procedure ClearText(AWinControl: TWinControl);
var
i: integer;
pi: PPropInfo;
AChildControl: TWinControl;
begin
for i := 0 to AWinControl.ControlCount-1 do
begin
if not (AWinControl.Controls[i] is TWinControl) then
continue;
AChildControl := TWinControl(AWinControl.Controls[i]);
if AChildControl.ControlCount > 0 then
ClearText(AChildControl); // recursive
pi := GetPropInfo(AChildControl.ClassInfo, 'Text');
if pi = nil then
continue;
SetStrProp(AWinControl.Controls[i], pi, '');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClearText(Panel1);
end;
procedure ClearText(AWinControl: TWinControl);
var
i: integer;
pi: PPropInfo;
AChildControl: TWinControl;
begin
if not (AWinControl is TWinControl) then
Exit;
for i := 0 to AWinControl.ControlCount-1 do
begin
if not (AWinControl.Controls[i] is TWinControl) then
continue;
AChildControl := TWinControl(AWinControl.Controls[i]);
if AChildControl.ControlCount > 0 then
ClearText(AChildControl); // recursive
pi := GetPropInfo(AChildControl.ClassInfo, 'Text');
if pi = nil then
continue;
SetStrProp(AWinControl.Controls[i], pi, '');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClearText(Panel1);
end;
// 遞迴清除一個 TWinControl 上所有子控制的 Text 屬性
procedure ClearText(AWinControl: TWinControl);
var
i: integer;
pi: PPropInfo;
AChildControl: TWinControl;
begin
if not (AWinControl is TWinControl) then
Exit;
for i := 0 to AWinControl.ControlCount-1 do
begin
if not (AWinControl.Controls[i] is TWinControl) then
continue;
AChildControl := TWinControl(AWinControl.Controls[i]);
if AChildControl.ControlCount > 0 then
ClearText(AChildControl); // recursive
pi := GetPropInfo(AChildControl.ClassInfo, 'Text');
if pi = nil then
continue;
SetStrProp(AWinControl.Controls[i], pi, '');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClearText(Panel1);
end;
procedure ClearText(AWinControl: TWinControl);
var
i: integer;
pi: PPropInfo;
AChildControl: TWinControl;
begin
if not (AWinControl is TWinControl) then
Exit;
for i := 0 to AWinControl.ControlCount-1 do
begin
if not (AWinControl.Controls[i] is TWinControl) then
continue;
AChildControl := TWinControl(AWinControl.Controls[i]);
if AChildControl.ControlCount > 0 then
ClearText(AChildControl); // recursive
pi := GetPropInfo(AChildControl.ClassInfo, 'Text');
if pi = nil then
continue;
SetStrProp(AWinControl.Controls[i], pi, '');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClearText(Panel1);
end;
procedure ClearText(AWinControl: TWinControl);
var
i: integer;
pi: PPropInfo;
AChildControl: TWinControl;
begin
if not (AWinControl is TWinControl) then
Exit;
for i := 0 to AWinControl.ControlCount-1 do
begin
if not (AWinControl.Controls[i] is TWinControl) then
continue;
AChildControl := TWinControl(AWinControl.Controls[i]);
if AChildControl.ControlCount > 0 then
ClearText(AChildControl); // recursive
pi := GetPropInfo(AChildControl.ClassInfo, 'Text');
if pi = nil then
continue;
SetStrProp(AWinControl.Controls[i], pi, '');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClearText(Panel1);
end;
               (
geocities.com/huanlin_tsai)