Autor Beitrag
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 762
Erhaltene Danke: 127



BeitragVerfasst: Mo 13.06.22 16:17 
Hallo miteinander,

ich habe ein Programm mit Delphi 10.4 geschrieben, das auf meinem Full-HD-Monitor gut läuft (Skalierung 100%).
Auf einem anderen Rechner, auch Full-HD-Monitor, aber mit einer Skalierung von 125% geht das Programm über den Bildschirmrand hinaus.
Das könnte ich ja eventuell noch verstehen, aber es werden jetzt nicht etwa 80%, sondern rund 97% des Originalbildschirms angezeigt.
Dazu 2 Fragen?
- Kann man eine Skalierungsanpassung mit einfachen Mitteln realisieren?
- Warum gerade etwa 97% (und nicht weniger)?

Vielen Dank schon mal!
ub60
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: Di 06.12.22 21:36 
Hallo ub60,
Deine Frage ist ja schon Monate her, aber noch offen. Nun muss ich vorsichtig sein als Laie, Profis Tips zu geben. Dennoch:
Hatte ein ähnliches Problem, aber der Ausgangspunkt war anders: mein Programm war designt auf Form1.Width=1450 und Form1.Heigth=800. Der Empfänger hatte einen Bildschirm mit 1200x760. Auch hier war das Programm "abgeschnitten". Lösung:
1. Variante: Programm mit maximized starten, dann brauchst Du vermutlich gar nichts weiter tun.
2. Ich gehe davon aus, dass Du unter dem Suchbegriff "Scalierung Delphi" folgende Lösung kennst
docwiki.embarcadero.....TWinControl.ScaleBy
ausblenden Delphi-Quelltext
1:
procedure ScaleBy(M, D: Integer);					

Zitat:
Skaliert das Steuerelement und seine untergeordneten Komponenten.

ScaleBy skaliert ein Steuerelement, ohne die Position seiner oberen linke Ecke zu verändern. Die Wirkung ist ähnlich wie bei einer Änderung der Eigenschaften Height und Width, es wird aber versucht, die relative Größe und Position der untergeordneten Steuerelemente durch eine entsprechenden Neuskalierung bzw. Neuanordnung beizubehalten.

Die Parameter M und D definieren einen Multiplikator und einen Divisor für die Skalierung. Wenn Sie ein Objekt beispielsweise auf 75 % seiner Originalgröße skalieren möchten, geben Sie für M 75 und für D 100 an. Sie können beliebige Wertpaare verwenden, die dieses Verhältnis ergeben. Das Objekt wird also auch mit M = 3 und D = 4 auf 75 % verkleinert.

Sollen die untergeordneten Komponenten des Steuerelements, nicht aber das Steuerelement selbst skaliert werden, verwenden Sie die Methode ScaleControls.


3. Die Frage nach den 97 % kann ich als Hochfrequenztechniker nur aus den Zeiten analoger Technik her ableiten. Im alten PAL-System Fernsehnorm wurden die Bilddaten als einzelne Zeilen geschrieben (1,3,5,.. dann 2,4,6..) Die Röhren benötigten einen Rahmen, so dass nur etwa 97 % des Bildes wirklich sichtbar waren. Diese 3% Verschnitt kenne ich auch von professionellen Programmen, die beim Umcodieren von digitalen Diashows auf Video (TV-Gerät) diesen Verschnitt fest vorgeben oder als Variable einstellen lassen. M.W. ist die Zeilentechnik auch bei den heutigen TFT-Bildschirmen geblieben. (schwache Erklärung eines Oldies). Ich würde also die 3 % bei der Skalierung mit einrechnen.
3. Für ein anderes Programm hatte ich zeitweise zur Skalierung ein Spinedit eingesetzt, zur schrittweisen Anpassung an den Bildschirm (100,99,97,97, etc). Zu beachten hierbei ist, dass mit jedem Prozeduraufruf die Form-Werte sich ändern, d.h. Ausgangswerte vorab speichern(!).
Zuletzt: Bildschirmformate sind vielfältig. Die Zeiten 4:3 ist lang vorbei. Aber auch 16:9 ist dann nicht zwangsläufig anzunehmen. Also eine schöne Aufgabe, wenn kein maximized und es dennoch perfekt sein soll.