Všechny verze systému Control Web mohou pracovat
na vícemonitorových systémech. Každý viditelný přístroj má totiž OCL
procedury MoveTo a NewRect, pomocí kterých
může být jednoduše přesunut na libovolné souřadnice a případně mu
změnit i rozměry. Ve vícemonitorových systémech má každý monitor, v
závislosti na svém umístění, určeny své souřadnice a pokud tedy
přemístíme přístroj na souřadnice odpovídající konkrétnímu monitoru,
bude přístroj i na tomto monitoru zobrazen.
Ve vícemonitorových systémech je vždy jeden monitor hlavní. Ostatní
monitory mohou být umístěny napravo, nalevo, nad nebo pod hlavním
monitorem. Levý horní roh hlavního monitoru má souřadnice 0, 0. Šířka
a výška je určena nastaveným rozlišením, tedy např. 1920 x 1080.
Počáteční souřadnice ostatních monitorů závisí na jejich poloze od
hlavního monitoru. Monitory pozicované vlevo a nad hlavním monitorem,
mají odpovídající počáteční souřadnice záporné a jejich hodnota je
určena rozdílem počáteční souřadnice vedlejšího monitoru a nastaveným
rozlišením monitorů. Monitory nacházející se napravo a dole, mají
počáteční souřadnice určené součtem souřadnice levého horního rohu
sousedního monitoru a jeho rozlišení - viz následující obrázek.

Příklad uspořádání monitorů s hlavním monitorem uprostřed
(všechny s rozlišením 1920x1080)
Jak je zřejmé, lze velmi jednoduše pomocí OCL procedury virtuálního
přístroje MoveTo umístit přístroj na konkrétní souřadnici
a tedy i zobrazit jej na konkrétním monitoru.
OCL procedury přístroje system pro práci s
vícemonitorovými systémy
Systém Control Web 8 nabízí v rámci
zabudovaného přístroje system několik nativních OCL
procedur poskytujících informace o vícemonitorovém systému a
souřadnicích jednotlivých monitorů.
GetMonitorsCount( var Primary : cardinal ) : cardinal Procedura
vrátí počet monitorů. V parametru Primary, vrací
číslo primárního (hlavního) monitoru.
GetMonitorRect( Monitor : cardinal; var x, y, Width, Depth : integer ) : boolean Procedura
vrátí v parametrech x, y souřadnice
levého horního rohu a v parametrech Width a Depth
rozlišení monitoru určeného parametrem Monitor.
Pokud je v parametru Monitor předáno číslo
neexistujícího monitoru, vrátí procedura hodnotu false.
GetMonitorWorkRect( Monitor : cardinal; var x, y, w, d : integer ) : boolean Procedura
vrátí v parametrech x, y pracovní
souřadnice levého horního rohu a v parametrech Width
a Depth pracovní rozlišení monitoru určeného
parametrem Monitor. Pokud je v parametru Monitor
předáno číslo neexistujícího monitoru, vrátí procedura hodnotu
false.
GetMonitorFromPos( x, y : integer; var Monitor : cardinal ) : boolean. Procedura
vrátí v parametru Monitor číslo monitoru, na kterém
se nacházejí souřadnice předané v parametrech x,
y. Pokud se souřadnice nevyskytují na žádném
monitoru, vrátí procedura hodnotu false.
Příklad použití
Následující kód demonstruje, jak lze přesunout přístroj na
relativní souřadnici zvoleného monitoru.
procedure MoveToMonitorXY( Monitor : cardinal; x, y : integer; PInstrument : instrument );
var
mx, my, mw, md : integer;
ix, iy, iw, id : integer;
begin
if system.GetMonitorWorkRect( Monitor, mx, my, mw, md ) then
x = mx + x;
y = my + y;
// Případná uprava souřadnic přístroje tak, aby byl celý zobrazen na zvoleném monitoru
PInstrument->GetRect( false, ix, iy, iw, id );
if (x + iw) > (mx + mw) then
x = mx + mw - iw;
end;
if (y + id) > (my + md) then
y = my + md - id;
end;
// Pokud by byly souřadnice x, y po předchozí úpravě před levým horním rohem, umístí se přístroj do levého horního rohu monitoru
if x < mx then
x = mx;
end;
if y < my then
y = my;
end;
// Přesun přístroj na vypočtené souřadnice
PInstrument->MoveTo( x, y );
end;
end_procedure;
Příklad použití demonstruje i příklad v Examples\Tips\Multiple monitors.cw.
|