Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Aplicacion con estilo clasico (https://www.clubdelphi.com/foros/showthread.php?t=61597)

Alliance 13-11-2008 18:22:18

Aplicacion con estilo clasico
 
Hola, tengo una duda y es que no es si es posible, y es que me gustaria saber si es posible hacer una aplicacion con estilo clasico, es decir, forsar a la aplicacion que se ejecute con estilo clasico, sin importar el theme que se este usando, por ejemplo, aveis visto el dev-pascal, este se ejecuta con estilo clasico, sin importar el tema que se este usando.

es posible hacer algo asi, como se hace eso, creando algun archivo manifest personalizado ??

pido sujerencias y comentario que me ayuder hacerlo posible, no pido sulucion directa, si alguien sabe como hacerlo, estere muy agradecido.

siento tener que preguntar mucho por aqui, no puedo evitarlo :o

cHackAll 13-11-2008 20:22:14

Hola

enecumene 13-11-2008 21:08:09

Cita:

Empezado por cHackAll (Mensaje 325888)

Hombre de pocas palabras pero certero ;)

Alliance 13-11-2008 22:27:41

Cita:

Empezado por cHackAll (Mensaje 325888)

Gracias hermano por tu respuesta, pero yo no quiero que el s.o cambie su aspecto, si no el pograma, es decir, currer mi programa con el estilo clasico de windows, mientras yo sigo usando el theme xp azul de sistema operativo, etc..

no se si me entienden todavia :D:o

:confused:

enecumene 13-11-2008 23:01:18

Prueba con: click derecho en el ejecutable->Properties->tab Compatibility y ahi fijas como quieres que corra, estilo win95,2000,me,xp o por colores, no sé si eso es lo que buscas :confused::confused:

Alliance 13-11-2008 23:35:44

Cita:

Empezado por enecumene (Mensaje 325941)
Prueba con: click derecho en el ejecutable->Properties->tab Compatibility y ahi fijas como quieres que corra, estilo win95,2000,me,xp o por colores, no sé si eso es lo que buscas :confused::confused:

si precisamente eso, si seleccionamos la opcion de deshabiliar el tema visual para el programa, cuando lo ejecutamos se vera en modo clasico que es lo que queria, ahora biien, si copiamos el ejecutable, a otro sitio, esa configuracioin se pierde, por lo tanto quisiera saber como hacerlo mediente codigo, para que el programa se ejecute en ese modo, sin imporar donde lo lleves, osea (portables, pero siempre con el tema visual clasico), a eso me referia cuando decia forsar la aplicacion a usar el tema clasico de windows, etc..

como se puede hacer eso mediente codigo, alguna sujerencia. :confused:

Ñuño Martínez 14-11-2008 11:00:07

Que yo sepa, para que una aplicación Windows pueda utilizar los estilos XP hay que incrustarle un archivo XML. Simplemente con no incrustarle dicho archivo, el programa se mostrará con el estilo normal. Creo que se puede editar en las opciones de compilación.

Otra forma sería utilizar un compilador más antiguo que el propio Windows XP. ;)

cHackAll 14-11-2008 19:30:40

Código Delphi [-]
function SetWindowTheme(hWnd: Cardinal; Optional, pszSubAppName: PChar): Cardinal; stdcall external 'uxtheme';
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 SetWindowTheme(Handle, ' ', ' ');
end;

Cita:

Empezado por Alliance (Mensaje 325935)
...no se si me entienden todavia :D:o...

no, no entiendo!

roman 14-11-2008 19:43:45

Cita:

Empezado por Ñuño Martínez (Mensaje 326011)
Simplemente con no incrustarle dicho archivo, el programa se mostrará con el estilo normal.

Yo pensaba lo mismo, pero aunque es cierto que los controles se ven al estilo clásico, el marco de la ventana sigue viéndose según el tema escogido en el sistema.

Lo que pone el compañero cHackAll, usando SetWindowTheme, realmente pone incluso el borde al estilo clásico. Aunque, no sé porqué, a mi no me fucionó poniendo

Código Delphi [-]
SetWindowTheme(Handle, nil, nil);

sino

Código Delphi [-]
SetWindowTheme(Handle, '', '');

De todas formas, hasta donde probé ayer, si aplicamos SetWindowTheme a la ventana, el cambio no aplica a todos los controles, hay que aplicar recursivamente la función. Pero, ahí me atoré, no logro que el cambio se vea sino hasta que oculto la ventana y vuelvo a mostrarla. Probé con Update, Refresh, Invalidate y todos los análogos pero nada. Funciona con los TButton, pero otros controles como TEdit sólo hasta que se redibuja la ventana.

Ojalá cHackAll nos de alguna luz sobre esto.

// Saludos

cHackAll 14-11-2008 20:21:35

Cita:

Empezado por roman (Mensaje 326190)
...Aunque, no sé porqué, a mi no me fucionó poniendo

Código Delphi [-]
SetWindowTheme(Handle, nil, nil);

sino

Código Delphi [-]
SetWindowTheme(Handle, '', '');

...

Claro;

Cita:

Empezado por cHackAll (Mensaje 278955)
...lo que significa que al presionar el Button1, el S.O. quedará como el Win2k...

Código Delphi [-]
//... 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  SetWindowTheme(Button1.Handle, ' ', ' ');
end;

...

Cita:

Empezado por roman (Mensaje 326190)
...De todas formas, hasta donde probé ayer, si aplicamos SetWindowTheme a la ventana, el cambio no aplica a todos los controles, hay que aplicar recursivamente la función...

Mi no entender!

Caso 1; quieren una aplicacion con barra de titulo XP y el resto clásico? pues no hagan nada :D

Caso 2; quieren una aplicacion con 100% estilo clásico? simplemente NO incluyan el manifest y como es de suponerse;

Código Delphi [-]
function SetWindowTheme(hWnd: Cardinal; Optional, pszSubAppName: PChar): Cardinal; stdcall external 'uxtheme';
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 SetWindowTheme(Handle, '', '');
end;

Caso 3; quieren una aplicacion con 100% estilo clásico (y aparte quemarse las pestañas)? usen SetWindowTheme recursivamente... para sufrir más podemos extender el hilo con un buen numero de formas para hacerlo :D

Caso 4; quieren intercambiar estilos? API EnableTheming, tambien les puede servir para Caso 2.

etc... etc.

Cita:

Empezado por roman (Mensaje 326190)
...Ojalá cHackAll nos de alguna luz sobre esto...

Quien definitivamente necesita una luz sobre "ésto" soy yo! :o

roman 14-11-2008 20:32:27

Bueno, yo en realidad no quiero nada. Sólo estaba tratando de responderle al compañero.

Tu caso 2 es más que suficiente si quiere el estilo clásico desde el principio, pero si quiere convertir -en ejecución- de XP a clásico, pues habrá que quemarse las pestañas :)

// Saludos

cHackAll 14-11-2008 21:07:26

Cita:

Empezado por roman (Mensaje 326214)
Bueno, yo en realidad no quiero nada. Sólo estaba tratando de responderle al compañero.

jejeje, reconozco perfectamente tu "posición" en este caso amigo roman, disculpa si no di el mensaje adecuado :o

Con respecto al Caso 3 (Cruft);

Código Delphi [-]
procedure EnumControls(Control: TControl);
var Index: Integer;
begin
 with TWinControl(Control) do
  begin
   for Index := 0 to ControlCount - 1 do
    EnumControls(Controls[Index]);
   SetWindowTheme(Handle, '', '');
   if Visible then
    begin
     ShowWindow(Handle, SW_HIDE);
     ShowWindow(Handle, SW_SHOW);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 EnumControls(Self);
end;

Saludos

Kipow 01-12-2008 15:40:22

Yo tenia ese problema y exceptuando los (bitbtn) todo funciono a la perfeccion, solamente le desmarque el check que tiene en Opciones del proyecto / Application / Enable Runtime Themes y listo.


La franja horaria es GMT +2. Ahora son las 16:07:40.

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