Читать «Советы по Delphi. Версия 1.0.6» онлайн - страница 48
Валентин Озеров
else lpfnCompare:= SortProc;
hParent:= TVI_ROOT;
lParam:= Data;
Result:= TreeView_SortChildrenCB(Handle, SortCB, 0);
end;
if Items.Count > 0 then begin
Node:= Items.GetFirstNode;
while Node <> nil do begin
if Node.HasChildren then Node.CustomSort(SortProc, Data);
Node:= Node.GetNext;
end;
end;
end;
end;
//Регистрация компонента
procedure Register;
begin
RegisterComponents('Win95', [THETreeView]);
end;
end.
Разное
Создание компонента во время работы приложения
Var
MyButton: TButton;
MyButton:= TButton.Create(MyForm); // MyForm теперь "обладает" MyButton
with MyButton do BEGIN
Parent:= MyForm; // Выбираем родителей. MyForm "усыновляет" MyButton
height:= 32;
width:= 128;
caption:= 'Я здесь!';
left := (MyForm.ClientWidth – width) div 2;
top := (MyForm.ClientHeight – height) div 2;
END;
Inprise также рассказывала об этом в выпусках TechInfo.
Поищите
на публичном WWW или FTP сайте компании Inprise.
Получение индекса компонента в списке родителя
Мне необходимо найти индекс компонента в родительском списке дочерних элементов управления. Я попытался модифицировать prjexp.dll, но без успеха. У кого-нибудь есть идеи?
Есть такая функция. Ищет родителя заданного компонента, перебирает список и возвращает индекс искомого компонента. Функция прошла многочисленные тесты и вполне работоспособна.
{ функция, возвращающая индекс искомого компонента в
списке родителя; возвращает –1 при отсутствии компонента }
function IndexInParent(vControl: TControl): integer;
var
ParentControl: TWinControl;
begin
{делаем "слепок" родителя через базовый класс на предмет доступности }
ParentControl:= TForm(vControl.Parent);
if (ParentControl <> nil) then begin
for Result:= 0 to ParentControl.ControlCount - 1 do begin
if (ParentControl.Controls[Result] = vControl) then exit;
end;
end;
{ если мы уж попали в это место, то либо не найден компонент, либо компонент не имел родителя }
Result:= –1;
end;
Массив компонентов…
Возможно ли создание массива компонентов? Для показа статуса я использую набор LED-компонентов и хотел бы иметь к ним доступ, используя массив.
Прежде всего необходимо объявить массив:
LED: array[1..10] of TLed; (10 элементов компонентного типа TLed)
При необходимости динамического создания LED-компонентов организуйте цикл, пример которого мы приводим ниже:
for counter:= 1 to 10 do begin
LED[counter]:= TLED.Create;
LED[counter].top:= …
LED[counter].Left:= …
LED[counter].Parent:= Mainform; {что-то типа этого}
end;
Если компоненты уже присутствуют на форме (в режиме проектирования), сделайте их элементами массива, например так:
leds:= 0;
for counter:= 0 to Form.Componentcount do begin
if (components[counter] is TLED) then begin
inc(leds);
LED[leds]:= TLED(components[counter]);
end
end;
Тем не менее у нас получился массив со случайным расположением LED-компонентов. Я предлагаю назначить свойству Tag каждого LED-компонента порядковый номер его расположения в массиве, а затем заполнить массив, используя это свойство: