Показать сообщение отдельно
  #35  
Старый 04.12.2012, 19:27
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Вот часть кода:
Код:
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;
Ответить с цитированием