function WindowProc(Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM):
LRESULT; stdcall;
var
WndRect: TRect;
Height: Integer;
CursorPos: TPoint;
begin
// Иинициализация переменнной Height
Height := 0;
// Инициализация результата функции
Result := 0;
// Обработка сообщений
case Msg of
WM_CREATE:
begin
// Создаем прогрессбар с заданными параметрами
PlayBar := CreateWindowEx(WS_EX_CLIENTEDGE, 'MSCtls_Progress32', '',
WS_CHILD or WS_VISIBLE or LBS_EXTENDEDSEL or PBS_SMOOTH, 0, 0, 0, 0,
Wnd, 0, hInstance, nil);
// Устанавливаем параметры плейлиста и отображаем
SetWindowPos(PlayBar, 0, 0, 0, 0, PBHeigth, SWP_SHOWWINDOW);
// Обработка события клика по прогрессбару
hPlayBarPrev := Pointer(GetWindowLong(PlayBar, GWL_WNDPROC));
SetWindowLong(PlayBar, GWL_WNDPROC, Longint(@PlayBarWndProc));
// Создаем плейлист с заданными параметрами
PlayList := CreateWindowEx(WS_EX_CLIENTEDGE, 'ListBox', '', WS_CHILD or WS_VISIBLE or LBS_EXTENDEDSEL, 0, 0, 0, 0, Wnd, 0, hInstance, nil);
// Устанавливаем позицию плейлиста и отображаем
SetWindowPos(PlayList, HWND_BOTTOM, 0, 0, Height, Width,
SWP_SHOWWINDOW);
// Создаем Popup меню
PopupMenu := CreatePopupMenu;
end;
// Сообщение при закрытии формы
WM_DESTROY:
begin
PostQuitMessage(0);
// Отрицательный результат
Result := 0;
// Завершаем процедуру
Exit
end;
WM_SIZE:
begin
// Получаем размер клиентской части окна
GetClientRect(Wnd, WndRect);
// Узнаем ширину главного окна
Width := (WndRect.Right - WndRect.Left);
// Узнаем высоту главного окна
Height := (WndRect.Bottom - WndRect.Top);
// Изменяем рамер ползунка прокрутки
MoveWindow(PlayBar, PBINDENT, PBTopSpace, Width - PBINDENT * 2,
PBHeigth, True);
// Изменяем рамер плейлиста
MoveWindow(PlayList, 0, PLTopSpace, Width, Height, True);
end;
WM_RBUTTONDOWN:
begin
// Получаем кординаты мыиши
GetCursorPos(CursorPos);
// Отображаем Popup меню
TrackPopupMenu(PopupMenu, TPM_LEFTALIGN or TPM_RIGHTBUTTON, CursorPos.X, CursorPos.Y, 0, Wnd, nil);
end;
else
// Положительний результат
Result := DefWindowProc(Wnd, Msg, wParam, lParam)
end;
end;