Ver Mensaje Individual
  #5  
Antiguo 05-10-2011
Pedro-Juan Pedro-Juan is offline
Miembro
 
Registrado: ago 2006
Ubicación: Barcelona - España
Posts: 315
Reputación: 18
Pedro-Juan Va por buen camino
Cita:
Empezado por danielmj Ver Mensaje
A ver con lo que tu me dices, ya contare a ver que tal va. Ya esta toda la aplicacion acabada y hace lo que tiene que hacer, y me da rabia que se vea tan fea en la maquina del cliente. un saludo y gracias.
Hola danielmj.

AlphaContros proporciona una manera fácil y rápida de manejar los skins. Te indico:

Código Delphi [-]
// Yo tenía esto en el uses del formulario principal, pero parece que no es necesario
uses sSkinManager;

//Un TsSpeedButton
procedure TF_Main.sSB_ChangeSkinClick(Sender: TObject);
var cPathSkins: String;
begin
cPathSkins := ExtractFilePath(Application.ExeName) + '\Skins\';
  if (DirectoryExists(cPathSkins)) and not (DirectoryIsEmpty(cPathSkins)) then
      SelectSkin(DMMain.TsSkinManager1); //DataModule donde está el componente TsSkinManager1
  else

  // Si el usuario ha borrado el directorio donde están los skins y después pulsa el button 
  // se activa el skin Topaz, que está en TsSkinManager1.InternalSkins (es el único interno)
      sShowMessage('Archivo no encontrado','No se han encontrado los ficheros de skins.' + #13 + 'El skin "Topaz" es el activo por defecto');
      DMMain.TsSkinManager1.SkinName := 'Topaz (Internal)';
  end;

  //Guardo el skin en el campo de una table (T_SETTINGS)
  with DMMain.T_SETTINGS do begin
       Edit;
       DMMain.T_SETTINGS.FieldByName('SkinName').AsString := DMMain.TsSkinManager1.SkinName;
       Post;
  end;


//Label al lado del TsSpeedButton
F_Main.sLabel_SkinActive.Caption := 'Skin: ' + DMMain.TsSkinManager1.SkinName;
end;


function DirectoryIsEmpty(Directory: string): Boolean;
var sr: TSearchRec;
    i: Integer;
begin
Result := False;
FindFirst(Directory + '*', faAnyFile, sr);
  for i := 1 to 2 do
    if ((sr.Name = '.') or (sr.Name = '..')) then
      Result := (FindNext(sr) <> 0);
SysUtils.FindClose(sr);
end;


//Para que se cargue el skin al inicio de la aplicación (yo lo tengo en el archivo de proyecto)
DMMain.TsSkinManager1.SkinName := Trim(DMMain.T_SETTINGS.FieldByName('SkinName').AsString);

Asegúrate de que la propiedad TsSkinManager1.Active está a true.

Espero que con esto te haga más fácil lo que te propones. A mí me funciona muy bien.

Un saludo.
__________________
Este mundo es el camino para el otro, que es morada sin cesar. Mas cumple tener buen tino para andar esta jornada sin errar. (J. Manrique)
Responder Con Cita