![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Форма [D5]
Русский © (2001-11-09 10:29:00)Hi, мастера!
Как сделать так, чтобы форму - нельзя было вытащить за границы экрана
(очень нужно грамотное решение, если вешать процедуру выравнивания -
на таймер, то получается очень уродливо).
Подскажите а :)))
Как сделать, чтобы можно
Юрий Зотов (2001-11-13 19:04:00) [1]> Русский (09.11.01 16:51)
> Такой код - я могу написать и сам
Тогда в чем же была проблема?
> а вот вы пробовали его использовать
Я СПЕЦИАЛЬНОнаписал, что код простейший, но далеко не лучший. НЕламер должен был просто заглянуть в SDK и посмотреть параметры сообщения. А дальше сам собой рождался тот самый код, который предложил troits.
> Да по - видимому нормального решения я здесь не найду
НОРМАЛЬНОЕ- это значит ГОТОВОЕ? Такой подход как раз для ламеров и характерен, но Вы же НЕламер, верно?
troits (2001-11-10 09:46:00) [2]Никакой принципиальной разницы нет. Просто с TWMWindowPosChanging
работать удобнее. Там lParam сразу объявлен как указатель на TWindowPos.
procedure TForm1.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
with Message.WindowPos^ do
begin
....
Все работает.
Русский (2001-11-09 19:49:00) [3]Thanx troits :)))
Работает !!!!!!!
Слушай а в чём разница в объявлении заголовка обработчика :
TWindowPosChanging и TMessage ?
Пробовал TWindowPosChanging - не работает. Почему так ?
troits (2001-11-09 18:23:00) [4]Попробуй в обработчике WM_WINDOWPOSCHANGING
with PWindowPos(Message.lParam)^ do
begin
if X < 0 then
X := 0;
if Y < 0 then
Y := 0;
...
Русский (2001-11-09 16:51:00) [5]Юрий Зотов!
Такой код - я могу написать и сам, а вот вы пробовали его использовать ?
Выглядить ето - далеко не лучшим образом, а если окно - большое - в глазах вообще рябить начинает от постоянных дёрганий. Да по - видимому нормального решения я здесь не найду :(((
Юрий Зотов (2001-11-09 15:27:00) [6]Верю. Поэтому специально для НЕ ламеров привожу пример обработчика сообщения. Заодно сообщаю, что это написано в любой книге по 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 14:08:00) [7]Уважаемый Юрий Зотов, я не ламер :)))
Как должен выглядеть этот обработчик ????
Юрий Зотов (2001-11-09 11:08:00) [8]Например, повесить выравнивание на обработчик сообщения WM_WINDOWPOSCHANGED (или WM_WINDOWPOSCHANGING).