Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-08-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 22
cHackAll Va por buen camino
Quise responderte con anterioridad pero el post se me borro
Lo que intentaba darte era un código parecido al siguiente:

Código Delphi [-]
procedure DefineIcon(Path, IconFile: string; IconIndex: Integer = 0);
var Desktop: Text;
begin
 Path := Path + '\Desktop.ini';
 AssignFile(Desktop, Path);
 ReWrite(Desktop);
 WriteLn(Desktop, '[.ShellClassInfo]');
 WriteLn(Desktop, 'IconFile=' + IconFile);
 WriteLn(Desktop, 'IconIndex=' + IntToStr(IconIndex));
 CloseFile(Desktop);
end;
 
procedure Form1.Button1Click(Sender: TObject);
begin
// DefineIcon('c:\Nueva carpeta', 'Icono.ico'); // El archivo Icono.ico está en la misma carpeta
// DefineIcon('c:\Nueva carpeta', '%SystemRoot%\system32\shell32.dll', 27); // El icono lo tomamos de una .DLL
 DefineIcon('c:\Nueva carpeta', 'c:\Archivos de programa\Delphi7SE\Projects\Project1.exe'); // El icono lo tomamos de nuestra aplicación
end;

Lo pruebas de las tres formas, y si hay algún errorcillo de sintaxis te pido disculpas pero no tenía un IDE cerca

Por lo que veía paldave te dio un ejemplo que hace lo mismo, y en ambos casos debería funcionar...

PD: No va por ahí el problema, IconIndex=0 es lo correcto
Saludos
Responder Con Cita
  #2  
Antiguo 24-08-2007
Avatar de Max_E.
Max_E. Max_E. is offline
Miembro
 
Registrado: sep 2006
Posts: 90
Poder: 20
Max_E. Va por buen camino
al parecer aun hay un poblema no llega a compilar la varible desktop no puede ser definida como text, la cambie a string y el error paso a la linea con el siguiente desktop

podrias darle una mirada, no entiendo como manipular al archivo o variable desktop dentro de la procedure




Código Delphi [-] Unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IniFiles, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
Procedure DefineIcon(Path, IconFile: string; IconIndex: Integer = 0);
end;
var
Form1: TForm1;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
DefineIcon('E:\Administrador\Mis documentos', 'E:\Administrador\Mis documentos\Nueva carpeta\Project1.exe');
End;
procedure Tform1.DefineIcon(Path, IconFile: string; IconIndex: Integer = 0);
var
Desktop: text;// aqui se detiene.
begin
Path := Path + '\Desktop.ini';
AssignFile(Desktop, Path);
ReWrite(Desktop);
WriteLn(Desktop, '[.ShellClassInfo]');
WriteLn(Desktop, 'IconFile=' + IconFile);
WriteLn(Desktop, 'IconIndex=' + IntToStr(IconIndex));
CloseFile(Desktop);
end;
end.




Ojala no se llege a complicar , gracias y saludos cHackAll .....
Responder Con Cita
  #3  
Antiguo 24-08-2007
Avatar de paldave
paldave paldave is offline
Miembro
 
Registrado: ago 2007
Ubicación: Uruguay
Posts: 148
Poder: 19
paldave Va por buen camino
Evidentemente hay un error en la definición de la variable Desktop.
Devería definirse como File:

Código Delphi [-]
procedure DefineIcon(Path, IconFile: string; IconIndex: Integer = 0);
var Desktop: File;
begin...
Responder Con Cita
  #4  
Antiguo 24-08-2007
Avatar de paldave
paldave paldave is offline
Miembro
 
Registrado: ago 2007
Ubicación: Uruguay
Posts: 148
Poder: 19
paldave Va por buen camino
O como TextFile mejor

Código Delphi [-]
procedure DefineIcon(Path, IconFile: string; IconIndex: Integer = 0);
var Desktop: TextFile;
begin...

Perdón por el error en la respuesta anterior.
Responder Con Cita
  #5  
Antiguo 25-08-2007
Avatar de Max_E.
Max_E. Max_E. is offline
Miembro
 
Registrado: sep 2006
Posts: 90
Poder: 20
Max_E. Va por buen camino
hola denuevo je je

bueno paldave dio en el clavo ya compila pero, no cambia el icono aun lo extraño es que si crea el archivo desktop.ini dentro de la carpeta y con el texto:

[.ShellClassInfo]
IconFile=E:\Administrador\Mis documentos\Nueva carpeta\casco
IconIndex=0

la carpeta que quiero cambiar esta en E:\Administrador\Mis documentos se llama nueva carpeta y dentro esta el icono pero nada, creo que el problema ya no esta en la aplicacion sino en el archivo creado o me equivoco????
ayudenme por favor ya solo falta un pequeño paso.
Responder Con Cita
  #6  
Antiguo 26-08-2007
Avatar de paldave
paldave paldave is offline
Miembro
 
Registrado: ago 2007
Ubicación: Uruguay
Posts: 148
Poder: 19
paldave Va por buen camino
Mencionas que el archivo queda como

Código:
 [.ShellClassInfo]
IconFile=E:\Administrador\Mis documentos\Nueva carpeta\casco
IconIndex=0
pero debería ser

Código:
 [.ShellClassInfo]
IconFile=E:\Administrador\Mis documentos\Nueva carpeta\casco.ico
IconIndex=0
Al parecer hay un error en la extensión del archivo de ícono que deseas usar.

Como te dije antes el ícono no cambiará hasta que reinicies la máquina o refresques la caché de íconos de windows. Si no lo haces, es como que una vez que tuvieras cambiado el ícono de la carpeta y funcionando bien, editaras el archivo Desktop.ini con el block de notas, le cambiaras el ícono y lo volvieras a guardar. Evidentemente editarlo y cambiarlo con el block de notas no cambiará el ícono de la carpeta, ya que windows no lee el archivo desktop.ini de la carpeta cada vez que la muestra, sino que lo hace solo la primera vez que accedes a él y luego lo coloca en una caché para recuperarlo rápidamente cada vez que se muestre dicha carpeta, y dicha caché se mantiene hasta que reinicies Windows o lo fuerces a refrescarse, o lo vacíes.

Para refrescar la caché de íconos se necesita de un procedimiento algo complicado, pero casualmente tengo el código que necesitas a mano:

Código Delphi [-]
uses ...,ShlObj, ComObj, Registry;
procedure RebuildIconCache;
...

implementation
const
  sr_WindowMetrics='Control Panel\Desktop\WindowMetrics';
  sr_ShellIconSize='Shell Icon Size';
...

procedure RebuildIconCache;
var
 news,olds:string;
 sz:integer;
 reg:TRegistry;

 Function UpdateAllWindowsCallback(WHandle : HWnd;
  Var Parm : Pointer) :
  Boolean; stdcall;
  begin
   SendMessage(WHandle,WM_SETTINGCHANGE,0,0);
   Result:=True;
  end;

  Procedure UpdateAllWindows;
  Begin
    EnumWindows(@UpdateAllWindowsCallback,
    WM_SETTINGCHANGE);
  End;


  function GetIconCacheFile:string;
  begin
   Result:=GetWindowsDir+'ShellIconCache';
  end;

  procedure DeleteIconCache;
  var
   sfile:string;
  begin
    sfile:=GetIconCacheFile;
    if fileexists(sfile) then
    begin
      if deletefile(sfile)=false
      then showmessage('Can not erase file: '+sfile);
    end;
  end;


  function RefreshActiveDesktop:boolean;
  const
    CLSID_ActiveDesktop: TGUID
     = '{75048700-EF1F-11D0-9888-006097DEACF9}';
  var
    ActiveDesktop: IActiveDesktop;
  begin
    try
      ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
      ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
      Result:=true;
    except
      Result:=false;
    end;
  end;

  procedure RefreshDesktop;
  var
   wnd:THandle;
   fl:boolean;
  begin
    fl:=RefreshActiveDesktop;
    if fl=false then
    begin
      wnd:=FindWindow('Progman', 'Program Manager');
      if wnd<>0 then SendMessage(wnd,WM_COMMAND,$A065,0)
    else
      UpdateAllWindows;
    end;
end;

begin
 reg:=TRegistry.Create;
 try
   deletefile(GetIconCacheFile);
   reg.RootKey :=HKEY_CURRENT_USER;
   reg.OpenKey(sr_WindowMetrics,false);
   olds:=reg.ReadString(sr_ShellIconSize);
   sz:=strtointdef(olds,32);
   inc(sz);
   news:=inttostr(sz);
   Reg.WriteString(sr_ShellIconSize,news);
   UpdateAllWindows;
   if olds='' then olds:='32';
   Reg.WriteString(sr_ShellIconSize,olds);
   Reg.CloseKey;
   Reg.Free;
   UpdateAllWindows;
   RefreshDeskTop;
 finally
 end;
end;


Te aconsejo que uses la forma que yo te indiqué antes para acceder y/o crear el archivo Desktop.ini, ya que si usas la de cHackAll verás que si el archivo ya fué creado mediante "Personalizar Carpeta" por Windows y tiene los atributos de Oculto te dará un error al intentar acceder al mismo

Deberás poner tu procedimiento así:

Código Delphi [-]
uses ..., inifiles;

procedure TForm1.Button1Click(Sender: TObject);
var archivo:TIniFile;
begin
  archivo:=TIniFile.Create('C:\Carpeta a Personalizar\Desktop.ini');
  archivo.WriteString('.ShellClassInfo','IconFile','E:\Administrador\Mis documentos\Nueva carpeta\Casco.ico');
  archivo.WriteInteger('.ShellClassInfo','IconIndex',0);
  archivo.Free;

  RebuildIconCache;
end;

Espero que ahora sí puedas solucionar tu problema con los íconos. Ya lo he probado y funciona de maravillas.

Última edición por paldave fecha: 26-08-2007 a las 16:35:51. Razón: error
Responder Con Cita
  #7  
Antiguo 01-09-2007
Avatar de Max_E.
Max_E. Max_E. is offline
Miembro
 
Registrado: sep 2006
Posts: 90
Poder: 20
Max_E. Va por buen camino
hola a todos
disculpen por no haberme comunicado en buen tiempo, esque tuve una semana muy mala,.... pero bueno¡¡¡¡ volviendo al tema

paldave los codigos que me das no me compilan en

Código Delphi [-]
Result:=GetWindowsDir+'ShellIconCache';
no tengo ni la mas minima idea de que pueda ser......

y sobre el texto en el archivo .ini creado, no hay problema alli, fue error mio al digitar la pregunta si hace la extencion casco.ini , y apesar de aver reiniciado ma maquina no cambia nada ,


esperando alguna ayuda o sugerencia me despido, chau...
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Capturar ruta de acceso a la carpeta mis documentos y a la carpeta activa. Pepe Torres API de Windows 1 23-02-2007 23:02:21
Iconos! bustio Varios 10 04-09-2005 03:40:06
Iconos .bmp CarmaZone Varios 2 11-03-2005 00:46:41
Iconos Sirkius Varios 8 11-06-2004 20:34:31
iconos aladelta Gráficos 1 09-09-2003 15:27:03


La franja horaria es GMT +2. Ahora son las 07:04:09.


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