Esta vídeo aula tem como objetivo ensinar como criar um projeto FireMonkey iOS utilizando uma conexão DataSnap com Oracle.
Eu não mostrei no vídeo, mas segue a forma de fazer com que o teclado virtual do iPhone não sobrescreva os edits.
Primeiro, dentro do tabitem que tem os edits, insira o componente: TVertScrollBox, em seguinda, dentro deste componente, insira o TLayout e de nome de: MainLayout1. Segundo, declare no uses a biblioteca System.Math.
Agora na seção private declare as seguintes variáveis e os seguintes métodos:
private FKBBounds: TRectF; FNeedOffset: Boolean; procedure CalcContentBoundsProc(Sender: TObject; var ContentBounds: TRectF); procedure RestorePosition; procedure UpdateKBBounds;
Precione Ctrl + C para que o Delphi crie os métodos.
No procedimento CalcContentBoundsProc insira o seguinte código:
procedure TfrmPrincipal.CalcContentBoundsProc(Sender: TObject; var ContentBounds: TRectF); begin if FNeedOffset and (FKBBounds.Top > 0) then begin ContentBounds.Bottom := Max(ContentBounds.Bottom, 2 * ClientHeight - FKBBounds.Top); end; end;
No procedimento RestorePosition insira o seguinte código:
procedure TfrmPrincipal.RestorePosition; begin VertScrollBox1.ViewportPosition := PointF(VertScrollBox1.ViewportPosition.X, 0); MainLayout1.Align := TAlignLayout.alClient; VertScrollBox1.RealignContent; end;
No procedimento UpdateKBBounds insira o seguinte código:
procedure TfrmPrincipal.UpdateKBBounds; var LFocused : TControl; LFocusRect: TRectF; begin FNeedOffset := False; if Assigned(Focused) then begin LFocused := TControl(Focused.GetObject); LFocusRect := LFocused.AbsoluteRect; LFocusRect.Offset(VertScrollBox1.ViewportPosition); if (LFocusRect.IntersectsWith(TRectF.Create(FKBBounds))) and (LFocusRect.Bottom > FKBBounds.Top) then begin FNeedOffset := True; MainLayout1.Align := TAlignLayout.alHorizontal; VertScrollBox1.RealignContent; Application.ProcessMessages; VertScrollBox1.ViewportPosition := PointF(VertScrollBox1.ViewportPosition.X, LFocusRect.Bottom - FKBBounds.Top); end; end; if not FNeedOffset then RestorePosition; end;
No envento OnCreate do form insira o seguinte código:
procedure TfrmPrincipal.FormCreate(Sender: TObject); begin VertScrollBox1.OnCalcContentBounds := CalcContentBoundsProc; end;
No evento OnFocusChanged insira o seguinte código:
procedure TfrmPrincipal.FormFocusChanged(Sender: TObject); begin UpdateKBBounds; end;
No evento OnVirtualKeyboardHidden insira o seguinte código:
procedure TfrmPrincipal.FormVirtualKeyboardHidden(Sender: TObject; KeyboardVisible: Boolean; const Bounds: TRect); begin FKBBounds.Create(0, 0, 0, 0); FNeedOffset := False; RestorePosition; end;
E por fim, no evento OnVirtualKeyboardShown insira o seguinte código:
procedure TfrmPrincipal.FormVirtualKeyboardShown(Sender: TObject; KeyboardVisible: Boolean; const Bounds: TRect); begin FKBBounds := TRectF.Create(Bounds); FKBBounds.TopLeft := ScreenToClient(FKBBounds.TopLeft); FKBBounds.BottomRight := ScreenToClient(FKBBounds.BottomRight); UpdateKBBounds; end;
E é isso aí pessoal, boa sorte, qualquer dúvida ou sugestão basta comentar... Abraços.
Voce tem os fontes?
ResponderExcluirPor sorte ainda tenho, eu geralmente apago rsrs...
ExcluirSe quiser me mande seu email que eu mando uma cópia zipada pra vc. Abraços.
Olá vc pode enviar os fontes para esse e-mail: weslley-live@hotmail.com
ResponderExcluirDesculpa, não tenho mais os fontes dessa vídeo aula, eu apaguei assim que fiz o vídeo... Tenho os fontes do delphi XE5, pode acessar aqui a baixar...
ExcluirAbraços.
Primeiro projetinho com sqlite interno e o sincronismo vai para um banco firebird com datasnap,funciona legal.
ResponderExcluirhttp://www.youtube.com/watch?v=cED9ZvUKOps
Pode por favor me mandar os fontes para - gustavoinfomax@yahoo.com.br Obrigado
ResponderExcluirDesculpa, não tenho mais os fontes dessa vídeo aula, eu apaguei assim que fiz o vídeo... Tenho os fontes do delphi XE5, pode acessar aqui a baixar...
ExcluirAbraços.
Boa tarde, primeiramente parabéns pelo blog!
ResponderExcluirSeguindo seu exemplo, me deparei com a seguinte msg de erro:
"[dcc32 Error] ULogin.pas(157): E2010 Incompatible types: 'TPoint' and 'TPointF'"
Código que coloquei no FormVirtualKeyboardShown
Oq seria esse erro? Utilizo Delphi 10 Seatle.
Obrigado desde já.
Podes me enviar o fonte: rafaeljeremias@gmail.com
ResponderExcluir