• DevilDevil © (25.04.07 12:37) [0]
    Создаю компонент на основе TCustomPanel. При наступлении события OnEnter делаются определённые действия. Если на панели находятся TEdit и т.п. и кликнуть по нему, то событие OnEnter в мою панель приходит. Если кликаю по дочерней панели (TPanel), то OnEnter не приходит. Почему?

    Вообще мне необходимо, чтобы моя панель отлавливала OnEnter или похожее событие при клике на любом дочернем компоненте.

    Заранее спасибо.
  • DimaBr © (25.04.07 13:01) [1]
    TMyPanel = class(TCustomPanel)
    published
    property OnEnter;
    end;

  • DevilDevil © (25.04.07 13:24) [2]
    > DimaBr ©   (25.04.07 13:01) [1]

    что характерно, даже если в Инспекторе Объектов у обычной панели в обработчике OnEnter написать ShowMessage(''); то при клике по панели ShowMessage не произойдёт
  • DimaBr © (25.04.07 14:06) [3]
    А вы китнте на панель например эдит и увидите что всё работает


    function TCustomForm.SetFocusedControl(Control: TWinControl): Boolean;
    var
     FocusHandle: HWnd;
     TempControl: TWinControl;
    begin
    .....
     if not (csFocusing in Control.ControlState) then
     begin
       Control.ControlState := Control.ControlState + [csFocusing];
       try
    .....
         if FFocusedControl <> Control then
         begin
           while (FFocusedControl <> nil) and not
             FFocusedControl.ContainsControl(Control) do
           begin
             FocusHandle := FFocusedControl.Handle;
             FFocusedControl := FFocusedControl.Parent;
             if not SendFocusMessage(FocusHandle, CM_EXIT) then Exit;
           end;
           while FFocusedControl <> Control do
           begin
             TempControl := Control;
             while TempControl.Parent <> FFocusedControl do
               TempControl := TempControl.Parent;
             FFocusedControl := TempControl;
             if not SendFocusMessage(TempControl.Handle, CM_ENTER) then Exit;
           end;


    Повесте две панели (одна на одну) и на вторую эдит и вот такой код

    procedure TForm1.Panel1Enter(Sender: TObject);
    begin
     caption := caption + '1';
    end;

    procedure TForm1.Panel2Enter(Sender: TObject);
    begin
    caption := caption + '2';
    end;


    и увидите в какой очереди поступают сообщения
  • DevilDevil © (25.04.07 14:14) [4]
    > DimaBr ©   (25.04.07 14:06) [3]

    Честно говоря, недопонимаю, что ты имеешь ввиду.
    Не могу же я для каждой дочерней панели создать невидимый TEdit.

    И OnMouseDown для каждой панели не могу изменить - там возможно уже есть обработчик.
  • DevilDevil © (25.04.07 14:40) [5]
    С Label-ами такая же фигня
  • DevilDevil © (25.04.07 15:04) [6]
    фуууууууууууууу

    решил проблему, перехватывая WM_MOUSEACTIVATE
Есть новые Нет новых   [118608   +47][b:0][p:0.001]