Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Windows XP --> Windows 8.1: Forms mit Scrollbars
GuaAck - Do 15.01.15 22:29
Titel: Windows XP --> Windows 8.1: Forms mit Scrollbars
Hallo Experten,
ich mache viele Programme im Standard Delphi 7/Windows-Design, also keine Skins usw. Forms habe ich mit dem Standard "Form-Editor (F12)" estellt. Unter XP alles bestens. Jetzt laufen einige meiner Programme unter Windows 8.1. Da haben sehr viele Forms plötzlich Scrollbars, logisch, der Forms-Rahmen ist beim Windows 8.1 Standard-Design etwas breiter.
Ändern kann ich das eh nicht mehr, muss ich halt alles ein paar Pixel auf dem Form verschieben oder das Form größer machen und neu compilieren. Aber was, wenn Windows XX die Rahmen noch etwas breiter macht oder sonstwie die Abmaße ändert? Dann muss ich wieder alles ändern. Wie geht das richtig? Oder sind da die Grenzen des betagten Delphi 7 erreicht?
Beste Grüße
GuaAck
Martok - Do 15.01.15 22:38
GuaAck hat folgendes geschrieben : |
| Oder sind da die Grenzen des betagten Delphi 7 erreicht? |
Ja.
Ist leider die komplette Antwort :?
Anwender - Do 15.01.15 23:47
ich glaube, daß ist erst bei Delphi XE2 oder so umgestellt worden, daß die Forms unter allen Betriebssystemen (jenachdem, welche von den höhren Versionen gnädigerweise noch unterstützt werden ...) gleich aussehen.
Bei Delphi 7 mußte das einkalkulieren, oder manuell setzen.
gibt hier - oder in der DP irgendwo OS-Erkennungsroutinen - mußte mal gucken.
oder ne höhere Delphi Version KAUFEN, Kaufen, Kaufen und einkalkulieren, daß die damit übernommenen Programme 'niemals' mehr zu niedrigederen Versionen kompatibel sind. :(
jaenicke - Fr 16.01.15 05:14
Das funktioniert seit Delphi 2005 oder 2006 korrekt. Und das Problem trat schon seit Vista auf, bei gestylten Windows-GUIs auch schon bei XP.
Das per E-Mail vermutlich immer noch kostenlos erhältliche Turbo Delphi macht es z.B. korrekt.
Die einzige Möglichkeit ist immer mit Align alClient usw. zu arbeiten. Das sieht zwar nicht schön aus, dafür aber überall gleich.
Die Scrollbars bekommst du weg indem du ein Panel auf alClient auf das Formular legst und alles andere drauf oder die Scrollbars beim Formular ausschaltest. Den Abstand vom rechten und unteren Rand bekommst du trotzdem nicht korrekt hin.
Man könnte versuchen das zu fixen indem man in das Setzen der Größe eingreift, wenn der ComponentState csLoading ist oder so... durch eine Umleitung der passenden virtuellen Methoden oder durch Erstellen einer abgeleiteten Formularklasse. Aber ich habe keine Zeit und auch keine Lust das noch für Delphi 7 zu machen. Vielleicht findet sich ja jemand...
// EDIT:
Ist wirklich so einfach (für kompilieren unter XP, Ausführen unter Vista+):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| public procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
...
procedure TForm1.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); begin if (csLoading in ComponentState) and (Win32MajorVersion > 5) then begin if AWidth > 0 then inherited SetBounds(ALeft, ATop, AWidth + 4, AHeight) else if AHeight > 0 then inherited SetBounds(ALeft, ATop, AWidth, AHeight + 4) else inherited; end else inherited; end; |
Die 4 muss natürlich noch durch den echten Rahmenunterschied ersetzt werden (der Rahmen ist unterschiedlich breit, nicht nur im Vergleich zu XP!).
jaenicke - Di 27.01.15 04:15
Wie
Narses mir gerade geschrieben hat reicht es AutoScroll auf False zu setzen, damit ClientWidth und ClientHeight gespeichert werden statt die Größe des Fensters mit Rahmen. Es reicht also schon das zu setzen, damit alles funktioniert, das habe ich gerade auch ausprobiert.
GuaAck - Di 27.01.15 21:45
Das wäre ja eine ideale Möglichkeit,
danke vielmals an beide,
Gruß
GuaAck
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!