Autor Beitrag
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Do 15.01.15 23:29 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 15.01.15 23: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 :?

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."

Für diesen Beitrag haben gedankt: GuaAck
Anwender
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 62
Erhaltene Danke: 9



BeitragVerfasst: Fr 16.01.15 00: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. :(

_________________
neu hier

Für diesen Beitrag haben gedankt: GuaAck
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 16.01.15 06: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+):
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 27.01.15 05: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.

Für diesen Beitrag haben gedankt: GuaAck
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Di 27.01.15 22:45 
Das wäre ja eine ideale Möglichkeit,
danke vielmals an beide,

Gruß
GuaAck