Войти

Показать полную графическую версию : Расположени формы на экране (Delphi)


fossil
18-12-2004, 19:13
Привет! Я хочу чтобы моя форма всегда висела над трее и прилипала к нему. Как сделать так чтобы при разных разрешениях экрана форма оставалась на том же месте? (Разработчики 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;

При создании окно переносится в правый верхний угол. При изменении разрешения экрана - смещается на нужное место.

fossil
19-12-2004, 16:21
Netscaper
Хм... спасибо конечно, но хотелось бы другой вариант...
Мне бы лучше подошел вариант когда прога определяет расширение, и в зависимости от расширения создает форму... А еще лучше чтобы сама автоматически висела в правом нижнем углу :)

Netscaper
19-12-2004, 18:47
Не очень понимаю, что значит
сама автоматически висела...
При изменении разрешения экрана система посылает всем окнам сообщение с новыми размерами экрана.
Если для каких-то диапазонов надо использовать разные формы, можно сделать основное окно невидимым (MainForm.Visible := False), причем не забыть указать, что Application.ShowMainForm := False в проекте. Невидимое окно все равно будет получать сообщения WM_DISPLAYCHANGE и в обработчике создавать нужную форму LowResForm := TLowResForm.Create(nil).

Savant
19-12-2004, 18:55
fossil
В отличие от тебя, Netscaper все делает грамотно (правильно) и обоснованно. Не поленись объяснить, что значит "сама автоматически висела"... Если ты хочешь такое свойство окну приписать, то тебе его все равно придется реализовать через код, предложенный Netscaper

Netscaper
19-12-2004, 19:10
Savant
Спасибо за поддержку. Действительно, надо объяснять свои потребности. :)

fossil
19-12-2004, 21:01
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. Можно поставить в любой метод.

fossil
20-12-2004, 10:17
Netscaper
То что надо. Спасибо!




© OSzone.net 2001-2012