![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Код:
Код:
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
|
| Этот пользователь сказал Спасибо 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. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (02.12.2012)
| ||
|
#14
|
||||
|
||||
|
Спасибо, возник другой вопрос: как отловить событие клика по ListBox'у?
|
|
#15
|
||||
|
||||
|
лови NM_CLICK в уведомлении WM_NOTIFY.
|
![]() |
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|