Показать полную графическую версию : Расположени формы на экране (Delphi)
Привет! Я хочу чтобы моя форма всегда висела над трее и прилипала к нему. Как сделать так чтобы при разных разрешениях экрана форма оставалась на том же месте? (Разработчики Delphi предусмотрели только по дефолту и по центру, вот сволочи :)). В инете ничего подобного не нашел.
Netscaper
19-12-2004, 00:12
То есть как? Отлавливаешь WM_DISPLAYCHANGE, в зависимости от разрешения меняешь положение...
Простой пример:
...
type TForm1 = ...
procedure DisplayResChange(var Message : TMessage); message WM_DISPLAYCHANGE;
...
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
Left := Screen.Width - Width - 1;
Top := 0;
end;
procedure TForm1.DisplayResChange(var Message : TMessage);
var NewWidth, NewHeight : Word;
begin
NewWidth := Message.LParamLo;
NewHeight := Message.LParamHi;
Left := NewWidth - Width - 1;
Top := 0;
inherited;
end;
При создании окно переносится в правый верхний угол. При изменении разрешения экрана - смещается на нужное место.
Netscaper
Хм... спасибо конечно, но хотелось бы другой вариант...
Мне бы лучше подошел вариант когда прога определяет расширение, и в зависимости от расширения создает форму... А еще лучше чтобы сама автоматически висела в правом нижнем углу :)
Netscaper
19-12-2004, 18:47
Не очень понимаю, что значит
сама автоматически висела...
При изменении разрешения экрана система посылает всем окнам сообщение с новыми размерами экрана.
Если для каких-то диапазонов надо использовать разные формы, можно сделать основное окно невидимым (MainForm.Visible := False), причем не забыть указать, что Application.ShowMainForm := False в проекте. Невидимое окно все равно будет получать сообщения WM_DISPLAYCHANGE и в обработчике создавать нужную форму LowResForm := TLowResForm.Create(nil).
fossil
В отличие от тебя, Netscaper все делает грамотно (правильно) и обоснованно. Не поленись объяснить, что значит "сама автоматически висела"... Если ты хочешь такое свойство окну приписать, то тебе его все равно придется реализовать через код, предложенный Netscaper
Netscaper
19-12-2004, 19:10
Savant
Спасибо за поддержку. Действительно, надо объяснять свои потребности. :)
Netscaper
Ясно. Спасибо.
Но я бы хотел чтобы моя одна форма при активации определяла разрешение экрана, задавала параметры Top и Left и после этого появлялась уже в нужном месте.
Netscaper
19-12-2004, 23:39
procedure TForm1.FormShow(Sender: TObject);
var R : TRect;
begin
SystemParametersInfo(SPI_GETWORKAREA, 0, @R, 0);
Left := R.Right - Width;
Top := R.Bottom - Height;
end;
Появляется в правом нижем углу с учетом Taskbar. Можно поставить в любой метод.
Netscaper
То что надо. Спасибо!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.