Ver Mensaje Individual
  #2  
Antiguo 21-02-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Desconozco totalmente el framework que comentas, aun asi te comparto mi opinion.

Uno de los paradigmas mas populares es tener el MainForm como comentas y ponerle un TTabControl. Aca un pequeño tutorial


A mi particularmente me gusta ocultar las pestañas, seteando la propiedad TabPosition al valor TTabPosition.None

De este modo la unica forma de navegar es hacerlo programaticamente (es decir, cambiando la propiedad ActiveTab o bien por el indice, usando TabIndex). Nuevamente mi estilo preferido de hacerlo es usando el metodo SetActiveTabWithTransition ya que de este modo se realiza la tipica animacion deslizante y queda mucho mas elegante. Tambien es posible usar descendientes especializados de TAcion, tales como TNextTabAction y TPreviousTabAction

Ejemplo aca

Luego lo que suelo hacer es crear un menu (inspirado en los de las aplicaciones de Google), para esto utilizo TMultiView. Acá hay un ejemplo y si revisas en los ejemplos que vienen con Delphi todavia hay mas. Tipicamente dentro del TMultiView metes botones o un listbox o algo que implemente un menu. Luego conectas cada menu con el TAction que muestra el Frame que corresponda o bien escribes eventos estilo OnClick

Luego lo que sigue es tanto meter TFrames como comentas o si quieres TForms dentro de las pestañas. En Firemonkey tenes gran flexibilidad a la hora de crear controles compuestos, porque cualquier control puede ser contenedor de otros controles. Esto hace posible que puedas meter un Frame entero dentro de un TTabItem. Para hacerlo basta con tener un procedimiento asi, en donde en realidad se puede escribir de esta manera para que sea mas flexible:

Código Delphi [-]
procedure EmbedControl(const Target: TControl; const Parent: TFmxObject);
begin
  while Target.ControlsCount > 0 do
    Target.Children[0].Parent := Parent;
end;

Luego para crear los Form/Frame bajo demanda basta con utilizar propiedades dentro de tu Form principal, de este estilo:

Código Delphi [-]
function GetFrameXXX: TFrameXXX;
begin
  if not Assigned(FFrameXXX) then
  begin
    FFrameXXX := TFrameXXX.Create(Self);
    // incrustar en pestaña correspondiente
    EmbedControl(FFrameXXX, TabControl1.Tabs[Indice]);
  end;

  Result := FFrameXXX;
end;

Si lo que queres es ahorrar memoria al maximo, quiza lo ideal sea realizar la creacion del Frame cuando realizas el cambio de pestaña (es decir, cuando hacen click en el menu, creas el Frame, lo incrustas en la nueva pestaña y luego cambias la pestaña activa) y no mantener variables de instancia

Con respecto al acceso a datos y CRUD, no hay diferencias en cuanto a la programacion multicapas con la VCL. Sigues accediendo al servidor DataSnap a traves de la clase proxy que generan los asistentes (TServerMethodsClient). Lo que quiza si cambia un poco es la presentacion, aunque cosas como LiveBindings (a mi no me gustan mucho) te pueden ahorrar tiempo y hacer la curva de aprendizaje mas amigable
Responder Con Cita