Форум: "WinAPI";
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];
ВнизФорма Найти похожие ветки
← →
Русский (2001-11-09 10:29) [0]Hi, мастера!
Как сделать так, чтобы форму - нельзя было вытащить за границы экрана
(очень нужно грамотное решение, если вешать процедуру выравнивания -
на таймер, то получается очень уродливо).
Подскажите а :)))
Как сделать, чтобы можно
← →
Юрий Зотов (2001-11-09 11:08) [1]Например, повесить выравнивание на обработчик сообщения WM_WINDOWPOSCHANGED (или WM_WINDOWPOSCHANGING).
← →
Русский (2001-11-09 14:08) [2]Уважаемый Юрий Зотов, я не ламер :)))
Как должен выглядеть этот обработчик ????
← →
Юрий Зотов (2001-11-09 15:27) [3]Верю. Поэтому специально для НЕ ламеров привожу пример обработчика сообщения. Заодно сообщаю, что это написано в любой книге по Delphi.
type
TForm1 = class(TForm)
...
private
procedure WMWindowPosChanged(var Message: TWMWindowPosChanged); message WM_WINDOWPOSCHANGED;
...
end;
...
procedure TForm1.WMWindowPosChanged(var Message: TWMWindowPosChanged);
begin
// Здесь код выравнивания. В простейшем (но далеко не лучшем)
// варианте он может выглядеть так:
inherited;
if Left < 0 then Left := 0;
if Top < 0 then Top := 0;
if Left + Width > Screen.Width then Left := Screen.Width - Width;
if Top + Height > Screen.Height then Top := Screen.Height - Height
end;
← →
Русский (2001-11-09 16:51) [4]Юрий Зотов!
Такой код - я могу написать и сам, а вот вы пробовали его использовать ?
Выглядить ето - далеко не лучшим образом, а если окно - большое - в глазах вообще рябить начинает от постоянных дёрганий. Да по - видимому нормального решения я здесь не найду :(((
← →
troits (2001-11-09 18:23) [5]Попробуй в обработчике WM_WINDOWPOSCHANGING
with PWindowPos(Message.lParam)^ do
begin
if X < 0 then
X := 0;
if Y < 0 then
Y := 0;
...
← →
Русский (2001-11-09 19:49) [6]Thanx troits :)))
Работает !!!!!!!
Слушай а в чём разница в объявлении заголовка обработчика :
TWindowPosChanging и TMessage ?
Пробовал TWindowPosChanging - не работает. Почему так ?
← →
troits (2001-11-10 09:46) [7]Никакой принципиальной разницы нет. Просто с TWMWindowPosChanging
работать удобнее. Там lParam сразу объявлен как указатель на TWindowPos.
procedure TForm1.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
with Message.WindowPos^ do
begin
....
Все работает.
← →
Юрий Зотов (2001-11-13 19:04) [8]> Русский (09.11.01 16:51)
> Такой код - я могу написать и сам
Тогда в чем же была проблема?
> а вот вы пробовали его использовать
Я СПЕЦИАЛЬНО написал, что код простейший, но далеко не лучший. НЕ ламер должен был просто заглянуть в SDK и посмотреть параметры сообщения. А дальше сам собой рождался тот самый код, который предложил troits.
> Да по - видимому нормального решения я здесь не найду
НОРМАЛЬНОЕ - это значит ГОТОВОЕ? Такой подход как раз для ламеров и характерен, но Вы же НЕ ламер, верно?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c