Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюк с Align у панели 
V
    Опции темы
EagleXK
  Дата 11.9.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 11.9.2006
Где: Украина, Житомир

Репутация: нет
Всего: нет



Вобщем, есть наследник от TPanel, на котором лежит сплиттер (не стандартный, но всё же...). Сплиттер постоянно имеет какой-то Align. И если сплиттер у меня alLeft, а я бросаю на компоненту какую-то другую компоненту и ставлю ей Align=alTop, то сплиттер... правильно, располагается ПОД компонентой, т.к. выравнивание сверху/снизу имеет более высокий приоритет, чем выравнивание слева/справа. Как эту радость обойти? Я пытался создать на панели ещё одну панельку, на которую собственно и будут кидаться все остальные компоненты в режиме конструктора (и создаваться в рантайме), но почему-то компоненты, которые я кидаю в дизайн-тайме, не записываются как находящиеся на этой панели и не отображаются (в DFM их НЕ видно как будто они НЕ находятся на форме; при чём если выйти из режима просмотра DFM то получим сообщение о том, что этой панельки типа вообще-то и нима, и не стоит ли её убрать).
Как повлиять на ситуацию? Нужно чтобы если я установил сплитер справа, то он и занимал ВСЮ правую часть панели, игнорируя то, что какие-то компоненты могут быть заалигнены alTop/alBottom?


Это сообщение отредактировал(а) EagleXK - 11.9.2006, 15:41
PM MAIL WWW ICQ   Вверх
EagleXK
Дата 11.9.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 11.9.2006
Где: Украина, Житомир

Репутация: нет
Всего: нет



Код

unit Panels;

interface
uses Classes, ExtCtrls,Controls;

type
TMyPanel = class(TCustomPanel)
 private
   fPanel: TPanel;
 public
   constructor Create(AOwner: TComponent);override;
   destructor Destroy;override;
   procedure GetChildren(Proc: TGetChildProc; Root: TComponent);override;
   procedure Loaded;override;
   procedure SetParent(AParent: TWinControl);override;
end;

procedure Register;
implementation

procedure Register;
begin
 RegisterComponents('Standard',[TMyPanel]);
end;

constructor TMyPanel.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 fPanel := TPanel.Create(self);
 Width := 200;
 Height := 200;
end;

destructor TMyPanel.Destroy;
begin
 FreeAndNil(fPanel);
 inherited;
end;

procedure TMyPanel.GetChildren(Proc: TGetChildProc; Root: TComponent);
var i: integer;
begin
inherited GetChildren(Proc,Root);
for i := 0 to fPanel.ControlCount - 1 do begin
  Proc( fPanel.Controls[i] );
end;{for}
end;

procedure TMyPanel.Loaded;
var i: integer;
begin
 inherited Loaded;
 for i :=  ControlCount-1 downto 0 do begin
   if (Controls[i] <> fPanel) then Controls[i].Parent := fPanel;
 end;{for}
end;

procedure TMyPanel.SetParent(AParent: TWinControl);
begin
 inherited;
 if fPanel <> nil then fPanel.Parent := self;
end;

end.


Это работает. Хотя, правда говоря, неудобно, что компоненты, которые я кидаю в дизайнтайме не отображаются как находящиеся на панели (т.е. в Object TreeView они располагаются не в ветке моей компоненты, а являются как бы её sibling-ами). Это всё можно как-то полечить? smile

Это сообщение отредактировал(а) EagleXK - 11.9.2006, 17:02
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 11.9.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Цитата(EagleXK @  11.9.2006,  14:35 Найти цитируемый пост)
TMyPanel = class(TCustomPanel)
 private
   fPanel: TPanel;

А зачем те этот fPanel если ты наследуешь его?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
EagleXK
Дата 11.9.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 11.9.2006
Где: Украина, Житомир

Репутация: нет
Всего: нет



Да, сапасиба, заметил уже smile Это не моя демка, я чего-то не особо заглядывал в то, от чего наследуется =)))
PM MAIL WWW ICQ   Вверх
EagleXK
Дата 12.9.2006, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 11.9.2006
Где: Украина, Житомир

Репутация: нет
Всего: нет



Ок, походу эта вещь так и останется. В любом случае меня это устраивает, вопрос можно считать решённым.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0498 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.