Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Explorador de archivos c++ builder 6 (https://www.clubdelphi.com/foros/showthread.php?t=77785)

dmartinezn 26-02-2012 15:42:36

Explorador de archivos c++ builder 6
 
Saludos amigos
Estoy tratando de hacer un explorador de archivos en c++ builder 6 que me brinde las siguientes funcionalidades.
1 - brindar la posibilidad de buscar la imagen que deseo y mostrar su vista previa
2- una ves selecciona la imagen se me muestre en un TImage
3- poder guardar esa imagen mostrada en el TImage en una carpeta

Hasta ahora he realizado el explorador de archivos pero de una forma rustica que supongo que no sea la mas optima por la limitaciones que me brinda. Para ello he utilizado un DriveComboBox, FilterComboBox, DirectoryListBox, FileListBox pero tiene la limitación de que solo en el FileListBox se me muestran los nombres de las imágenes sin la posibilidad de una vista previa y luego tendría el inconveniente de cómo encontrar la ruta completa donde esta almacenada esa imagen para pasarla para otra carpeta. Si conocen una forma mas optima de realizar eso se los agradecería.

escafandra 26-02-2012 18:54:17

TFileListBox::FileName te devuelve el nombre completo del archivo, incluido el path.

Para la vista previa busca en el foro: thumbnail.


Saludos.

dmartinezn 26-02-2012 22:42:33

Gracias escafandra, resolvi el problema asociando un edit al FileListBoxEx, luego mostré la imagen de la siguiente manera poniendo este código en el evento FileListBoxEx1DblClick

Código:

Image1->Picture->LoadFromFile(Edit1->Text)
Estuve probando lo que me dijo y también funcionó, muchas gracias, no encontré nada de los thumbnail para adaptarlo a lo que quería.
Saludos

ecfisa 27-02-2012 01:33:09

Hola dmartinezn.

Con la intención de que puedas sacar alguna idea mas, amplié un poco el ejemplo de este enlace.
Código:

#include <jpeg.hpp>

/* Valores iniciales */
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  DirectoryListBox1->Align = alLeft;
  FileListBox1->Align = alLeft;
  DirectoryListBox1->Directory = "C:\\Users\\User\\Pictures";
  FileListBox1->Mask = "*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.vmf";
  Image1->Align = alClient;
  Image1->Stretch = TRUE;
}

/* Actualizar FileListBox */
void __fastcall TForm1::DirectoryListBox1Change(TObject *Sender)
{
  FileListBox1->Directory = DirectoryListBox1->Directory;
}

/* Mostrar seleccion en TImage */
void __fastcall TForm1::FileListBox1Click(TObject *Sender)
{
  Image1->Picture->LoadFromFile(FileListBox1->FileName);
}

/* Guardar imágen */
void __fastcall TForm1::Image1DblClick(TObject *Sender)
{
 if (SavePictureDialog1->Execute())
  Image1->Picture->SaveToFile(SavePictureDialog1->FileName +
    ExtractFileExt(FileListBox1->FileName));
}

Es un código simple pero cumple los tres puntos que solicitas en tu primer mensaje.

Un saludo.

dmartinezn 01-03-2012 15:40:21

Muchas gracias ecfisa, una ultima cosa ahora, lo de guardar la imagen utilizando un SavePictureDialog1 me funciona perfectamente, pero quisiera lograr que la imagen se guardara en una carpeta que está dentro de un mismo directorio sin que el usuario tenga que guardarla manualmente, para ello he reutilizado y adaptado un código que ya se había tratado en otra ocasión en este foro

Código:

SHFILEOPSTRUCTA *F = new SHFILEOPSTRUCTA;
 String sOrigen, sDestino; // : String;
  AnsiString Origen,Destino;
  Origen=Edit1->Text.c_str();//Aqui obtengo la direccion donde esta la imagen
  Destino= ExtractFilePath(Application->ExeName)+"Imagen" ;
  int Result;
  Result = 0;
        F->hwnd  = Application->Handle;
        F->wFunc = FO_COPY;
        F->pFrom =  PChar(Origen.c_str());
        F->pTo  =  PChar(Destino.c_str()) ;
        F->fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION ;
        SHFileOperationA(F);

Pero tiene la desventaja que solo me funciona cuando el lugar donde voy a guardar la imagen esta fuera de la carpeta que tengo tambien el .exe, si hay algun metodo mejor de hacerlo o alguna segerencia sera bienvenida.

ecfisa 01-03-2012 22:15:47

Hola dmartinezn.

Si deseas que la imágen se almacene donde está situada tu aplicación, me parece más simple hacer por ejemplo:
Código:

void __fastcall TForm1::btnCargarImagenClick(TObject *Sender)
{
 AnsiString ImageFileName = "C:\\Imagenes\\FOTO.JPG";
 Image1->Picture->LoadFromFile(ImageFileName);
 Image1->Hint = ExtractFileExt(ImageFileName);
}

void __fastcall TForm1::btnGuardarImagenClick(TObject *Sender)
{
  if(EditImageName->Text.Length() > 0 )
  Image1->Picture->SaveToFile(ExtractFilePath(Application->ExeName) +
    EditImageName->Text+Image1->Hint);
}

Saludos.


La franja horaria es GMT +2. Ahora son las 01:54:07.

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