
15.12.2012, 02:43
|
 |
.
|
|
Регистрация: 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 в.д.
|