Frage

Ich habe festgestellt, dass, wenn ich eine einfache Form nur eine Multifunktionsleiste enthält nehmen und eine Statusleiste, es ist Cutoff. Die Kontrolle, die Sie über der Statusleiste angezeigt wurde später entfernt. Das gleiche Cutoff auftritt, was Kontrolle geschieht, anwesend zu sein. Später nahm ich die Statusleiste und legte ein Memo-Steuerelement es stattdessen mit dem gleichen Ergebnis.

ohne Leiste: ohne Leiste
(Quelle: xrw.bc.ca )

mit Multifunktionsleiste: mit Multifunktionsleiste
(Quelle: xrw.bc.ca )

Ich habe dies dargestellt mit einiger Zeichnung 2, 4 und 8 Pixel von der Kante.


(Quelle: xrw.bc.ca )
maximiert
(Quelle: xrw.bc.ca )

als Chris unten Lively sagt, gibt es eine Fehlkalkulation der Größen klar gewesen. Wie kann ich das korrigieren?

Vielen Dank für Ihre Kommentare!

War es hilfreich?

Lösung

ich das falsch verstanden, das Problem mit meiner vorherigen Antwort.

Es gibt eine Abhilfe für dieses Problem Fehlkalkulation mit Ich habe in der Lage zu kommen (schnell).

Sie können eine benutzerdefinierte für WM_SYSCOMMAND message mit dem Parameter SC_MAXIMIZE WParam verwenden. Sie können das Formular mit dem folgenden dann die Größe:

type
  TForm1 = class(TForm)
    // other stuff
    procedure WMSyscommand(var Msg: TWMSYSCOMMAND); message WM_SYSCOMMAND;



procedure TForm1.WMSysCommand(var Msg: TWMSYSCOMMAND);
var
  R: TRect;
begin
  // Test for SC_MAXIMIZE. If found...
  if Msg.CmdType = SC_MAXIMIZE then
  begin
    SystemParametersInfo(SPI_GETWORKAREA, 0, @R, 0);
    Top := R.Top;
    Left := R.Left;
    Width := R.Right - R.Left;
    Height := R.Bottom - R.Top;
    Msg.Result := 0; // Message handled
  end
  else
    DefaultHandler(Msg);
end;

Der obige Code (getestet auf Vista 32-Bit Home Premium mit Aero / Glass aktiviert) funktioniert gut.

Andere Tipps

Die Lösung von Ken Weiß vorgeschlagen hat ein paar Probleme:

  • Maximieren Taste aktiv bleibt, verwenden Griffe auf maximierten Fenster können die Größe
  • Unable Fenster zurück zur vorherigen Größe wiederherzustellen.

So schlage ich vor, wie folgt vor:

// add to form object
procedure WMGetMinMaxInfo(var mmInfo : TWMGETMINMAXINFO); message WM_GETMINMAXINFO;

// implementation
procedure TfrmMain.WMGetMinMaxInfo(var mmInfo: TWMGETMINMAXINFO);
var
  R: TRect;
begin
  with mmInfo.MinMaxInfo^ do
  begin
    SystemParametersInfo(SPI_GETWORKAREA, 0, @R, 0);
    ptMaxPosition.X := R.Left;
    ptMaxPosition.Y := R.Top;
    ptMaxSize.X     := R.Right - R.Left;
    ptMaxSize.Y     :=  R.Bottom - R.Top-1;
  end;
end;

Nicht ideal, da ich zu haben (aus irgendeinem Grunde) selbst die maxHeight von -1, um für die Standard-Handler anpassen, um nicht wieder zu behaupten und das Fenster zu -8, -8, bewegen ... Aber es funktioniert für mich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top