Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Mac: Form Constaint nachbilden (https://www.delphipraxis.net/180936-mac-form-constaint-nachbilden.html)

greenmile 1. Jul 2014 20:25

Mac: Form Constaint nachbilden
 
Hallo,

ich muss in meiner Mac-Anwendung die minimale Breite/Höhe des Hauptfensters einschränken. Unter VCL gibt es dafür die Constraints, in der FMX Form suche ich das leider vergeblich. Momentan behelfe ich mir, in dem ich das Event "OnResize" abfange:

Code:
  If (Self.Width<FMinFormWidth) then SetBounds(Self.Left, Self.Top, FMinFormWidth, Self.Height);
  If (Self.Height<FMinFormHeight) then SetBounds(Self.Left, Self.Top, Self.Width, FMinFormHeight);
In XE3 hat das sauber funktioniert, unter XE6 Update 1 habe ich jedoch Darstellungsfehler in der Titelzeile, die ich mit Invalidate nicht in den Griff bekomme. Geht das wirklich nicht und muss ich mit den Darstellungsfehlern leben?

Uwe Raabe 1. Jul 2014 23:23

AW: Mac: Form Constaint nachbilden
 
Kann ich hier nicht nachvollziehen. Was sind das denn für Darstellungsfehler?

greenmile 1. Jul 2014 23:42

AW: Mac: Form Constaint nachbilden
 
Der Darstellungsfehler kommt nur, wenn Du ShowFullScreenIcon aktiviert hast. Ohne funktioniert es.

Folgender Workaround funktioniert. Durch ShowFullScreenIcon := true; wird die Titelzeile neu gezeichnet. Anders habe ich es nicht hinbekommen.

Code:
public
  FMinFormWidth : Integer;
  FMinFormHeight: Integer;
  procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
Code:
procedure TForm.FormCreate(Sender: TObject);
begin
  FMinFormWidth := 400; // Oder irgendwas
  FMinFormHeight := 400; //
end;
Code:
procedure TForm.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
  var SizeChanged: Boolean;
begin
  SizeChanged := False;
  if (FMinFormWidth>0) and (AWidth<FMinFormWidth) then begin
    AWidth := FMinFormWidth;
    SizeChanged := true;
  end;
  if (FMinFormHeight>0) and (AHeight<FMinFormHeight) then begin
    AHeight := FMinFormHeight;
    SizeChanged := true;
  end;
  Self.FWinService.SetWindowRect(Self, RectF(ALeft, ATop, ALeft + AWidth, ATop + AHeight));
  inherited SetBounds(ALeft, ATop, AWidth, AHeight);

  if SizeChanged then begin
    Self.ShowFullScreenIcon := false;
    Self.ShowFullScreenIcon := true;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 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