Главная страница
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.021 c
6-1090316461
highlander
2004-07-20 13:41
2004.10.10
Отправка СМС-сообщений, используя HTTP


4-1094166439
qraj
2004-09-03 03:07
2004.10.10
InsertMenu


1-1096274244
DelphiLexx
2004-09-27 12:37
2004.10.10
Форма поверх всех окон


4-1094812390
DjTheme
2004-09-10 14:33
2004.10.10
Работа со СКАНЕРОМ


8-1090167181
Wistful
2004-07-18 20:13
2004.10.10
WaveOutWrite???