Показать сообщение отдельно
  #159  
Старый 15.12.2012, 02:43
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Переделай так: (SetCapture(Wnd)/ReleaseCapture)
Код:
function PlayBarWndProc(Wnd : HWND; Msg, wParam, lParam : Longint) : Longint; stdcall;
var
  I     : Integer;
  Pt    : TPoint;
  aRect : TRect;
begin
  Result := CallWindowProc(hPlayBarPrev, Wnd, Msg, wParam, lParam);
  case Msg of
    // Сообщение при нажатии левой кнопки мыши по прогрессбару
    WM_LBUTTONDOWN :
    begin
      Pt.X := LOWORD(lParam);
      Pt.Y := HIWORD(lParam);
      // Получаем клиентские размеры окна
      GetClientRect(Wnd, aRect);
      // Устанавливаем позицию прогрессбара по клику
      I := Round(SendMessage(Wnd, PBM_GETRANGE, 0, 0) / aRect.Right * Pt.X);
      SendMessage(Wnd, PBM_SETPOS, I, 0);
      BASS_ChannelSetPosition(Channel, BASS_ChannelSeconds2Bytes(Channel, I), BASS_POS_BYTE);
      PBMouseDown := True;
      SetCapture(Wnd);
    end;

    // Сообщение при перемещении курсора по прогрессбару
    WM_MOUSEMOVE :
    begin
      Pt.X := LOWORD(lParam);
      Pt.Y := HIWORD(lParam);
      // Получаем клиентские размеры окна
      GetClientRect(PlayBar, aRect);
      // Если нажата клавиша мыши, то ставим позицию прогрессбара по клику
      if GetKeyState(1) shr 31 = 1 then
        if PBMouseDown then
        begin
          I := Round(SendMessage(Wnd, PBM_GETRANGE, 0, 0) / aRect.Right * Pt.X);
          SendMessage(Wnd, PBM_SETPOS, I, 0);
          BASS_ChannelSetPosition(Channel, BASS_ChannelSeconds2Bytes(Channel, I), BASS_POS_BYTE);
        end;
    end;

    // Сообщение при отжатии левой кнопки мыши по прогрессбару
    WM_LBUTTONUP :
    begin
      ReleaseCapture;
      PBMouseDown := False;
    end;
  end;
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием