Witam,
przeszukałem sporo materiałów w sieci na temat działania aplikacji na wielu monitorach, ale nie znalazłem tam rozwiązania na mój problem.
Mam okno główne programu, które uruchamia się na monitorze, który wcześniej wybraliśmy z Combobox z ustawień programu (załadowałem tam listę dostępnych monitorów).
procedure TfrmSettings.GetMonitors;
var
i: integer;
Item: TJvImageItem;
begin
set_main_DefaultStartAppMonitor.Items.Clear;
for I := 0 to Screen.MonitorCount -1 do
begin
Item := set_main_DefaultStartAppMonitor.Items.Add;
Item.ImageIndex := 0;
Item.Text := GetMonitorName(i);
//Item.Text := 'Ekran ' + IntToStr(i + 1);
end;
end;
function GetMonitorName(MonitorIndex: integer) : string;
var
MonitorInfo: TMonitorInfoEx;
begin
MonitorInfo.cbSize := SizeOf(MonitorInfo);
if not GetMonitorInfo(Screen.Monitors[MonitorIndex].Handle, @MonitorInfo) then
RaiseLastOSError
else
Result := MonitorInfo.szDevice;
end;
Załóżmy, że pracuję na 2 ekranach:
1 Ekran
Program główny (Full screen)
2 Ekran
Inne otwarte aplikacje
Mam założonego globalnego hooka na myszkę i chcę obsłużyć taką oto funkcję:
function MouseHookProc(Code : integer; WParam : WPARAM; LParam : LPARAM) : LRESULT; stdcall;
var
HookStruct : PMOUSEHOOKSTRUCT;
Monitor: TMonitor;
begin
HookStruct := Pointer(LParam);
case Code of
HC_ACTION :
begin
pt := HookStruct.Pt; // współrzędne kursora
Monitor := Screen.MonitorFromPoint(pt); // Zwraca index monitora nad którym znajduje się kursor
{ GÓRNY PASEK NAWIGACJI NAGRYWANIA }
{ Jeżeli najedziemy na górną krawędź ekranu to wysuwa się okno nawigacyjne na całą szerokość ekranu }
if (pt.Y <= 0) and not Assigned(frmRecordMenuNavigator) then
begin
Application.CreateForm(TfrmRecordMenuNavigator, frmRecordMenuNavigator);
frmRecordMenuNavigator.Show;
end
else
if Assigned(frmRecordMenuNavigator) then
begin
if (pt.Y > frmRecordMenuNavigator.Height) then
frmRecordMenuNavigator.Close
else
exit; // Jeśli kursor w obszarze menu to nie nagrywamy akcji
end;
...
Powyższy kod działa tylko z ekranem głównym.
Problemem jest to, że chciałbym, aby to okno nawigacyjne pokazywało się na górze ekranu, na którym aktualnie znajduje się kursor.
How to do it?