На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> Событие перестает обратываться , После клика
    Обрабатываю в своем компоненте уход мышки из области компонента, причем вместо собития CM_MOUSELEAVE использую
    ExpandedWrap disabled
      procedure TESoldTreeView.WndProc(var Message: TMessage);
      Var
        P : TPoint;
      begin
        Case Message.Msg Of
          WM_MOUSEMOVE, WM_NCMOUSEMOVE :
            begin
             inherited;
              if not FMouseInControl then
                if Enabled then
                  begin
                    FMouseInControl := True;
                    SetCapture(Handle);
                    if Assigned(FOnMouseEnter) then
                      FOnMouseEnter(Self);
                  end;
       
              P:= Point(Message.LParamLo, Message.LParamHi);
              if not PtInRect( ClientRect, P ) then
                if FMouseInControl and Enabled and (not Dragging) then
                  begin
                    FMouseInControl := False;
                    if Assigned(FOnMouseLeave) then
                      FOnMouseLeave(Self);
                    ReleaseCapture;
                  end;
            end;
        else
          Inherited;
        end;

    Код работает нормально до тех пор, пока я не кликну по компонету. После этого обработка ухода мышки прекрашается. Событий MOUSE_DOWN и тому подобных у меня нет. Может кто-нибудь встречался с пододоной проблемой и может подсказать что делать, что бы событие обрабатывалось в любом случае.
      а все очень просто - ты посмотри после нажатия кто у тебя является CaptureControl (через GetCaptureControl() )...
        Rouse_, по твоему совету проверил, как меняется CaptureControl при нанажити мышки: оказалось, что CaptureControl обращется в nil после отрабоки события WM_LBUTTONDOWN. Проблема решилась установкой SetCapture(Handle) в WM_LBUTTONUP. Спасибо!
          Всегда пожалуйста.
            Цитата IGL @
            причем вместо собития CM_MOUSELEAVE использую

            а я для забивания гвоздей микроскоп использую.
            Зачем использовать столь громоздкий код, если есть специальное сообщений??
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0255 ]   [ 16 queries used ]   [ Generated: 19.04.24, 01:01 GMT ]