Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
4-42607
YUS
2001-11-11 20:59
2002.01.14
HOOK


1-42475
Snake2000
2001-12-24 17:11
2002.01.14
Производная


3-42361
Ross
2001-12-11 20:54
2002.01.14
ADO


4-42634
Tekman
2001-11-10 00:32
2002.01.14
Окно без рамки


1-42432
wHammer
2001-12-22 10:04
2002.01.14
Как получить псевдографику в Win?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский