Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Windows Manager (https://www.delphipraxis.net/162418-windows-manager.html)

Peter666 22. Aug 2011 14:55

Windows Manager
 
Hi,

bei einem aktuellen Projekt (das ist im Prinzip nahezu komplett), habe ich folgendes Problem. Das Programm dient zur Überwachung von Daten und kann aufgrund des Designs bzw. der Projektvorgaben aus etlichen Fenstern bestehen. Es gibt insgesamt 5 verschiedene Typen von Anzeigefenstern die wahlweise ein Videosignal, bzw. Graphen und verschiedene Alarme beinhalten. Bei mehr als 10 Fenstern wird das schon arg unübersichtlich.
Meine Frage ist nun, wie man diese möglichst einfach am Monitor anordnen kann? Ich kenne derzeit leider überhaupt keine gute Ansätze. Ein Ansatz den ich derzeit notgedrungen nutzte ist dieser hier:

Code:
var
  i, row, column: integer;
  max, remainder: integer;
  maxwidth, maxheight: integer;
  Children: TList;
begin
  Children := TList.Create;
  try
    CollectWindows(Children);
    if Children.Count = 0 then exit;

    row := -1;
    column := 0;
    max := Children.Count shr 1;
    if max = 0 then max := 1;

    remainder := (max * max) - Children.Count;
    maxwidth := Screen.Width div max;
    for i := 0 to Children.Count - 1 do
    begin
      if (remainder = 0) then
      begin
        maxheight := Screen.Height div max;

        if (row < (max - 1)) then
          inc(row)
        else
        begin
          row := 0;
          inc(column);
        end;
      end else
      begin
        if (row < (max - 1 - remainder div max)) then inc(row)
        else
        begin
          row := 0;
          inc(column);
          dec(remainder);
        end;
        maxheight := Screen.Height div (max - (remainder div max));
      end;

      with TForm(children[i]) do
      begin
        Width := MaxWidth;
        Height := MaxHeight;
        Left := column * maxwidth;
        Top := row * maxheight;
      end;
    end;
  finally
    Children.Free;
  end;
end;
das funktioniert eher leidlich und bei mehreren Monitoren (mit unterschiedlichen Auflösungen) hilft das nicht.
Meine Frage ist nun, kennt jemand eventuell Ansätze für derartige Probleme?

Peter

stahli 22. Aug 2011 15:19

AW: Windows Manager
 
Nachfrage: Sollen mehrere Monitore genutzt werden?
Hast Du sonst überlegt, ob das eindocken von Formularen in ein Mainform zweckmäßig sein könnte?

Peter666 22. Aug 2011 15:38

AW: Windows Manager
 
Also ich wollte die Möglichkeit automatisch mehrere Monitore zu berücksichtigen gerne mit einbeziehen. Direkt im Aufgabenblock steht das nicht drin, aber ich hab keine Lust das dann später aufgrund einer "das haste doch schon schön auf einem Monitor realisiert, das kriegste bis nächste Woche sicher auch für 2 hin"-Aussage vom Chef dann die komplette Logik über den Haufen zu werfen :)
MDI ist übrigens nicht möglich, da wohl auch irgendwann ein Port für OSX ansteht - zumindest läuft die Anwendung schon jetzt halbwegs in Freepascal und mit Lazarus.

jaenicke 22. Aug 2011 15:45

AW: Windows Manager
 
Zitat:

Zitat von Peter666 (Beitrag 1118635)
MDI ist übrigens nicht möglich, da wohl auch irgendwann ein Port für OSX ansteht - zumindest läuft die Anwendung schon jetzt halbwegs in Freepascal und mit Lazarus.

Da XE 2 nächsten Monat oder so dann ebenfalls OSX unterstützt, brauchst du dafür ja dann kein Lazarus mehr. ;-)

Eine angedockte Oberfläche schafft jedenfalls durchaus sehr viel mehr Übersicht, das sieht man ja an Delphi sehr gut. Wie man es bezüglich Multimonitorsupport nicht machen sollte, sieht man allerdings genauso an Delphi...

Ich selbst habe das so umgesetzt, dass man einzelne Fenster beliebig docken kann und auch beliebig viele Dockparents erzeugen kann. So kann man die Oberfläche sehr gut individuell gestalten, aber auch eine Standardkonfiguration vorgeben. Eine entsprechende Demo ist bei Delphi ja dabei (dockex.dproj), und in aktuellen Delphiversionen (zumindest bei XE) funktioniert die sogar sehr gut.
Allerdings ist das Speichern und Laden der Konfiguration nicht ganz trivial.

Peter666 23. Aug 2011 08:32

AW: Windows Manager
 
Naja das Problem was ich habe ist, dass eine geeignete Sortierung der Fenster bzw. das schnelle springen in ein eventuell verdecktes Fenster. Bei OSX gibts dieses Exposé. Ich frag mich nur (in Ermangelung eines Apple Rechners) wie das bei mehr als 10 Fenstern überhaupt realisierbar ist. Sagen wir, man hat 100 (was zwar unwahrscheinlich ist, aber möglich) Fenster mit unterschiedlichen Maßen und will schnell in ein bestimmtes Fenster springen. Mir schwebt vor da ne Kurztaste zu definieren über die man sowas wie ein Exposé bekommt und dann elegant das jeweilige Fenster abgreift.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz