Parent Changed за контроли

5 отговора 63 прегледа
#1

Parent Changed за контроли

Как разбирам кога се сменя родителя (Parent) на някой контрол? Има ли Message за това или трябва да го правя с Timer?

-------------
Special killer double trouble triple extra nicotine monster!
Отговор
в отговор на z_free #2

Re: Parent Changed за контроли

Има notification (или с други думи message - ама под различна форма) обаче това е само за design time. За това ли ти трябва - или за нещо различни - примерно да правиш нещо в run-time ????? ако сменяш родителя. Забрави таймера!!!!!

---
Е т'ва е живот!
Отговор
в отговор на PhantomAS #3

Re: Parent Changed за контроли

Malko е smeshno Създавам си контрол, който трябва вдясно от себе си да създаде бутонче (това става в конструктора на контрола). А то (бутончето) трябва да е върху същия родител. Обаче при създаване на контрола Parent-а му още не е инициализиран, т.е. дори и да го сетна в конструктура, ще му сет-на nil.

И още: част от лудостта: имам

published
property DropForm: TCustomForm read fDropForm write fDropForm;

Когато се опитвам да го инициализирам от Object Inspector ми казва, че е невалидна стойността му. Цялото нещо е смешно ;)

-------------
Special killer double trouble triple extra nicotine monster!

Редактирано от z_free на

Отговор
в отговор на z_free #4

Re: Parent Changed за контроли

Значи по първия въпрос - може да не съм доразбрал

Имаш контрола която има конструктор от вида Create (AOwner : TControl) (Ако не бъркам класа за win контролите?) ??? - ами в момента в който той се извиква имаш Parent -а вече и в този конструктор можеш да създадеш този допълнителен бутон като го инициализираш със същия parent.
Всъщност кой точно е родителя на бутона ???? - новосъздадения компонент или parent -а на компонента- ако е първия случай подай Self на create- a на бутона, а във втория просто предай AOwner параметъра - и в двата случая няма начин parent-a да не е създаден - трябва да има някаква доста извратена логика която не разбирам.

По втория въпрос - ами най-вероятно си в грешка - ако искаш да ползваш TCustomForm - ще трябва да си регистрираш редактор (ако няма регистриран ) който работи на принципа на combo - сканира всички форми и ги пълни - след като напишеш нещо (ако не си го избрал от комбото) претърсва списъка и ако има такава форма assign -ва истинската стойност - т.е. създадения TCustomForm - като указател а не името на формата ;-))) Ако разбира се това искаш да направиш. Ако мислиш, че като напишеш името на формата и ObjectInspector- а ще се сети - има да чакаш ;-)))))

---
Е т'ва е живот!

Редактирано от PhantomAS на

Отговор
в отговор на PhantomAS #5

Re: Parent Changed за контроли

Накратко: не е вярно, че Контролите получава Parent при създаването им. Също не е вярно, че Owner-a (TComponent) и Parent (TWinControl) са задължително едни и същи, въпреки че ако си ги кликаш от палитрата с компоненти това се получава.

В моя случай и контролата и бутончето трябва да имат един и същи Parent - проблема с него е задоволително решен :) Обаче по втория въпрос:

Object Inspector-а си ги лист-ва възможните форми в Combo, обаче като избера някоя от тях и казва, че не е валидна стойност :)

-------------
Special killer double trouble triple extra nicotine monster!

Редактирано от z_free на

Отговор
в отговор на z_free #6

Re: Parent Changed за контроли

значи таковата, за parent-а:

type
TSmeshka = Class(TControl)
...
protected
...
procedure SetParent(AParent: TWinControl); override;
...
end;
и това ти е мястото да сетнеш parent-а на копчето...

--------------------------------------
Започва Път от моят праг...
Отговор