Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Расположени формы на экране (Delphi) (http://forum.oszone.net/showthread.php?t=42679)

fossil 18-12-2004 19:13 281286

Расположени формы на экране (Delphi)
 
Привет! Я хочу чтобы моя форма всегда висела над трее и прилипала к нему. Как сделать так чтобы при разных разрешениях экрана форма оставалась на том же месте? (Разработчики Delphi предусмотрели только по дефолту и по центру, вот сволочи :)). В инете ничего подобного не нашел.

Netscaper 19-12-2004 00:12 281393

То есть как? Отлавливаешь 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 281512

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

Netscaper 19-12-2004 18:47 281537

Не очень понимаю, что значит
Цитата:

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

Savant 19-12-2004 18:55 281542

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

Netscaper 19-12-2004 19:10 281545

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

fossil 19-12-2004 21:01 281567

Netscaper
Ясно. Спасибо.
Но я бы хотел чтобы моя одна форма при активации определяла разрешение экрана, задавала параметры Top и Left и после этого появлялась уже в нужном месте.

Netscaper 19-12-2004 23:39 281612

Код:

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 281719

Netscaper
То что надо. Спасибо!


Время: 04:31.

Время: 04:31.
© OSzone.net 2001-