Форум: "Начинающим";
Текущий архив: 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