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

user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
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 > 5then
  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 user profile iconNarses 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