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