Конференция "Компоненты" » Изменения Parent [D6, WinXP]
 
  • webpauk © (28.07.08 11:24) [0]
    Есть компонент TMyLabel.
    Как в нём отловить изменениt размеров TscrollBar(TMyLabel.Parent)
  • DimaBr © (28.07.08 12:31) [1]
    Отловить именно изменение размеров думаю будет сложновато, а вот перекрыть Realign можно
  • webpauk © (28.07.08 13:19) [2]
    блин...
    но ведь как-то, если у компонента есть свойство Align, он ловит изменение размеров Parenta?
  • webpauk © (28.07.08 15:30) [3]
    алёёёё, ну хоть чего-нить скажите....
    как компонент узнает об изменении размеров родителя?
  • Decoding (28.07.08 15:40) [4]
    Как вариант - перехватывается WM_SIZE, сравнивается Handle, и если совпало, делается что нужно
  • webpauk © (28.07.08 15:50) [5]
    Decoding   (28.07.08 15:40) [4]


    а причём тут WM_SIZE?
    это ежели изменяется размер самого компонента. а ежели он должен измениться только после изменения родителя?
  • DimaBr © (28.07.08 16:11) [6]
    Опишите задачу поподробнее, может доствточно использовать Anchors
  • DimaBr © (28.07.08 16:18) [7]
    Вообще, что за мания следить за другими компонентами !!!
  • webpauk © (28.07.08 16:22) [8]
    создаю компонент, состоящий из нескольких Tlabel (создаются по количеству выбранных полей в БД)
    Они расположены в строку, через определенный промежуток.
    При изменении размеров Parent необходимо пересчитать положение array of Tlabel
  • webpauk © (28.07.08 16:23) [9]
    есть альтернативный вопрос: какое сообщение посылается дочерним компонентам при изменении размеров родителя
  • Медвежонок Пятачок © (28.07.08 16:27) [10]
    Дурная это затея - делать это внутри TMyLabel.
    Ну поймаешь ты изменения парента.
    Дальше надо смотреть а где я? а кто слева кто справа? кто начинает перестроение первым и т.д.

    Все это надо делать "снаружи" лейблов.
  • Decoding (28.07.08 16:28) [11]
    от какого класса наследуется твой компонент?
  • DimaBr © (28.07.08 16:37) [12]
    Уже немного ближе ! А не суммы ли хотим посчитать в DBGrid ???
  • webpauk © (28.07.08 17:27) [13]
    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;



    вот и делов то
  • DimaBr © (29.07.08 10:23) [14]
    Ваш случай тоже извращение !!! Получается компонент можно ложить ТОЛЬКО на TScrollBox.
    Не проще ли тогда написать TNewScrollBox который и будет размещать на себе нужные TMyLabel и управлять их положением (количеством)
  • Юрий Зотов © (30.07.08 07:43) [15]
    > webpauk ©   (28.07.08 17:27) [13]

    В дополнение к [14]:

    1. TScrollBox(Owner) - это ошибка.

    2. Что будет, если положить несколько таких компонентов, а потом какие-то из них удалить?
 
Конференция "Компоненты" » Изменения Parent [D6, WinXP]
Есть новые Нет новых   [134464   +62][b:0][p:0.001]