Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   FireMonkey (https://www.clubdelphi.com/foros/forumdisplay.php?f=50)
-   -   mensajes personalizados en español en Firemonkey (https://www.clubdelphi.com/foros/showthread.php?t=95273)

juank1971 06-07-2021 22:38:55

mensajes personalizados en español en Firemonkey
 
Hola de nuevo a todos,
Tengo otra duda de Firemonkey, quisiera saber cómo están haciendo los diálogos personalizados, o sea quiero mostrar diálogos en español, de ser posible solamente un rectángulo, con dos tres botones o depende de la pregunta. O del mensaje del dialogo

Me gustaría hacerlo arriba de la forma y darle un tono más oscuro debajo. Para que se distinga mejor el rectángulo. Y la forma quede mas opaca, esto pudiera hacerlo con un rectángulo negro por debajo de ese rectángulo mensaje, ocupando toda la pantalla y dándole una opacidad supongo.

He pensado crearlo en tiempo de corrida, pero tengo mis dudas a lo mejor hay una forma más sencilla de hacerlo.

Antes me era mas fácil pues tenia un rectángulo creado para mensajes y lo puse invisible, pero tenia una sola forma con tabs ahora que he agregado mas formas ya me esta cansando un poco tener un rectángulo en cada una de las formas.

Como lo hacen ustedes como muestran mensajes con botones en español.

Neftali [Germán.Estévez] 07-07-2021 09:43:58

Lo que no entiendo es porqué no utilizas los diálogos estandard.
Aquí hablamos sobre el tema: https://www.clubdelphi.com/foros/sho...42&postcount=2

Por otro lado, con una imagen sería más sencillo entender lo que necesitas, en cuanto a diseño.

juank1971 07-07-2021 14:01:54

algo asi
muy parecido a eso pero el rectangulo de mensaje con bordes redondeados
de color gris claro y los botones o labels o lo que sea pero en Español.

juank1971 07-07-2021 15:49:30

ya lo logre hacer , explico como


Tengo dos formas una TFMain y la segunda donde tengo el rectangulo como quiero mostrar los mensajes TMmensajes.



En la FormMain tengo un LayoutMain que ocupa toda la forma alClient y contiene todo los componentes de la forma , con el siguiente procedimiento llamo de forma modal a la segunda forma. con un create en TMmensajes un poco diferente .


Código Delphi [-]
procedure TFMain.SpeedButton8Click(Sender: TObject);
var
  dlg: TMmensajes;
begin
   dlg := TMmensajes.Create(LayoutMain, nil,'ERROR', 'El Identificador de documento no es correcto','SI','ACEPTAR',false);
   dlg.ShowModal(procedure(ModalResult: TModalResult)
    begin
      case ModalResult of
        mrOk: ShowMessage('mrOK');
        mrCancel: ShowMessage('MrCancel');
      end;
    end);
end;


Ahora en TMmensajes (segunda forma) puse un Timage alClient ocupando toda la forma y arriba de este puse un Rectangle que ocupa todo ese Timage , negro con opacidad 0.5 .


y arriba de todo esta el rectangulo con los label y botones para los dialogos.


este es el create de esa segunda forma



Código Delphi [-]
constructor TMmensajes.Create( Layout1: TLayout;AOwner: TComponent;Titulo,Texto,TextoCancelar,TextoOk: string; Cancelar: boolean);
var b: TBitmap;
begin
  inherited create(AOwner);

   b := Layout1.MakeScreenshot;//aqui se crea una imagen de la forma que llama
   Image1.Bitmap.Assign((b));
   b.DisposeOf;

  lTitulo.text := Titulo;
  LbTexto.text:=Texto;
  rCancelar.Visible :=  Cancelar;
  lCancelar.text:= TextoCancelar;
  lAceptar.text:= TextoOk;
end;


En este create de la segunda forma le paso como parametro las caracteristicas del dialogo a mostrar y el Layout que contiene todo los componentes desde donde se realizo la llamada, entonces se hace una foto de ese Layout y se pone en el Timage de fondo , como arriba tiene un rectangulo negro opaco da el efecto oscuro y debajo realmente no esta la verdadera forma sino una imagen de ella.


No subo codigo porque jamas he podido subir codigo ni imagenes al foro, no se donde alojar codigo para comportirlo aqui y que perdure por los anos.


si alguien necesita mas aclaracion me lo comenta


saludos

juank1971 08-07-2021 15:49:12

El problema que sigo viendo un poco feo es que tengo que poner esta función completa para hacer la llamada en cada unit no logro encapsularla en un solo procedimiento o función que me devuelva el ModalResult .


porque como ShowModal no devuelve nada no se como obtener ese resultado.



Código Delphi [-]
var
  dlg: TMmensajes;r:string;
begin
   dlg := TMmensajes.Create(LayoutMenu, nil,'¿ Salir ?', '¿ Seguro que quieres salir de la aplicación?','CANCELAR','SALIR',true);
   dlg.ShowModal(procedure(ModalResult: TModalResult)
    begin
      case ModalResult of
        mrOk:{$IF DEFINED(IOS) or DEFINED (ANDROID)}
              MainActivity.finish;
             {$ENDIF}
        mrCancel: lbMenu.ClearSelection;
      end;

    end ) ;

end;


La franja horaria es GMT +2. Ahora son las 00:06:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi