Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-04-2008
Avatar de lag_0
lag_0 lag_0 is offline
Miembro
 
Registrado: jul 2006
Posts: 131
Poder: 18
lag_0 Va por buen camino
Mi idea para eso:
-añade un timagelist....
-Cuando exploren un directorio haces una búsqueda de todos los JPG y bmp y demás cargando cada imagen en el objeto que has creado antes... asegurate de hacerlo por orden alfabetica y de vaciar el timagelist antes de cargar...
-Cargas el listview con los ficheros del directorio ordenas por orden alfabetica el listview.
-Te aseguras de que el imagelist esté asociado al listview...
-pones el image index el indice de cada elemento y como son alfabeticos encajarán... Si quieres que la propiedad con la que se vea no sea icons solo tendrás que pintar la imagen asociada al elemento por imageindex al tamaño que tu quieras y como quieras... no es muy dificil prueba primero cambiar el font, color de texto etc del elemento y verás como sabiendo hacer eso llegas a cualquier sitio.
y listo.
Responder Con Cita
  #2  
Antiguo 18-04-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por lag_0 Ver Mensaje
Mi idea para eso:
-añade un timagelist....
-Cuando exploren un directorio haces una búsqueda de todos los JPG y bmp y demás cargando cada imagen en el objeto que has creado antes... asegurate de hacerlo por orden alfabetica y de vaciar el timagelist antes de cargar...
-Cargas el listview con los ficheros del directorio ordenas por orden alfabetica el listview.
-Te aseguras de que el imagelist esté asociado al listview...
-pones el image index el indice de cada elemento y como son alfabeticos encajarán... Si quieres que la propiedad con la que se vea no sea icons solo tendrás que pintar la imagen asociada al elemento por imageindex al tamaño que tu quieras y como quieras... no es muy dificil prueba primero cambiar el font, color de texto etc del elemento y verás como sabiendo hacer eso llegas a cualquier sitio.
y listo.
buenísima explicación, me voy a poner a jugar con el Listview y ver que sale!!!.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #3  
Antiguo 29-07-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
La verdad es que no entiendo como pasarlo a modo virtual, ya que quiciera probarlo puesto a que quiero trabajaron con centenares de imagenes.

Con un Form, un Button, un ImageList, un ListView y un Image, les dejo mi codigo para visualizar como thumbnails las imagenes jpg contenidas en una carpeta.

Alguien me ayuda a como pasarlo a modo virtual??? quizas asi me de cuenta.
Les agradezco de antemano. Me baje los ejemplos, y aun asi no he conseguido pararlo a virtual, me resulto interesante el comentario de "KeyBoy"

Aqui les va mi codigo, a ver si me ayudan a modificarlo:

Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls, ImgList;
type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    Image1: TImage;
    ImageList1: TImageList;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  lista: TStrings;
  
implementation
{$R *.dfm}
uses ActiveX, ShlObj, ComObj;
type
 IExtractImage = interface ['{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}']
   function GetLocation(pszPathBuffer: LPWSTR; cchMax: DWORD; 
var pdwPriority: DWORD; const prgSize: SIZE; dwRecClrDepth: DWORD; 
var pdwFlags: DWORD): HRESULT; stdcall;
  function Extract(var phBmpImage: HBITMAP): HRESULT; stdcall;
 end;
function GetThumbnail(lpPathName, lpFileName: PWideChar; Width, Height: Integer): TBitmap;
var
 Desktop, Folder: IShellFolder;
 ItemIDList: PItemIDList;
 Flags, Priority: Cardinal;
 ExtractImage: IExtractImage;
 Res: HRESULT;
 hBitmap: Windows.HBITMAP;
 Buffer: array[0..MAX_PATH-1] of WideChar;
 Size: TSize;
begin
 Result := nil;
 SHGetDesktopFolder(Desktop);
 if LongBool(Desktop.ParseDisplayName(0, nil, lpPathName, PDWORD(0)^, ItemIDList, PDWORD(0)^)) then Exit;
 Desktop.BindToObject(ItemIDList, nil, IShellFolder, Folder);
 CoTaskMemFree(ItemIDList);
 if LongBool(Folder.ParseDisplayName(0, nil, lpFileName, PDWORD(0)^, ItemIDList, PDWORD(0)^)) then Exit;
 Folder.GetUIObjectOf(0, 1, ItemIDList, IExtractImage, nil, ExtractImage);
 CoTaskMemFree(ItemIDList);
 if not Assigned(ExtractImage) then Exit; // TODO
 Size.cx := Width; Size.cy := Height; Priority := 0;
 Flags := $28{IEIFLAG_SCREEN+IEIFLAG_OFFLINE};
 Res := ExtractImage.GetLocation(Buffer, SizeOf(Buffer), Priority, Size, 24{pf32bit}, Flags);
 if (Res = NOERROR) or (Res = E_PENDING{IEIFLAG_ASYNC}) then
  begin
   if not LongBool(ExtractImage.Extract(hBitmap)) then
    begin
     Result := TBitmap.Create;
     Result.Handle := hBitmap;
    end;
  end;
end;

procedure BuscarArchivos(const directorio, mascara: string;
  atributos: Integer; var listado: TStrings);
  // Procedimiento anidado
  //
  procedure Buscar(const subdirectorio: string);
  var
    regBusqueda: TSearchRec;
  begin
    // Buscar en el directorio
    if FindFirst(subdirectorio + mascara,atributos,regBusqueda) = 0 then
    begin
      try
        repeat
          Application.ProcessMessages;
          if (regBusqueda.Attr and faDirectory = 0)
            or (regBusqueda.Name <> '.')
              and (regBusqueda.Name <> '..') then
                listado.Add(subdirectorio + regBusqueda.Name);
        until FindNext(regBusqueda) <> 0;
      except
        FindClose(regBusqueda);
      end;
      FindClose(regBusqueda);
    end;
    // Buscar en los subdirectorios
    if FindFirst(subdirectorio + '*', atributos
      or faDirectory, regBusqueda) = 0 then
    begin
      try
        repeat
          Application.ProcessMessages;
          if ((regBusqueda.Attr and faDirectory) <> 0)
            and (regBusqueda.Name <> '.')
              and (regBusqueda.Name <> '..') then
                Buscar(subdirectorio + regBusqueda.Name + '\');
        until FindNext(regBusqueda) <> 0;
      except
        FindClose(regBusqueda);
      end;
      FindClose(regBusqueda);
    end;
  end;
begin
  Buscar(IncludeTrailingPathDelimiter(directorio));
end;

procedure TForm1.Button1Click(Sender: TObject);
var AItem: TListItem;
    i,w:integer;
    directorio,archivo:array[0..255] of WideChar;
    a,d:string;
    ar,di:PWideChar;
begin
  ListView1.Clear;
  ImageList1.Clear;
  lista := TStringList.Create;
  lista.Clear;
  BuscarArchivos('C:\Documents and Settings\Admin\Mis documentos\Mis imágenes', '*.jpg', faAnyFile, lista);
  for w:=0 to Lista.Count-1 do
    begin
      a:=ExtractFileName(Lista.Strings[w]);
      ar:=StringToWideChar((a),archivo,255);
      d:=ExtractFilePath(Lista.Strings[w]);
      di:=StringToWideChar(d,directorio,255);
      try
        Image1.Picture.Assign(GetThumbnail(di,ar, 96, 96));
        ImageList1.Add(Image1.Picture.Bitmap,nil);
      except
        on E: Exception do
          begin
            ShowMessage('Error: '+E.Message);
            EXIT;
          end;
       end;
    end;
  ListView1.Items.BeginUpdate;
  for i:=0 to Lista.Count-1 do
    begin
      AItem := ListView1.Items.Add;
      AItem.Caption := ExtractFileName(Lista.Strings[i]);
      AItem.SubItems.Add(Lista.Strings[i]);
      AItem.ImageIndex:=i;
    end;
  ListView1.Items.EndUpdate;   
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Lista.Free;
end;
end.

Muchas Gracias y Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;

Última edición por MaMu fecha: 29-07-2008 a las 16:29:33.
Responder Con Cita
Respuesta



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
Añadir elementos sin repetir MaMu Varios 12 21-10-2015 21:17:40
XML y sus elementos papulo Varios 5 01-03-2007 10:13:30
TListView calogero Varios 0 18-01-2007 17:16:45
Tlistview Yenifer Varios 1 18-08-2004 16:33:44
Problemas al añadir elementos a una Lista en una aplicación tipo consola judoboy Varios 2 09-06-2003 13:58:48


La franja horaria es GMT +2. Ahora son las 21:38:50.


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
Copyright 1996-2007 Club Delphi