![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
неверная установка позиции окна
toropoff © (2012-09-12 13:09:00)DelphiXE2
два монитора 1920x1080
устанавливаю позицию формы:
left:= 1920;
top:= 0;
окно на втором мониторе, но позиция не в самом верху, а примерно на пикслей 15 ниже.
разворачиваю окно на полный экран через кнопку окна - разворачивается правильно.
есть какие идеи?
Sha (2012-09-13 21:12:00) [1]вот так проще
BoundsRect:=Monitor.WorkareaRect;
Sha (2012-09-13 20:55:00) [2]
Rect: TRect;
Rect:=Monitor.WorkareaRect;
with Rect do Self.SetBounds(Left, Top, Right-Left, Bottom-Top);
кроме того, никто не мешает вызывать EnumDisplayMonitors, как это сделано в Forms
kilkennycat (2012-09-13 06:47:00) [3]да уж, код интересный. особенно интересно будет работать, если другие мониторы добавляются или отключаются после инициализации приложения (есть очень хороший шанс, что Screen.MonitorCount не изменится.)
https://forums.embarcadero.com/thread.jspa?threadID=72201&tstart=60
toropoff (2012-09-12 15:23:00) [4]Дмитрий С, спасибо!
интересный код, никогда бы не подумал..
вечером буду копать...
[quote]DelphiXE2 (2012-09-12 15:11:00) [5][quote]DelphiXE2
два монитора 1920x1080
устанавливаю позицию формы:
left:= 1920;
top:= 0;
окно на втором мониторе, но позиция не в самом верху, а примерно на пикслей 15 ниже.
разворачиваю окно на полный экран через кнопку окна - разворачивается правильно.
есть какие идеи?[/quote]
Дмитрий С (2012-09-12 14:37:00) [6]Я так понимаю то что тебе нужно делается примерно так:
var
I, SelectedMonitor: Integer;
begin
SelectedMonitor := 0;
for I := 1{!} to Screen.MonitorCount - 1 do
if Screen.Monitors[SelectedMonitor].Left < Screen.Monitors[I].Left then
SelectedMonitor := I;
with Screen.Monitors[SelectedMonitor] do
Self.SetBounds(Left, Top, Self.Width, Self.Height);
end;
Дмитрий С (2012-09-12 14:31:00) [7]У тебя в настройках мониторов случайно один монитор не стоит выше другого?