AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Mac: Form Constaint nachbilden

Ein Thema von greenmile · begonnen am 1. Jul 2014 · letzter Beitrag vom 1. Jul 2014
Antwort Antwort
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#1

Mac: Form Constaint nachbilden

  Alt 1. Jul 2014, 20:25
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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.993 Beiträge
 
Delphi 12 Athens
 
#2

AW: Mac: Form Constaint nachbilden

  Alt 1. Jul 2014, 23:23
Kann ich hier nicht nachvollziehen. Was sind das denn für Darstellungsfehler?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Mac: Form Constaint nachbilden

  Alt 1. Jul 2014, 23:42
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;

Geändert von greenmile ( 2. Jul 2014 um 09:16 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:40 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