2 monitory i wyswietlanie programu

0

Witam!!

Czy jest mozliwe w delphi obsłużenie 2 monitorów ?? tzn karta graficzna ma dwa wyjscia, i np All player potrafi otworzyc film na 2 monitorku a na pierwszym mozemy w tym czasie pisac cos w wordzie itd...czyli na kazdym moze byc cos innego. Robie odtwarzacz filmow w delphi i chcialem zrobic opcje, ktora pozwoli okienko z filmem pokazac na 2 monitorku a okno sterowania na pierwszym :) jest to mozliwe ??? przeszukalem forum i nic nie znalazlem na ten temat :(

Pozdrawiam !!! i z gory dzieki za pomoc

0

Tak można! np. zmieniając właściwość formy DefaultMonitor.

0

czyli jak zmienie na dmPrimary to powinno zadzialac ??:) Niemam jak przetestowac bo ten komp z dwoma monitorami mam w pracy wiec jutro sprawdze :) Pozdrawiam wielkie dzieki !!!!!!!

0

Ja zrobiłem tak, żeby wyświetlac pełny obraz na drugim monitorze.
Może się przyda :)

//****************************************************
// Fullscreen on-off
//****************************************************

procedure TForm1.Image1DblClick(Sender: TObject);
var
hr:HRESULT;
MyHandle : cardinal;
Bounds: TRect;
DajNaDrugi : Boolean;
begin

DajNaDrugi := not monitor.Primary; //Program jest aktualnie na monitorze primary?
if DajNaDrugi then  Bounds := Screen.monitors[1].BoundsRect //TV - rozmiary ekranu
else   Bounds := Screen.monitors[0].BoundsRect; //monitor - rozmiary

//tworzę dynamicznie formę, na której bedzie wyswietlany obraz (pełny ekran)
 IF  FFullScreenForm = NIL THEN BEGIN
  FFullScreenForm := TForm.CreateNew(nil);
  with FFullScreenForm do
  begin
    BorderIcons := [];
    BorderStyle := bsNone;
    KeyPreview := True;
    OnKeyDown := Self.OnKeyDown;
    OnKeyPress := Self.OnKeyPress;
    OnKeyUp := Self.OnKeyUp;
    OnDblClick := Image1DblClick;
    SetBounds(Bounds.Left, Bounds.Top, (Bounds.Right-Bounds.Left),(Bounds.Bottom-Bounds.Top));

  end;
end;
  ShowVideoWindow(not IsFullScreen);
end;


procedure TForm1.ShowVideoWindow(FullScreen: boolean);
begin
  if not Assigned(FFullScreenForm) then
    Exit;
application.ProcessMessages;

 if FullScreen<>IsFullScreen then
  begin
        if FullScreen then
        begin
          DSSetVideoHandle(FFullScreenForm.Handle);          
          Self.Hide;
          dsVideoWindow.SetWindowPosition(0, 0, FFullScreenForm.Width, FFullScreenForm.Height);
          FFullScreenForm.Show;
        end
        else
        begin
          DSSetVideoHandle(pVideo.Handle);
          FFullScreenForm.Hide;
          dsVideoWindow.SetWindowPosition(0, 0, Form1.pVideo.Width, Form1.pVideo.Height);
          Self.Show;

        end;
      IsFullScreen := FullScreen;
      ShowCursor(not IsFullScreen);
    end;
end; 
0

przyda sie na pewno wielkie dzieki :))))

0

wszystko fajnie tylko nie rozumiem za bardzo tego:

DSSetVideoHandle(FFullScreenForm.Handle);          dsVideoWindow.SetWindowPosition(0, 0, FFullScreenForm.Width, FFullScreenForm.Height);

Wywala mi blad bo nie wie co to za procedure DSSetVideoHandle();

Pozdrawiam :)

0

Wynalazlem ze jest to zwiazane z komponentami DSPack. Czy nieda sie odpalic drugiej formy bez zadnych komponentów na drugim monitorku ??? ustawilem defaultMonitor na primary i nic to nie daje :((((

Pozdrawiam

0
tajniak napisał(a)

Wynalazlem ze jest to zwiazane z komponentami DSPack. Czy nieda sie odpalic drugiej formy bez zadnych komponentów na drugim monitorku ??? ustawilem defaultMonitor na primary i nic to nie daje :((((

no pewnie, ze nie:

naDrugiMonitorForm.BoundsRect:=screen.monitors[1].boundsRect;
0

Procedura DSSetVideoHandle przypisuje renderowany obraz do jakiegos okna (moze to buć panel, albo forma ) należy mu podać uchwyt okna (handle)

Tutaj brakująca procedurka. [diabel]

procedure DSSetVideoHandle(Handle:cardinal);
begin

  if dsVideoWindow<>nil then
  begin 
  dsVideoWindow.put_Owner(Handle);
  dsVideoWindow.put_MessageDrain(Handle);
  dsVideoWindow.put_Visible(True);
  end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1