![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
Lio |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравствуйте,
Вообщем, пробую писать на чистом АПИ в Делфи. (Предупреждая вопрос "Зачем?" - "Надо, хочу научиться"=) ) Создаю окно, добавляю на него несколько различных элементов 'listbox', 'edit' и пр. Как сделать так, чтобы расположение этих элементов зависело от размеров окна, которое изменяется в процессе работы. Т.е. увеличил я окно направо и кнопки сдвинулись туда же, вместе с размерами 'listbox'a и т.п. Уверен, что это все связано со структурой TRect и функцией GetClientRect. Но вот как их для этого использовать я понять не могу =(? Перепробовал различные варианты. Need help. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Создаешь контрол вот так:
GetClientRect(hWindow, Rect); и обрабатываешь WM_SIZE (при изменении размеров родительского окна что еще можно обрабатывать? ![]() WM_SIZE: (я сразу говорю, лень было запускать Дельфи, набросал на FPC, поэтому с синтаксисом могут быть накладки, но это работает) |
Bokul |
![]()
Сообщение
#3
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
А если контролов много EnumChildWindows?
-------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Lio |
![]()
Сообщение
#4
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
Не получается =(
Я попробовал, как во втором посте, только контрол был не 'Edit' а 'Listbox' И другой вариант:
Где я неправ? |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Полностью файл прикрепи...
|
Lio |
![]()
Сообщение
#6
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
*.dpr файлик не дал прикрепить - сменил расширение на *.pas
Заранее спасибо за то, что помогаете разобраться ![]() Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
var Должны быть описаны глобально, а не локально в WinProc... Вынеси описание выше по тексту, и ListText начнет изменять размер... |
Lio |
![]()
Сообщение
#8
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
Сработало!!!
![]() Огромное спасибо ![]() Немного непонятно, почему глобальные переменные (все пишут, что это плохой стиль программирования. Что так нельзя и я даже не думал об их использовании...). Контрол вроде создается и изменяется в одной функции ... вообщем пока для меня мистика ![]() |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата Контрол вроде создается и изменяется в одной функции ... Создается - да, а вот изменяется он - каждый раз, когда функции окна приходит сообщение WM_SIZE, так? А что будет с локальной переменной, когда WinProc неактивна, ты знаешь? Она прекратит существование, потому, как располагается в стеке. При следующей активизации WinProc переменная ListText (ну, и все остальные тоже) создастся заново, а вот что она будет содержать - это мусор, ничего общего с тем хендлом, что ты создавал...Поэтому надо хранить хендлы глобально, чтобы они не менялись... |
Lio |
![]()
Сообщение
#10
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я понял. Спасибо. Буду осторожнее с переменными впредь ...
|
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 22:06 |