|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Создание ListBox WinAPI
Код:
Код:
program JustProgram; uses Windows, Messages; var WC: TWndClassEx; Wnd: HWND; Msg: TMsg; const WndClass = 'TWindow'; WndCaption = 'Just Program'; {$R *.res} function WindowProc(Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin // Обработка сообщений case Msg of // Сообщение при закрытии формы WM_DESTROY: begin // Запрос на закрытие PostQuitMessage(0); // Отрицательный результат Result := 0; // Завершаем процедуру Exit end; else // Положительний результат Result := DefWindowProc(Wnd, Msg, wParam, lParam) end; end; begin // Производим действия над TWndClassEx with WC do begin cbSize := SizeOf(WC); // Перериовывание при изменении размера формы style := CS_HREDRAW or CS_VREDRAW; // Присваиваем адресс процедуры lpfnWndProc := @WindowProc; cbClsExtra := 0; cbWndExtra := 0; hInstance := hInstance; // Иконка hIcon := LoadIcon(0, IDI_APPLICATION); // Курсор hCursor := LoadCursor(0, IDC_ARROW); // Фон формы hbrBackground := COLOR_WINDOW; // Указатель на главное меню lpszMenuName := nil; // Имя класса lpszClassName := WndClass; end; // Регистрируем класс RegisterClassEx(WC); // Создаем форму с заданными параметрами Wnd := CreateWindowEx(0, WndClass, WndCaption, WS_OVERLAPPEDWINDOW, 250, 60, 300, 100, 0, 0, hInstance, nil); // Отображаем форму ShowWindow(Wnd, SW_SHOWNORMAL); ListBox := CreateWindowEx(WS_EX_CLIENTEDGE, 'ListBox', '', WS_CHILD or WS_VISIBLE or LBS_EXTENDEDSEL, 120, 40, 121, 97, WND, 0, hInst, nil); SendMessage(ListBox, WM_SETFONT, hFont, 0); // Обработка сообщений while GetMessage(Msg, 0, 0, 0) do begin // Транслирование сообщений TranslateMessage(Msg); // Посылаем сообщения оконной процедуре DispatchMessage(Msg); end; // Завершение приложения Halt(Msg.wParam); end. |
#2
|
||||
|
||||
Код:
CreateWindowEx(WS_EX_CLIENTEDGE, 'ListBox', '', WS_CHILD or WS_VISIBLE or LBS_EXTENDEDSEL, 120, 40, 121, 97, AWnd, 0, HInstance, nil); Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
sariman (02.12.2012)
|
#3
|
||||
|
||||
ListBox: THandle
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
sariman (06.12.2012)
|
#4
|
||||
|
||||
Спасибо, а как сделать alBottom? В VCL такое без проблем, а в WinAPI как?
|
#5
|
||||
|
||||
SetWindowPos\MoveWindow
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
sariman (02.12.2012)
|
#6
|
||||
|
||||
Код:
CreateWindowEx(WS_EX_CLIENTEDGE, 'ListBox', '', WS_CHILD or WS_VISIBLE or LBS_EXTENDEDSEL, 120, 40, 121, 97, Wnd, 0, HInstance, nil); SetWindowPos(Wnd, HWND_BOTTOM, 0, 0, 0, 0, 0); |
#7
|
||||
|
||||
нельзя передать то, чего нет.
Пишу программы за еду. __________________ |
#8
|
||||
|
||||
И как с этим быть? Как создать?
|
#9
|
||||
|
||||
Код:
PlayList := CreateWindowEx(WS_EX_CLIENTEDGE, 'ListBox', '', WS_CHILD or WS_VISIBLE or LBS_EXTENDEDSEL, 120, 40, 121, 97, Wnd, 0, HInstance, nil); SetWindowPos(PlayList, HWND_BOTTOM, 0, 0, 50, 50, SWP_SHOWWINDOW); |
#10
|
||||
|
||||
установить ширину равную ширине клиентской области родителя, а top = parent.clientheight - height.
Пишу программы за еду. __________________ |
#11
|
||||
|
||||
хм..форма ведь будет изменять размер, как-то это не правильно. Да и что в данном случае Top? Он ведь не объявлен.
|
#12
|
||||
|
||||
тогда нужно будет обрабатывать сообщение WM_SIZING и устанавливать новые размеры ListBox. Top это y в CreateWindowEx.
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
sariman (02.12.2012)
|
#13
|
||||
|
||||
Вот вариант
Код:
procedure ResizeWnd(Wnd : HWND; wParam, lParam : Integer); var aRect : TRect; begin GetClientRect(Wnd, aRect); SetWindowPos(PlayList, 0, 0, aRect.Bottom - 100, aRect.Right, aRect.Bottom, SWP_NOZORDER); end; function WndProc(Wnd : HWND; Msg, wParam, lParam : Integer) : Integer; stdcall; ... WM_SIZE : ResizeWnd(Wnd, wParam, lParam); ... (aRect.Bottom - 100) здесь Top равен высоте главного окна - 100. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (02.12.2012)
|
#14
|
||||
|
||||
Спасибо, возник другой вопрос: как отловить событие клика по ListBox'у?
|
#15
|
||||
|
||||
лови NM_CLICK в уведомлении WM_NOTIFY.
Пишу программы за еду. __________________ |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|