Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];

Вниз

Перенос главной формы приложения на другой монитор   Найти похожие ветки 

 
Skyle ©   (2007-12-06 07:18) [0]

Решил тут приделать в программу фенечку такую: кнопку нажимаешь и окно переносится на следующий монитор. Если два одинаковых монитора с одинаковым разрешением на двухголовой карте, то всё работает. А если две карты, разные мониторы, разные разрешения, то не работает: при переносе на меньший монитор (не primary) программа на нём не видна, приходится активировать в таскбаре чтобы появилась. Вроде изменение размеров учел...

И ещё: при таком переносе если на другом мониторе минимизируешь окно, оно минимизируется на тот монитор, на котором было запущено изначально.

Соответственно вопрос: что надо посмотреть (ключевые слова) чтобы грамотно сделать перенос окна, что я упустил.

Код следующий:

procedure TfBaseMain.acChangeMonitorExecute(Sender: TObject);
var
 R : TRect;
 WndHandle : THandle;

 procedure GetNewMonitorRect(var R : TRect);
 var
   hOldMon, hMon : HMONITOR;
   MI : TMonitorInfo;
   RM : TRect;
   H, W, I : Integer;
 begin
   hMon := 0;

   hOldMon := MonitorFromWindow(WndHandle, MONITOR_DEFAULTTONEAREST);
   for I := 0 to Screen.MonitorCount - 1 do
     if Screen.Monitors[I].Handle = hOldMon then
     begin
       //Следующий монитор будет дальше (по циклу)
       hMon := Screen.Monitors[(I + 1) mod Screen.MonitorCount].Handle;
       Break;
     end;

   if hMon = 0 then
     Exit; //Паранойя

   W := R.Right - R.Left;
   H := R.Bottom - R.Top;

   MI.cbSize := SizeOf(MI);
   GetMonitorInfo(hMon, @MI);

   RM := MI.rcWork;

   R.Left := RM.Left + (RM.Right - RM.Left - W) div 2;
   R.Top := RM.Top + (RM.Bottom - RM.Top - H) div 2;
   R.Right := R.Left + W;
   R.Bottom := R.Top + H;
 end;

begin
 inherited;
 WndHandle := Application.MainForm.Handle;
 GetWindowRect(WndHandle, R);
 GetNewMonitorRect(R);
 SetWindowPos(WndHandle, 0, R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top, SWP_NOZORDER);
end;


Пробовал добавлять в конце
 SetWindowPos(Application.Handle, 0, R.Left, R.Top, 0, 0, SWP_NOSIZE);не помогает - всё равно минимизируется на primary монитор.


 
Skyle ©   (2007-12-06 14:25) [1]

Мой вопрос неинтересен, плохо сформулирован или просто глуп?


 
KSergey ©   (2007-12-06 14:28) [2]

> Skyle ©   (06.12.07 14:25) [1]
> Мой вопрос неинтересен, плохо сформулирован или просто глуп?

Вероятно это просто новая довольно тема.
Хотя, уверен, когда-нибудь и это будет так же как и запуздырить туда где все знают :)


 
Skyle ©   (2007-12-06 14:36) [3]

> KSergey ©   (06.12.07 14:28) [2]
Ну ладно, будем первопроходцами :)


 
Koss   (2007-12-06 23:47) [4]

мне эта тема офигенно интересна ибо я вообще не предстовляю каким образом можно отобразить окно на другом мониторе      буду очень презнателен если подкинеш мне инфы по теме.


 
Skyle ©   (2007-12-07 07:23) [5]


> Koss   (06.12.07 23:47) [4]

Код в [0] рабочий, основан на примере из MSDN. Есть просто несколько некрасивостей, которые я и пытаюсь победить.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
2-1196826590
Ezorcist
2007-12-05 06:49
2007.12.30
Заголовок таблицы с объединенными ячейками.


2-1196853292
mrFreeman2007
2007-12-05 14:14
2007.12.30
Как программно свернуть форму?


2-1197011951
Александр Семак
2007-12-07 10:19
2007.12.30
Удаление установленных компонентов


6-1176202407
Khabibulin
2007-04-10 14:53
2007.12.30
Как залогиниться у удаленного компьютера по локальной сети?


3-1187943795
DmitriyG.
2007-08-24 12:23
2007.12.30
Передача и восстановление данных для mysql





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский