Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

Номер контрола на форме   Найти похожие ветки 

 
malamba   (2004-09-27 11:44) [0]

Можно обращаться к контролам, расположенным, например, на форме, по номеру:

FormMain.Controls[i]

Каждый контрол имеет свой номер, непонятно по какому принципу присваеваемый. Как задать вновь созданному контролу свой номер ?

У меня на панели пять подпанелей. Создаю новую - вижу в дереве объектов ( Alt+Shift + F11), что она не в конце, а в середине списка.
А у меня процедура, которая выстраивает, раздвигает и сдвигает панели в зависимости от их номера.
Пробовал их двигать в Z-последовательности, ничего не дает, "порядок создания" - аналогично Главное, чтобы их сдвинуть в дереве объектов.


 
clickmaker ©   (2004-09-27 11:49) [1]


> Как задать вновь созданному контролу свой номер ?

Tag


 
TUser ©   (2004-09-27 11:56) [2]

Этот номер присваивается независомо от тебя.  хочешь - запихай панели в свой массив, типа так
i:=length(MyPannels);
setlength(MyPannels,i+1);
MyPannels[i]:=TPanel.Create();
with MyPannels[i] do begin
Parent:=...;
...
end;


 
malamba   (2004-09-27 12:40) [3]

Да у меня на панелях по несколько кнопок. Да еще их обработчики.

Не хочется возиться.

Свойство Tag -  в него можно запихнуть все, что угодно. Forma вряд ли обратит на него внимание при обращении к контролам.


 
Sandman25 ©   (2004-09-27 12:43) [4]

[3] malamba   (27.09.04 12:40)

Очень плохая идея иметь в коде что-то вроде:

TButton(TPanel(TPanel(Controls[2]).Controls([3])).Controls[12]).Caption := TPanel(Controls[1]).Caption;

Нужно заранее думать о простоте понимания и модификации программы.


 
TUser ©   (2004-09-27 12:46) [5]


> Свойство Tag -  в него можно запихнуть все, что угодно

Я тут недавно воевал с указателями.


 
malamba   (2004-09-27 12:56) [6]

TButton(TPanel(TPanel(Controls[2]).Controls([3])).Controls[12]).Caption := TPanel(Controls[1]).Caption;

Это действительно страшно.

НО у меня только
Panel1.Controls[iNomPanel].Height:= ...
и все в том же духе.
Скромненько и простенько.


 
Skyle ©   (2004-09-27 13:59) [7]


> Panel1.Controls[iNomPanel].Height:= ...

function TMyForm.GetPanel(ANum : Integer) : TPanel;
var I :Integer;
begin
 Result := nil;
 for I := 0 to ControlCount - 1 do
   if (Controls[I] is TPanel) and (Controls[I].Tag = ANum) then
   begin
     Result := (Controls[I] as TPanel);
     Break;
   end;
end;

...if Assigned(GetPanel(iNomPanel) then
begin...........


 
malamba   (2004-09-28 10:03) [8]

Любопытно и красиво.
Спасибо, попробую



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
4-1094798681
Apolo
2004-09-10 10:44
2004.10.10
Обмен данными между потоками не используя главную форму!


14-1095501470
Максим
2004-09-18 13:57
2004.10.10
Есть ли русскоязычный HELP на Delphi 7.0?


3-1094697235
Sirus
2004-09-09 06:33
2004.10.10
Как извлечь метаданные базы IB/FB???


4-1094575392
Klopan
2004-09-07 20:43
2004.10.10
lpt port


11-1081335922
nsvi
2004-04-07 15:05
2004.10.10
StatusBar