Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Ширина компонента в ScrollBox


Автор: wesadex 24.11.2005, 12:15
В общем написал компонент в виде маленькой выпадающей панельки с заголовком (по клике на котором она и выпадает) наследник TPanel. Если его запихать в ScrollBox на всю его ширину (так чтобы скрола не было видно в дизайн-тайме, но Align оставить alCustom или alNone) и в реал-тайме сделать так, чтобы скрол появился, тогда сам скролл перекроет мою панельку и ее содержимое, но горизонтального скролла не появится. Как сделать так, чтобы этого не происходило? Насколько я понимаю ScrollBox посылает какое-то сообщение контролам внутри себя, когда рисует скролл. Вот какое? И как послать это же (или другое с той же целью) сообщение всем конторолам внутри моей панельки, чтобы они тоже сжались нормально?

Автор: Alexeis 24.11.2005, 12:33
Верятно это сообщение WM_PAINT

Автор: Rennigth 24.11.2005, 13:41
wesadex
не уверен, но попробуй resize обрабатывать и внем устанавливать заного width.

Автор: wesadex 24.11.2005, 15:25
Чей resize? Мне надо в компоненте обработчик сделать - он не может ничего знать о том, что у Скроллбокса скролл нарисовался... В том-то и проблема, что мне нужен рабочий компонент, а не компонент на раз - дляодной прикладушки!

Автор: Rennigth 24.11.2005, 16:32
Код

  TScaledPanel = class(TPanel)
  private
    procedure OnParentResize(ASender: TObject);
  protected
    procedure DoParentResize;
    procedure SetParent(AParent: TWinControl); override;
  end;

procedure TScaledPanel.DoParentResize;
begin
  Width := Parent.Width;
end;

procedure TScaledPanel.OnParentResize(ASender: TObject);
begin
  DoParentResize;
end;

procedure TScaledPanel.SetParent(AParent: TWinControl);
begin
  inherited;
  if Assigned(Parent) and Parent is TScrollBox then
    TScrollBox(Parent).OnResize := OnResize;
end;


но это скорее всего не поможет, здесь надо что-то другое ловить... попробую что-нибудь придумать попозже.

Автор: wesadex 25.11.2005, 08:56
Можно переформулировать вопрос: Какое сообщение посылает предок контролам внутри себя, когда рисует скролл и/или когда его ресайзуют и как его правильно обработать? OnParentResize работает, кстати, только в том случае, если предку изменили размер... а в моем случае размер предка не меняется, т.е. Width и Height остаются неизменными, только скролл прорисовывается! Говорят правильность ответа зависит от правильности постановки вопроса... smile

Автор: Alexeis 25.11.2005, 10:28
При появлении ScrollBar - в не отсылаются сообщения вообще
а при их исчезновении посылаются
WM_ERASEBKGND
WM_PAINT и
WM_USER + 0xB933

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)