Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.58.77.244] |
|
Сообщ.
#1
,
|
|
|
Задача: запустить mpv без рамки строго по координатам панели формы.
Form.top не катит, потому что в линуксах top формы считается вместе с заголовком, а у mpv - исключительно самого окна. Поэтому мне нужно выцепить экранные координаты внутренней части формы (расположил на форме TPanel с выравниванием AlClient) В общем, вот что получилось: procedure TForm1.SpeedButton1Click(Sender: TObject); var aPoint:Tpoint; x,y,w,h:integer; Process:TProcess; begin showmessage(inttostr(y)); aPoint.x := 0; aPoint.y := 0; aPoint := form2.panel1.ClientToScreen(aPoint); x:=aPoint.X; y:=aPoint.Y; h:=form2.panel1.Height; w:=round(h*1.77777779); Process:=Tprocess.create(nil); Process.commandline:='mpv --pause --geometry='+inttostr(w)+'x'+inttostr(h)+'+'+ inttostr(x)+'+'+inttostr(y)+' --keep-open=yes "имя_файла_.mp4" --input-ipc-server=/tmp/mpvsocket'; Process.Execute; end; Если в коде присутствует showmessage, то после нажатия на его кнопку все отображается правильно -top mpv совпадает с top формы. Если же showmessage отсутствует, top mpv выше на высоту заголовка. При этом если запустить процесс повторно (убив запущенный mpv или оставив его работать) - окно mpv открывается в нужных координатах. Что делать - честно, не знаю. может кто-нибудь скажет чего умного? Заранее блаагодарен, Дмитрий. |
Сообщ.
#2
,
|
|
|
см WinAPI
|
Сообщ.
#3
,
|
|
|
Цитата GSM_Roamer @ Что делать - честно, не знаю. может кто-нибудь скажет чего умного? 1) ShowMessage показывает явную лажу т.к. y в нем не инициализирован 2) Стоит уточнить ваш Windows Manager. В разных менеджерах поведение окон отличается. У меня вот mpv запускается постоянно в рандомных местах и игнорирует --geometry, хотя координаты вычисляются правильно. Прикреплённый файлScreenshot_20230721_174526.png (128,23 Кбайт, скачиваний: 73) 3) Думаю вот это вам поможет |