| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Lun 02 Dic, 2013 8:23 pm Asunto: visualizar imagenes |
|
|
Hola a todos, tengo un código que sólo funciona con imágenes en .bmp, al tratar de abrir imágenes en .jpg me salta un error en pantalla que no sé que significa:
| Código: |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String dir = "C:";
if (SelectDirectory("Elige carpeta:","",dir)) {
FileListBox1->Directory = dir;
FileListBox1->ItemIndex = 0;
for (int i = 0; i <FileListBox1>Count; i++) {
lis->Add(FileListBox1->FileName);
FileListBox1->ItemIndex++;
}
if (lis->Count>0) {
Graphics::TBitmap* resBmp;
TJPEGImage *ImagenJpg = new TJPEGImage();
TListItem *Item;
String extension;
for (int i = 0; i <lis>Count; i++) {
extension = ExtractFileExt(lis->Strings[i]);
if ((extension.UpperCase()==".JPG")||(extension.UpperCase()==".JPEG")){
ImagenJpg->LoadFromFile(lis->Strings[i]);
resBmp->Height = ImageList1->Height;
resBmp->Width = ImageList1->Width;
ImageList1->Masked = false;
ImagenJpg->DIBNeeded();
resBmp->Assign(ImagenJpg);
ImageList1->Add(resBmp,NULL);
Item = ListView1->Items->Add();
Item->Caption = ExtractFileName(lis->Strings[i]);
Item->ImageIndex = i;
}
else {
if (extension.UpperCase()==".BMP") {
resBmp = new Graphics::TBitmap();
resBmp->Height = ImageList1->Height;
resBmp->Width = ImageList1->Width;
ImageList1->Masked = false;
resBmp->LoadFromFile(lis->Strings[i]);
ImageList1->Add(resBmp,NULL);
Item = ListView1->Items->Add();
Item->Caption = ExtractFileName(lis->Strings[i]);
Item->ImageIndex = i;
}
}
}
}
else {
ShowMessage("No hay archivos válidos en el directorio.");
}
}
}
|
_________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mie 04 Dic, 2013 9:31 pm Asunto: Ya lo tengo |
|
|
Paso la solución por si a alguien le interesa:
| Código: |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String dir = "C:";
if (!SelectDirectory("Elige carpeta:","",dir))
return;
dir = IncludeTrailingPathDelimiter(dir);
TSearchRec sr;
if (FindFirst(dir + "*.*", faAnyFile & ~faDirectory, sr) == 0) {
do {
if ((sr.Attr & faDirectory) == 0)
lis->Add(dir + sr.Name);
}
while (FindNext(sr) == 0);
FindClose(sr);
}
if (lis->Count == 0) {
ShowMessage("No hay archivos válidos en el directorio.");
return;
}
Graphics::TBitmap *resBmp = NULL;
Graphics::TBitmap *ImagenBmp = NULL;
TJPEGImage *ImagenJpg = NULL;
try {
TRect r = Rect(0, 0, ImageList1->Width, ImageList1->Height);
TGraphic *resGraphic;
TListItem *Item;
String extension;
int index;
for (int i = 0; i <lis>Count; ++i) {
extension = ExtractFileExt(lis->Strings[i]).UpperCase();
if ((extension == ".JPG") || (extension == ".JPEG")) {
if (!ImagenJpg) {
ImagenJpg = new TJPEGImage;
}
ImagenJpg->LoadFromFile(lis->Strings[i]);
ImagenJpg->DIBNeeded();
resGraphic = ImagenJpg;
}
else if (extension == ".BMP") {
if (!ImagenBmp) {
ImagenBmp = new Graphics::TBitmap;
}
ImagenBmp->LoadFromFile(lis->Strings[i]);
resGraphic = ImagenBmp;
}
else {
continue;
}
if (!resBmp) {
resBmp = new Graphics::TBitmap();
resBmp->SetSize(r.Width(), r.Height());
}
resBmp->Canvas->StretchDraw(r, resGraphic);
index = ImageList1->Add(resBmp, NULL);
Item = ListView1->Items->Add();
Item->Caption = ExtractFileName(lis->Strings[i]);
Item->ImageIndex = index;
}
}
__finally {
delete resBmp;
delete ImagenBmp;
delete ImagenJpg;
}
} |
_________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Lun 10 Jun, 2019 5:51 pm Asunto: |
|
|
Ahora no me funciona; Abre las imágenes correctamente dentro del ListView pero al ir a cambiarles el tamaño con el siguiente código desaparece la imagen y se queda sólo el nombre del archivo, el tamaño se ve que va cambiando pero como digo la imagen no está.
En un Spinnbutton tengo el siguiente código para cambiar el tamaño:
| Código: |
ImageList1->Width++;
ImageList1->Height++;
|
Alguien tiene alguna idea? _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Felip Master

Registrado: 09 Jun 2004Mensajes: 200
|
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mar 11 Jun, 2019 3:46 pm Asunto: |
|
|
Muchas gracias Felip, lo único que entiendo es que hay que cambiar el tamaño antes de añadir las imágenes, se que se podría hacer con funciones pero ahora no se me ocurre como . _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Felip Master

Registrado: 09 Jun 2004Mensajes: 200
|
Publicado: Mie 12 Jun, 2019 7:12 am Asunto: |
|
|
Usted necesita mejorar el código. Cambie el evento onclick:
| Código: |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String dir = "C:";
if (!SelectDirectory("Elige carpeta:","",dir))
return;
lis->Clear();
ListView1->Clear();
dir = IncludeTrailingPathDelimiter(dir);
TSearchRec sr;
if (FindFirst(dir + "*.*", faAnyFile & ~faDirectory, sr) == 0) {
do {
if ((sr.Attr & faDirectory) == 0) {
String extension = ExtractFileExt(dir + sr.Name).UpperCase();
if ((extension == ".JPG") || (extension == ".JPEG") || (extension == ".BMP")) {
lis->Add(dir + sr.Name);
}
}
}
while (FindNext(sr) == 0);
FindClose(sr);
}
if (lis->Count == 0) {
ShowMessage("No hay archivos válidos en el directorio.");
return;
}
Graphics::TBitmap *resBmp = NULL;
Graphics::TBitmap *ImagenBmp = NULL;
TJPEGImage *ImagenJpg = NULL;
try {
TRect r = Rect(0, 0, ImageList1->Width, ImageList1->Height);
TGraphic *resGraphic;
TListItem *Item;
String extension;
int index;
for (int i = 0; i <lis>Count; ++i) {
extension = ExtractFileExt(lis->Strings[i]).UpperCase();
if ((extension == ".JPG") || (extension == ".JPEG")) {
if (!ImagenJpg) {
ImagenJpg = new TJPEGImage;
}
ImagenJpg->LoadFromFile(lis->Strings[i]);
ImagenJpg->DIBNeeded();
resGraphic = ImagenJpg;
}
else if (extension == ".BMP") {
if (!ImagenBmp) {
ImagenBmp = new Graphics::TBitmap;
}
ImagenBmp->LoadFromFile(lis->Strings[i]);
resGraphic = ImagenBmp;
}
else {
continue;
}
if (!resBmp) {
resBmp = new Graphics::TBitmap();
//resBmp->SetSize(r.Width(), r.Height());
resBmp->Width = r.Width();
resBmp->Height = r.Height();
}
resBmp->Canvas->StretchDraw(r, resGraphic);
index = ImageList1->Add(resBmp, NULL);
Item = ListView1->Items->Add();
Item->Caption = ExtractFileName(lis->Strings[i]);
Item->ImageIndex = index;
}
}
__finally {
delete resBmp;
delete ImagenBmp;
delete ImagenJpg;
}
}
|
He utilizado el BCB6 que no tenía SetSize. No es necesario cambiar esa parte de su código.
Unit.h:
| Código: |
...
__fastcall TForm1(TComponent* Owner);
...
void __fastcall newWidthHeight(int IncDec);
...
|
unit.cpp:
| Código: |
...
void __fastcall TForm1::newWidthHeight(int IncDec)
{
ListView1->Clear();
ImageList1->Width+=IncDec;
ImageList1->Height+=IncDec;
Graphics::TBitmap *resBmp = NULL;
Graphics::TBitmap *ImagenBmp = NULL;
TJPEGImage *ImagenJpg = NULL;
try {
TRect r = Rect(0, 0, ImageList1->Width, ImageList1->Height);
TGraphic *resGraphic;
TListItem *Item;
String extension;
int index;
for (int i = 0; i <lis>Count; ++i) {
extension = ExtractFileExt(lis->Strings[i]).UpperCase();
if ((extension == ".JPG") || (extension == ".JPEG")) {
if (!ImagenJpg) {
ImagenJpg = new TJPEGImage;
}
ImagenJpg->LoadFromFile(lis->Strings[i]);
ImagenJpg->DIBNeeded();
resGraphic = ImagenJpg;
}
else if (extension == ".BMP") {
if (!ImagenBmp) {
ImagenBmp = new Graphics::TBitmap;
}
ImagenBmp->LoadFromFile(lis->Strings[i]);
resGraphic = ImagenBmp;
}
else {
continue;
}
if (!resBmp) {
resBmp = new Graphics::TBitmap();
//resBmp->SetSize(r.Width(), r.Height());
resBmp->Width = r.Width();
resBmp->Height = r.Height();
}
resBmp->Canvas->StretchDraw(r, resGraphic);
index = ImageList1->Add(resBmp, NULL);
Item = ListView1->Items->Add();
Item->Caption = ExtractFileName(lis->Strings[i]);
Item->ImageIndex = index;
}
}
__finally {
delete resBmp;
delete ImagenBmp;
delete ImagenJpg;
}
}
|
CSpinButton:
| Código: |
void __fastcall TForm1::CSpinButton1UpClick(TObject *Sender)
{
newWidthHeight(+1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CSpinButton1DownClick(TObject *Sender)
{
newWidthHeight(-1);
}
|
|
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Jue 13 Jun, 2019 12:08 am Asunto: |
|
|
Muchas gracias Felip, ha funcionado a la perfección estoy en deuda. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Lun 24 Jun, 2019 11:33 am Asunto: |
|
|
Bueno siguen los problemas.
He logrado pasar a una variable tipo String la ruta del archivo seleccionado en el ListView y a la hora de ejecutarlo con ShellExecute no lo ejecuta porque a la variable le falta una barra invertida "\", es decir sólo tiene una y debería tener dos. He probado con StringReplace pero no logro capturar dicho carácter. He probado un montón de cosas pero no doy con la solución.
Se trata de crear un FileName a partir del archivo seleccionado.
Agradeceré una ayuda. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Felip Master

Registrado: 09 Jun 2004Mensajes: 200
|
Publicado: Mar 25 Jun, 2019 2:02 am Asunto: |
|
|
| Código: | AnsiString str = Listview ...;
ShellExecute(0, "open", str.c_str() , "", "", SW_SHOWMAXIMIZED); |
|
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mar 25 Jun, 2019 5:30 pm Asunto: |
|
|
Ya lo había probado pero sigue sin funcionar. Este es el código que tengo ahora mismo y no me funciona:
| Código: |
void __fastcall TForm1::ListView1DblClick(TObject *Sender)
{
String item_seleccionado = ListView1->Items->Item[ListView1->Selected->Index]->Caption;
String arc = ExpandFileName(item_seleccionado);
ShellExecute(NULL,L"open",arc.w_str(),NULL,NULL,SW_SHOWNORMAL);
}
|
_________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Felip Master

Registrado: 09 Jun 2004Mensajes: 200
|
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mar 25 Jun, 2019 8:52 pm Asunto: |
|
|
Nada sigue sin abrirlo. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Felip Master

Registrado: 09 Jun 2004Mensajes: 200
|
Publicado: Mar 25 Jun, 2019 10:55 pm Asunto: |
|
|
Yo estaba usando BCB6.
Ahora probé su código con el C++Builder 10.3 y se ejecutó normal. |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mie 26 Jun, 2019 10:00 am Asunto: |
|
|
Ok, muchas gracias de todas maneras seguiré haciendo pruebas. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Dom 28 Jun, 2020 10:12 am Asunto: |
|
|
Tugui prueba asi:
| Código: |
String link = "";
link = "https://www.youtube.com/";
ShellExecute(NULL, L"open", link.c_str(), NULL, NULL, SW_SHOWNORMAL);
|
he puesto una direccion web, ya tu ajustalo a tus datos |
|
| Volver arriba |
|
 |
|