Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Вниз

Как отловить изменение размера владельца компонента?   Найти похожие ветки 

 
Нуину   (2006-03-16 22:07) [0]

Привет, мастера!

Пож. подскажите по теме.
К примеру, имею компонент TMyPanel унаследованный от TPanel, который лежит на TScrollBox и мне нужно непосредственно в TMyPanel отлавливать изменение размера владельца (TScrollBox). Надеюсь, что это возможно:)

Весь и-нет перерыл, но увы.


 
Игорь Шевченко ©   (2006-03-17 00:28) [1]

Если грубо, то

type
 TMyPanel = class (TPanel)
 private
   procedure ParentResizeHandler (Sender: TObject);
 ...
 end;

Parent.OnResize = MyPanel.ParentResizeHandler;

А вообще, относительное расположение управляется свойством Anchors...


 
Германн ©   (2006-03-17 01:39) [2]


> Игорь Шевченко ©   (17.03.06 00:28) [1]
>
> А вообще, относительное расположение управляется свойством
> Anchors...


И во многих случаях Anchors вполне достаточно. Но увы не всегда. Тогда см. "procedure ParentResizeHandler (Sender: TObject);


 
TUser ©   (2006-03-17 08:48) [3]

TMyPanel = class (TPanel)
 private
     FOldHandler: TNotifyEvent;
   procedure ParentResizeHandler (Sender: TObject);
 ...
 end;

FOldHandler:=Parent.OnResize;
Parent.OnResize = MyPanel.ParentResizeHandler;

procedure TMyPanel.ParentResizeHandler ();
begin
 {  ...  }
 if assigned (FOldHandler) then
   FOldHandler (Sender);
end;


 
Нуину   (2006-03-17 19:49) [4]

Спасибо за ответы, но - это решение в лоб. Первое, что я пытался использовать - Parent.OnResize, но из юнита моего TMyPanel свойства OnResize от Parent не видны. Anchors в моём случае не подходит - TMyPanel  лежит на ScrollBox"е, у которого может влючаться прокрутка, если экземпляр TMyPanel больше самого ScrollBox, а если меньше, то панель должна находиться посередине ScrollBox"а.
 Понятно, что ScrollBox может сам командовать, лежащей на нём панелью, но хотелось бы, что бы TMyPanel была полностью автономной, т.е., что бы из формы приложения можно было ограничиться только созданием экземпляра от TMyPanel и присвоением ему Parent и всё.
 Я пытался и WndProc переписывать, и Application.OnMessage использовать, и перехватывать сообщение WM_SIZE, но ничего не получается, разумеется всё в юните для TMyPanel.


 
Нуину   (2006-03-17 22:08) [5]

Фух, кажется нашёл, как сделать.


type
 TGrTxtPanel = class(TPanel)
 private
   AppEvent1: TApplicationEvents;
   procedure SetPosition;
   procedure AppEvent1OnMessage(var Msg: TMsg; var Handled: Boolean);
 public
   constructor Create(AOwner: TComponent); override;
 end;

implementation

{ TGrTxtPanel }

constructor TGrTxtPanel.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 AppEvent1 := TApplicationEvents.Create(self);
 AppEvent1.OnMessage := AppEvent1OnMessage;
end;

procedure TGrTxtPanel.AppEvent1OnMessage(var Msg: TMsg;
 var Handled: Boolean);
begin
 if Parent = nil then Exit;
 if (Msg.hwnd = Parent.Handle) and (Msg.message = WM_PAINT) then
 begin
   SetPosition;
   Handled := False;
 end;
end;


 
Нуину   (2006-03-17 22:15) [6]

Нет, не так. При изменении размера формы мышью условие if (Msg.hwnd = Parent.Handle) and (Msg.message = WM_PAINT) не соблюдается:(



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.014 c
15-1143574068
Petr V. Abramov
2006-03-28 23:27
2006.04.23
Вследствие действий электриков...


1-1142524876
oleg_
2006-03-16 19:01
2006.04.23
Если parent у checkboxa не форма а stringgrid, то он не кликается


15-1143712175
DelphiN!
2006-03-30 13:49
2006.04.23
Модальное окно уходит на задний план


2-1144670546
std
2006-04-10 16:02
2006.04.23
AdoDataSet


2-1144140081
azl
2006-04-04 12:41
2006.04.23
Вкладка ActiveX в Delphi 2006





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский