AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi BorderStyle=nsNone und WindowState=wsMaximized
Thema durchsuchen
Ansicht
Themen-Optionen

BorderStyle=nsNone und WindowState=wsMaximized

Ein Thema von Daniel · begonnen am 15. Apr 2003 · letzter Beitrag vom 16. Apr 2003
Antwort Antwort
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#1

BorderStyle=nsNone und WindowState=wsMaximized

  Alt 15. Apr 2003, 19:13
Die Kombination von myForm.BorderStyle=bsNone (um ein rahmenloses Fenster zu erhalten) und myForm.WindowState=wsMaximized (um es zu maximieren) bringt i.A. den unerwünschten Effekt mit sich, dass die Taskleiste ebenfalls übedeckt wird. Die Lösung besteht darin, die Methode "RequestAlign" des Formulars zu überschreiben, um so die Größenänderung steuern zu können.

Zuerst die Deklaration:

Delphi-Quellcode:
TfrmMain = class(TForm)
...
  procedure RequestAlign; override;
...
private
...
public
...
end;
Und dann die Methode selber:

Delphi-Quellcode:
procedure TfrmMain.RequestAlign;
var rect : TRect;
begin
  SystemParametersInfo(SPI_GETWORKAREA, 0, @rect, 0);
  Constraints.MaxHeight:= rect.Bottom;
  inherited RequestAlign;
end;
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#2
  Alt 16. Apr 2003, 07:01
Eine Idee dazu:
Wenn die Startleiste oben, links oder rechts ist, wird die Routine Probleme machen, oder?

Wie wäre es anstatt mit:
Code:
  myForm.BorderStyle := bsNone;
  myForm.Align := alClient;
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#3
  Alt 16. Apr 2003, 09:32
Hallo,

erstmal Danke für den Hinweis. Ich habe erneut in die DOkumentation gesehen und festgestellt, dass es offenbar einen besseren Weg gibt, dieses Problem zu lösen: Man reagiert auf die Nachricht "WM_GETMINMAXINFO". Auszug aus der MSDN-Library:
Zitat von MSDN-Library:
The MINMAXINFO structure contains information about a window's maximized size and position and its minimum and maximum tracking size.
Das scheint auch gut zu funktionieren - selbst wenn die Taskleiste oben, rechts oder links sitzt.

Die Deklaration:
procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO; Die Implementation:
Delphi-Quellcode:
procedure TfrmMain.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
var rect : TRect;
Begin
  SystemParametersInfo(SPI_GETWORKAREA, 0, @rect, 0);

  Msg.MinMaxInfo^.ptMaxSize.X:= rect.Right-rect.Left;
  Msg.MinMaxInfo^.ptMaxSize.Y:= rect.Bottom-rect.Top;

  Msg.MinMaxInfo^.ptMaxPosition.X:= rect.Left;
  Msg.MinMaxInfo^.ptMaxPosition.Y:= rect.Top;

  Msg.Result:= 0;
End;
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz