Здравствуйте,
Вообщем, пробую писать на чистом АПИ в Делфи. (Предупреждая вопрос "Зачем?" - "Надо, хочу научиться"=) )
Создаю окно, добавляю на него несколько различных элементов 'listbox', 'edit' и пр.
Как сделать так, чтобы расположение этих элементов зависело от размеров окна, которое изменяется в процессе работы. Т.е. увеличил я окно направо и кнопки сдвинулись туда же, вместе с размерами 'listbox'a и т.п.
Уверен, что это все связано со структурой TRect и функцией GetClientRect. Но вот как их для этого использовать я понять не могу =(? Перепробовал различные варианты. Need help.
Создаешь контрол вот так:
GetClientRect(hWindow, Rect);
hEditWnd := CreateWindow('Edit', nil,
ws_child or ws_visible or es_multiline or
ws_vscroll or ws_hscroll or es_autohscroll or es_autovscroll,
0, 0,
(rect.right - rect.left) - 50, { Чтобы не на все окно, а на 50 пикс. меньше по ширине }
(rect.bottom - rect.top),
hWindow,
0,
system.MainInstance, nil);
WM_SIZE:
Begin
MoveWindow(hEditWnd, 0, 0, loword(lparam) - 50, hiword(lparam), true);
// Второй и третий параметры - смещение по ширине/высоте относительно
// родительского окна, четвертый и пятый - новая ширина/высота контрола
Exit;
End;
А если контролов много EnumChildWindows?
Не получается =(
Я попробовал, как во втором посте, только контрол был не 'Edit' а 'Listbox'
И другой вариант:
var
ListText:THandle;
Rect:TRECT;
...
WM_CREATE:
begin
ListText:=CreateWindow('LISTBOX',
nil,
WS_CHILD or WS_VISIBLE or LBS_STANDARD,
Rect.Left,
Rect.Bottom div 2,
Rect.Right,
Rect.Bottom,
hWnd, 0, hInstance, nil);
...
end;
WM_SIZE:
begin
GetClientRect(hWnd,Rect);
MoveWindow(ListText, Rect.Left,
Rect.Bottom div 2,
Rect.Right,
Rect.Bottom, true);
end;
Полностью файл прикрепи...
*.dpr файлик не дал прикрепить - сменил расширение на *.pas
Заранее спасибо за то, что помогаете разобраться
Прикрепленные файлы
arch.pas ( 6.06 килобайт )
Кол-во скачиваний: 289
var
ListFrom,ListTo,ListSubj,ListText:THandle;
Сработало!!!
Огромное спасибо
Немного непонятно, почему глобальные переменные (все пишут, что это плохой стиль программирования. Что так нельзя и я даже не думал об их использовании...). Контрол вроде создается и изменяется в одной функции ... вообщем пока для меня мистика . Буду разбираться ... еще раз спасибо.
Я понял. Спасибо. Буду осторожнее с переменными впредь ...