Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   iOS ScrollableFormDemo in funktionierend? (https://www.delphipraxis.net/176036-scrollableformdemo-funktionierend.html)

Mavarik 7. Aug 2013 23:58

ScrollableFormDemo in funktionierend?
 
Hallo Zusammen!

Hat jemand schon das "ScrollableFrom"-Demo aus /Samples/FiremonkeyMobile
so korrigiert, dass es auch funktioniert?

Ich meine auch in Querformat Links/Rechts und umgedreht?

Mavarik

eddie11 9. Aug 2013 10:08

AW: ScrollableFormDemo in funktionierend?
 
Das Beispiel ist relativ kompliziert umgesetzt und funktionert ja nur hochkant.
Ich habe das für meine Bedürfnisse angepasst. Ich bin dabei davon ausgegangen, dass das Keyboard immer von unten eingeblendet wird.

Hier mein Quellcode:

Code:
constructor TEForm.Create(AOwner: TComponent);
begin
  OnVirtualKeyboardShown := FormVirtualKeyboardShown;
  OnVirtualKeyboardHidden := FormVirtualKeyboardHidden;
  OnFocusChanged := FormFocusChanged;
  MainVertScrollBox.OnCalcContentBounds := CalcContentBoundsProc;
end;

procedure TEForm.CalcContentBoundsProc(Sender: TObject;
                                       var ContentBounds: TRectF);
begin
  if KeyBoardVerdecktFeld and (KeyBoardPositionY > 0) then
    ContentBounds.Bottom := Max(ContentBounds.Bottom,
                                2 * ClientHeight - KeyBoardPositionY);
end;


procedure TEForm.FormVirtualKeyboardHidden(Sender: TObject;
  KeyboardVisible: Boolean; const Bounds: TRect);
begin
  KeyBoardPositionY:=0;
  KeyBoardVerdecktFeld := False;
  KeyBoardRestorePosition;
end;


procedure TEForm.FormVirtualKeyboardShown(Sender: TObject;
  KeyboardVisible: Boolean; const Bounds: TRect);
begin
  KeyBoardPositionY := Self.ClientHeight - Bounds.Height;
  KeyBoardErmittlePosition;
end;

procedure TEForm.KeyBoardRestorePosition();
begin
  MainVertScrollBox.ViewportPosition := PointF(MainVertScrollBox.ViewportPosition.X, 0);
  MainLayout.Align := TAlignLayout.alClient;
  MainVertScrollBox.RealignContent;
  KeyBoardPositionY := 0;
end;

procedure TEForm.KeyBoardErmittlePosition;
var
  LFocused : TControl;
  LFocusRect: TRectF;
begin
  KeyBoardVerdecktFeld := False;
  if Assigned(Focused) then
  begin
    LFocused := TControl(Focused.GetObject);
    LFocusRect := LFocused.AbsoluteRect;
    LFocusRect.Offset(MainVertScrollBox.ViewportPosition);
    if (KeyBoardPositionY<>0) and (LFocusRect.Bottom>KeyBoardPositionY) then begin;
      KeyBoardVerdecktFeld := True;
      MainLayout.Align := TAlignLayout.alHorizontal;
      MainVertScrollBox.RealignContent;
      Application.ProcessMessages;
      MainVertScrollBox.ViewportPosition :=
        PointF(MainVertScrollBox.ViewportPosition.X,
               LFocusRect.Bottom - KeyBoardPositionY);
    end;
  end;
  if not KeyBoardVerdecktFeld then
    KeyBoardRestorePosition;
end;
Das funzt bei mir in allen Ausrichtungen.

Grüner 25. Feb 2014 23:31

AW: ScrollableFormDemo in funktionierend?
 
Die von eddie1 gezeigte Lösung funktioniert recht gut. Aber was macht man, wenn man keine Textbox sondern eine Combobox verschieben muß?


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