Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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.

> Да по - видимому нормального решения я здесь не найду
НОРМАЛЬНОЕ - это значит ГОТОВОЕ? Такой подход как раз для ламеров и характерен, но Вы же НЕ ламер, верно?




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.022 c
1-42476           $Hic0                 2001-12-25 15:29  2002.01.14  
ListView одна фича :)


14-42543          skiph                 2001-11-12 08:31  2002.01.14  
HTML help


1-42410           AVS                   2001-12-25 19:09  2002.01.14  
access public method


1-42461           User                  2001-12-25 08:49  2002.01.14  
Как же мне отрисовать самому строки в TListView?


14-42569          Besa                  2001-11-14 14:42  2002.01.14  
Сертифицирование в Инете?