Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Номер контрола на форме [D6, D7, Win2k, WinXP]


malamba ©   (2004-09-27 11:44:00) 

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

FormMain.Controls[i]

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

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


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

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


Skyle   (2004-09-27 13:59:00) [2]


> 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-27 12:56:00) [3]

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

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

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


TUser   (2004-09-27 12:46:00) [4]


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

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


Sandman25   (2004-09-27 12:43:00) [5]

[3] malamba   (27.09.04 12:40)

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

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

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


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

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

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

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


TUser   (2004-09-27 11:56:00) [7]

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


clickmaker   (2004-09-27 11:49:00) [8]


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

Tag


Наверх

Титульная страница Поиск, карта сайта Написать письмо