Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cambiando Temas de la forma (https://www.clubdelphi.com/foros/showthread.php?t=90293)

xangiesaurx 13-05-2016 01:35:30

Cambiando Temas de la forma
 
Hola de nuevo a todos, esta vez vengo a preguntarles acerca del cambio de temas o skins en la forma, la cuestión es que tengo una forma principal en la que el usuario puede escoger de una lista un tema para aplicarle, pero lo que quiero hacer, es que al darle click a un botón una segunda forma se abre, pero esta no entra con el tema seleccionado.
Alguien sabe como puedo hacer eso?
Muchas gracias a todos por su atención y ayuda brindada :)

rocksoft 13-05-2016 01:43:10

Buenas xangiesaurx,

no se que tipo de motor de skins usas, pero independientemente de esto asumo que no le habras dicho a la Form2 que use el Skin que tiene la Form1 verdad?

En caso de ser un motor de skins automatico, puede que requiere un refresh o algo por el estilo

xangiesaurx 13-05-2016 02:18:03

Hola rocksoft, gracias por tu pronta respuesta, para el cambio de temas estoy usando TStyleManager (con Vcl.Themes y Vcl.Styles).
Perdón, me equivoque, le puse que era otro form, pero es un proyecto aparte y quiero que cuando se le mande llamar con la accion del boton, obtenga el mismo tema que la aplicación que lo llamó.

rocksoft 13-05-2016 03:00:29

Hola xangiesaurx,

por lo que entiendo, tienes dos aplicacciones independientes la una de la otra, verdad?

en este caso tendras que guardar el valor numerico o nombre del skin o en la regitry de windows o en un archivo ini.

asi cuando cambies el skin guardas el valor y cuando invoques la otra aplicaccion que lea el valor y listo :)

espero que sea lo que buscas

Ñuño Martínez 13-05-2016 11:38:12

Sólo comentar que la traducción correcta de form es formulario. Lo digo porque de primeras pensé que estabas utilizando algún paquete para dibujar figuras geométricas (shapes) que usaban algún sistema de estilos tipo CSS.

TOPX 13-05-2016 15:53:49

Sólo comentar que una forma también es un formulario (acepción número diecisiete).
-

rocksoft 13-05-2016 17:06:25

Hmm ahora creo que me raye y perdí el hilo...:)

Ñuño Martínez 13-05-2016 17:41:44

Cita:

Empezado por TOPX (Mensaje 505188)
Sólo comentar que una forma también es un formulario (acepción número diecisiete).
-

He de confesar que nunca profundizo tanto en los diccionarios. Por otro lado nunca escuché o leí tal uso salvo alguna vez en este mismo foro. Por eso pensé que se trataba del mismo caso que grilla.

De cualquier forma, hago mutis por el foro y ruego me disculpen.

xangiesaurx 16-05-2016 18:50:31

Gracias a todos por sus respuestas. :)
Si, así es rocksoft, son aplicaciones independientes, intentaré hacer como me comentas de guardarlo en un archivo ini y les comento como me va.

Y de nuevo, muchas gracias por su ayuda.

rocksoft 16-05-2016 19:19:48

Hola xangiesaurx,

no creo que tengas problemas, si requieres un ejemplo pon Delphi ini y te saldan a montones, eso si no te olvides de usar

Código Delphi [-]
uses
  ...
  , IniFiles

xangiesaurx 16-05-2016 19:30:34

rocksoft, gracias.
Ahorita ando trabajando con eso, haciendo unas pruebas a ver que tal va.
Si justamente tuve que agregar en los uses IniFiles :P

Cualquier cosa o duda, paso a dejarla por aquí :)
Gracias

xangiesaurx 17-05-2016 18:25:58

Hola a todos, vengo con malas noticias, trabajé con los archivos ini y me funciono perfectamente todo, pero en el trabajo al hacer la junta en la que vemos como avanzamos, me comentaron que no quieren que se creen archivos para manejar el cambio de temas, así que no se si se tienen alguna otra idea que me pueda ayudar?
Pensé que tal vez a través de los registros, pero acepto sugerencias que me ayuden a realizar este trabajo de manera más fácil.
Gracias

rocksoft 17-05-2016 19:52:39

Hola xangiesaurx,

lo que te queda es enviar al ejecutar el exe un parametro.

haber si te ayuda este link

otra opcion seria, que cada vez que cambies de estilo, le cambies el nombre al ejecutable, myApp_rojo, myApp_azul, al cargar el app lees el nombre y aplicas el estilo, o usando numeros. Pero tampoco es una buena solucion.

tambien podrias crear un soquet, lo que no tiene gran sentido para una cosa tan pequeña

o usas el componente TTelepatia_o_BolaDeCristal (esto es broma ehh)

xangiesaurx 17-05-2016 20:25:57

Hahahaha, muchas gracias rocksoft, intentaré con el parámetro, a ver que tal me va, igualmente cualquier cosa que pase, vendré a molestarlos de nuevo :P
Gracias una vez más por el apoyo :)

xangiesaurx 19-05-2016 19:05:07

Ok, creo que estoy haciendo algo mal o de plano ya me complique de más y llegue a un bloqueo mental :confused:

Básicamente tengo en mi aplicación A la siguiente línea de código en la parte donde ejecuto la aplicacion B

Código Delphi [-]
 SendMsgToReceiver('TMainMenu','Capturas');

Y en la aplicacón B (que es quien recibe el mensaje)

Código Delphi [-]
procedure TMainMenu.WMGetData(var Msg: TWMCopyData);
var
  Message: string;
begin
  Message:= Pchar(Msg.CopyDataStruct.lpData);
  if Message = 'Capturas' then
  AddStylesMenu;

Donde AddStylesMenu es donde aplico los Temas. Ahora, el problema es que para generar la ventana utilizo:

Código Delphi [-]
procedure TMainMenu.FormCreate(Sender: TObject);

Por lo que todo lo que hago dentro de WMGetData no se aplica por que no esta dentro del FormCreate, como puedo solucionar esto?

xangiesaurx 20-05-2016 20:14:37

Ok, parece que haciendo eso se me esta complicando mucho, así que que me comentaron que existe una forma de hacer eso a través de los registros, que el tema o skin se queda almacenado en el registro y simplemente tendría que leerlo para aplicárselo a mi aplicación, la cuestión es que nunca eh manejado registros desde mis aplicaciones, alguien podría darme una introducción acerca de esto?
Gracias :)

xangiesaurx 30-05-2016 20:52:29

Hola, vengo a dejarles la solución que aplique para este problema, por si a alguien más en un futuro le sirve.

Básicamente, lo que hace este código es buscar en donde se encuentran los temas/skins el registro del último skin aplicado a la aplicación, lo jala y lo aplica.

Código Delphi [-]
  StyleServices.OnThemeChange:=OnThemeChange;

  SearchDir := 'Direccion del folder' + PathDelim;
  if DirectoryExists(SearchDir) then begin
    if FindFirst(SearchDir+'*.*',
                faAnyFile - faDirectory,
                searchResults) = 0 then
   repeat
     try
       if TStyleManager.IsValidStyle(
            SearchDir+searchResults.Name) then
          TStyleManager.LoadFromFile(
             SearchDir+searchResults.Name);
     except
       OutputDebugString('Not valid style file');
     end;
   until FindNext(searchResults) <> 0;
  end else
    OutputDebugString('Theme`s folder does not exist');
 // Sort the styles using a StringList
 SLStyles := TStringList.Create;
 try
   SLStyles.Duplicates := TDuplicates.dupIgnore;
   for Style in TStyleManager.StyleNames do
     SLStyles.Add(Style);
   SLStyles.Sort;

   R:=TRegistry.Create;
   try
     if R.OpenKey(PrgKey,false) then
     begin
       try
         S:=R.ReadString('ThemeStyle');
         TStyleManager.TrySetStyle(S,false);
       except
       end;
     end;
   finally
      FreeAndNil(R);
   end;

 finally
   SLStyles.Free;
 end;

Ñuño Martínez 30-05-2016 21:58:39

Cita:

Empezado por xangiesaurx (Mensaje 505769)
Hola, vengo a dejarles la solución que aplique para este problema, por si a alguien más en un futuro le sirve.

Estupendo. :)^\||/

rocksoft 30-05-2016 23:07:19

Buenas xangiesaurx,

hipoteticamente que pasaria si tienes dos aplicaciones que usan skins? siempre que cambien en una aplicacion te cambia el skin en las dos no?

xangiesaurx 30-05-2016 23:52:12

Cita:

Empezado por rocksoft (Mensaje 505781)
Buenas xangiesaurx,

hipoteticamente que pasaria si tienes dos aplicaciones que usan skins? siempre que cambien en una aplicacion te cambia el skin en las dos no?

Así es, ya que el código busca cual fue la última skin que se uso y lo aplica a la aplicación que se va abriendo.


La franja horaria es GMT +2. Ahora son las 22:28:52.

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