Entwickler-Ecke

Sonstiges (Delphi) - Suche eine einfache Möglichkeit für Multi-Resolution Apps


LingNeu - Sa 06.02.10 17:03
Titel: Suche eine einfache Möglichkeit für Multi-Resolution Apps
Hallo Delphifreunde,
bin seit Stunden auf der Suche nach einer Möglichkeit, relativ einfach eine vorhandene Applikation in der Auflösung zu verändern.
Die vorhandene App hat eine Auflösung von 800x600 Punkten und besteht aus vielen hundert Komponenten.
Ich muss unbedingt in den nächsten Tagen eine Anpassung für einen Monitor mit 1920x1200 hinbekommen.
Die Beispielcodes, welche ich gefunden habe, bringen mich in Zeitnot, da ich jede visuelle Komponente neu nach dem vorhandenen Bildschirm berechnen muss. ScaleBy habe ich bereits probiert - haut leider bei dem BS nicht hin, da gibt es starke Verzerrungen.

Kennt jemand von Euch eine Komponente welche unter D7 Enterprise läuft und allgemein eine Art Zoom/Resize für eine vorhandene Form anbietet. Kauf- oder Freeware ist egal.
Vielleicht hat auch noch jemand eine andere Idee.
Wäre für jeden Hinweis sehr dankbar!

Gruss
LingNeu


Bernhard Geyer - Sa 06.02.10 17:49

Wir haben D6 um mit dem Formularproperty Scaled=True und passenden Arbeiten mit Aligned Panels ist auslösungsschirmunabhänige Anwendungen mit Delphi kein Problem. Aber es gibt ein paar Fallstricke.
Hast du ein fehlerhaften Beispielscreen?


LingNeu - Sa 06.02.10 18:34

hallo Bernhard,
ich habe folgendes Beispiel irgendwo bekommen, da habe ich aber immer auf der rechten Seite Probleme, ebenso mit den Elementen nach der unteren Fensterseite hin. Leider kenne ich keine Komponente, die sowas unter D7 machen könnte. Da wäre dann vielleicht recht schnell eine Lösung möglich.

Ich hänge mal die Original-Form als Bild und das Ergebnis ran.


Folgender Source steckt dahinter ...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm1.FormCreate(Sender: TObject);
begin
  MaximizeAndScale;
end;

procedure TForm1.MaximizeAndScale;
var
  sWidth: Double;
  sHeight: Double;
begin
  sWidth := Screen.MonitorFromWindow(Handle).Width / Width;
  sHeight := Screen.MonitorFromWindow(Handle).Height / Height;
  if sWidth < sHeight then
  begin
    ScaleBy(Round(Screen.MonitorFromWindow(Handle).Width * 1.02), Width);
  end
  else
  begin
    ScaleBy(Round(Screen.MonitorFromWindow(Handle).Height * 1.02), Height);
  end;
  WindowState := wsMaximized;
end;

end.