-
Есть компонент TMyLabel.
Как в нём отловить изменениt размеров TscrollBar(TMyLabel.Parent)
-
Отловить именно изменение размеров думаю будет сложновато, а вот перекрыть Realign можно
-
блин...
но ведь как-то, если у компонента есть свойство Align, он ловит изменение размеров Parenta?
-
алёёёё, ну хоть чего-нить скажите....
как компонент узнает об изменении размеров родителя?
-
Как вариант - перехватывается WM_SIZE, сравнивается Handle, и если совпало, делается что нужно
-
Decoding (28.07.08 15:40) [4]
а причём тут WM_SIZE?
это ежели изменяется размер самого компонента. а ежели он должен измениться только после изменения родителя?
-
Опишите задачу поподробнее, может доствточно использовать Anchors
-
Вообще, что за мания следить за другими компонентами !!!
-
создаю компонент, состоящий из нескольких Tlabel (создаются по количеству выбранных полей в БД)
Они расположены в строку, через определенный промежуток.
При изменении размеров Parent необходимо пересчитать положение array of Tlabel
-
есть альтернативный вопрос: какое сообщение посылается дочерним компонентам при изменении размеров родителя
-
Дурная это затея - делать это внутри TMyLabel.
Ну поймаешь ты изменения парента.
Дальше надо смотреть а где я? а кто слева кто справа? кто начинает перестроение первым и т.д.
Все это надо делать "снаружи" лейблов.
-
от какого класса наследуется твой компонент?
-
Уже немного ближе ! А не суммы ли хотим посчитать в DBGrid ???
-
type
TLabelArrEx = class(TControl)
private
PrevParentWndProc: Pointer;
procedure NewParentWndProc(var Msg: TMessage);
public
constructor Create(AOwner: TComponent); override;
end;
constructor TLabelArrEx.Create(AOwner: TComponent);
var
p: Pointer;
begin
inherited Create(AOwner);
PrevParentWndProc:=Pointer(GetWindowLong(TScrollBox(Owner).Handle, GWL_WNDPROC));
p:=MakeObjectInstance(NewParentWndProc);
SetWindowLong(TScrollBox(Owner).Handle, GWL_WNDPROC, LongInt(p));
end;
procedure TLabelArrEx.NewParentWndProc(var Msg: TMessage);
begin
Msg.Result:=CallWindowProc(PrevParentWndProc, TScrollBox(Owner).Handle, Msg.Msg, Msg.WParam, Msg.LParam);
case Msg.Msg of
wm_size: DoSomething
end;
end;
вот и делов то
-
Ваш случай тоже извращение !!! Получается компонент можно ложить ТОЛЬКО на TScrollBox.
Не проще ли тогда написать TNewScrollBox который и будет размещать на себе нужные TMyLabel и управлять их положением (количеством)
-
> webpauk © (28.07.08 17:27) [13]
В дополнение к [14]:
1. TScrollBox(Owner) - это ошибка.
2. Что будет, если положить несколько таких компонентов, а потом какие-то из них удалить?