![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
необходимо очистить все TlistBox`ы на странице TTabSheet [D7, WinXP]
Веретен © (2005-11-08 18:04:00)Необходимо очистить все TlistBox`ы на странице TTabSheet?
Джо (2005-11-08 20:26:00) [1]2 Ega32.
По-прежнему сыроватый, но более универсальный вариант. Поборол-таки лень :))
function IsParenthIerarchically (Control: TControl; Parent: TWinControl): Boolean;
begin
Result := False;
while (Control.Parent <> nil) do
begin
Control := Control.Parent;
if Control = Parent then
begin
Result := True;
Break
end
end;
end;
// Главная процедура, инициирующая энумерацию.
// Вызывает callback для каждого контролла, чей класс задается в ControlClass
// и родитель (на любом уровне иерархии) - Parent
procedure EnumerateControls(Parent: TWinControl; ControlClass: TControlClass;
CallBackProc: TNotifyEvent);
var
I: Integer;
Form: TCustomForm;
begin
Form := GetParentForm (Parent);
if Form = nil then
Exit;
for I := 0 to Form.ComponentCount-1 do
if (Form.Components[I] is ControlClass) then
if IsParenthIerarchically(TControl(Form.Components[I]),Parent) then
CallBackProc(Form.Components[I]);
end;
Пример:
TForm12 = class(TForm)
...
private
procedure OnListBoxFound (Sender: TObject);
public
end;
...
procedure TForm12.Button1Click(Sender: TObject);
begin
EnumerateControls(PageControl1.ActivePage,TListBox,OnListBoxFound);
end;
procedure TForm12.OnListBoxFound(Sender: TObject);
begin
ShowMessage (TListBox(Sender).Name);
end;
По-прежнему не уверен, может где и накосячил... но вроде как нет )
Джо (2005-11-08 19:45:00) [2]
> [9] Джо © (08.11.05 19:36)
Один из передаваемых параметров можно убрать:
procedure ClearListBoxes (Parent: TWinControl);
var
I: Integer;
Form: TCustomForm;
begin
Form := GetParentForm (Parent);
if Form = nil then
Exit;
for I := 0 to Form.ComponentCount-1 do
if (Form.Components[I] is TListBox) then
if GetParentTabSheet(TListBox(Form.Components[I])) = Parent then
TListBox (Form.Components[I]).Clear;
end;
Джо (2005-11-08 19:36:00) [3]Стоп. А вообще-то, кажется, можно и без рекурсии обойтись в этом случае. Вот такой навскидку вариант (может, где и накосячил):
// служебная функция, ищет родительский TabSheet для Control
// по всем уровням или возвращает nil, если не найден
function GetParentTabSheet (Control: TControl): TTabSheet;
begin
while (not (Control is TTabSheet)) and (Control.Parent <> nil) do
Control := Control.Parent;
if Control is TTabSheet then
Result := TTabSheet(Control)
else
Result := nil;
end;
// рабочая процедура
procedure ClearListBoxes (Parent: TWinControl; Form: TForm);
var
I: Integer;
begin
for I := 0 to Form.ComponentCount-1 do
if (Form.Components[I] is TListBox) then
if GetParentTabSheet(TListBox(Form.Components[I])) = Parent then
TListBox (Form.Components[I]).Clear;
end;
// пример
procedure TForm12.Button1Click(Sender: TObject);
begin
ClearListBoxes(PageControl1.ActivePage, Self);
end;
Ega23 (2005-11-08 19:29:00) [4]
> Ага :)) Вот и мне тоже лень ;>
Да, пожалуй ты прав. Не "не хватает времени", а именно ЛЕНЬ. :о)
Джо (2005-11-08 19:23:00) [5]
> [6] Ega23 © (08.11.05 19:21)
Ага :)) Вот и мне тоже лень ;>
Ega23 (2005-11-08 19:21:00) [6]
> Какая постановка, такое и решение.
:-)
Откровенно говоря, я уже давным-давно хочу такую универсальую функцию написать. Чтобы рекурсивно по контролам шарилась.
Да всё времени не хватает... :-)
Джо (2005-11-08 19:09:00) [7]
> [4] Ega23 © (08.11.05 18:55)
Какая постановка, такое и решение.
Ega23 (2005-11-08 18:55:00) [8]
> Джо © (08.11.05 18:30) [3]
Низачот.
А если TListBox лежит на Panel3, которая лежит на Panel2, которая лежит на Panel1, которая лежит на искомом TabSheet'е?
Джо (2005-11-08 18:30:00) [9]
procedure ClearListBoxes (Parent: TWinControl);
var
I: Integer;
begin
for I := 0 to Parent.ControlCount-1 do
if Parent.Controls[I] is TListBox then
TListBox(Parent.Controls[I]).Clear;
end;
Пример:
procedure TForm12.Button1Click(Sender: TObject);
begin
ClearListBoxes(PageControl1.ActivePage);
end;
Tonich (2005-11-08 18:24:00) [10]в том что хотим отчистить, а книжки читать не хотим
umbra (2005-11-08 18:17:00) [11]так в чем проблема?