![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
align [D6]
Димон © (2005-02-10 12:31:00)Добрый день.
Вопрос - почему присвоение Align = alClient контролу, у которого visible = false не имеет последствий (например, не меняется width) до той поры пока visible не станет равным true.
Пояснение к вопросу:
1. Есть Panel1, созданный в designtime, где Panel1.Visible := False, Panel1.Width = 200.
2. При выполнении такого кода
var
kPanel: TPanel;
begin
kPanel := TPanel.Create(Self);
kPanel.Parent := Panel1;
ShowMessage(IntToStr(kPanel.Width));
//kPanel.HandleNeeded;
kPanel.Align := alClient;
ShowMessage(IntToStr(kPanel.Width));
Panel1.Visible := True;
ShowMessage(IntToStr(kPanel.Width));
end;
мы последовательно увидим сообщения 185, 185, 200.
Т.е. размер kPanel реально сменился только после Panel1.Visible := True;
3. Если снять комментарий то размер kPanel будет менять сразу после kPanel.Align := alClient.
Почему так происходит понятно - в классе TControl реакция на изменение Align отсутствует в случае отсутствия Handle у контрола, который появлятся, в частности, в момент показа контрола на экране.
Вопрос: чем противопоказан явный вызов HandleNeeded и есть ли иные более цивилизованные способы реакции на изменение Align, кроме приведенного мной.
Спасибо.
Димон (2005-02-10 14:39:00) [1]
> Вопрос неправильный, менять можно - если нужно, но не стоит
> ожидать никакой реакции, у невидимых контролов.
Странно почему так.
Для оптимальности по скорости?
Anatoly Podgoretsky (2005-02-10 14:30:00) [2]КаПиБаРа © (10.02.05 12:35) [1]
Вопрос неправильный, менять можно - если нужно, но не стоит ожидать никакой реакции, у невидимых контролов.
Суслик (2005-02-10 12:37:00) [3]
> Встречный вопрос. А зачем менять размер невидимой панели?
Динамическая настройка?
Мерцает иначе - контролов много.
КаПиБаРа (2005-02-10 12:35:00) [4]Встречный вопрос. А зачем менять размер невидимой панели?