Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como insertar imagen en delphi (https://www.clubdelphi.com/foros/showthread.php?t=86277)

Valee 12-07-2014 23:54:03

Como insertar imagen en delphi
 
Holaa!!!! Necesito saber como desde una carpeta que tengo guardada imágenes de las banderas del mundo las pueda mostrar de acuerdo al nombre del país que el usuario me ingresa. Por ejemplo: el usuario ingresa ARGENTINA, y en la carpeta tengo una imagen de nombre ARGENTINA la cual se asigna en el Image correspondiente.
Se que se puede sin necesidad de cargar todas las banderas en un formulario (como hice). Pero nose como hacerlo, o como generar la ruta para asignarla.

Valee 13-07-2014 00:44:22

Quiero aclarar que se trata de un fixture que realizo, por lo cual tiene que servir para cualquier mundial.
Debido a que no encontré una forma de poner en un stringgrid una bandera del país que corresponde decidí que al listar se muestren todas las banderas que van a participar en ese mundial. Por lo que la carpeta contiene las banderas de TODOS los países, y solo se muestran lo de los países que juegan dicho mundial

ecfisa 13-07-2014 10:26:11

Hola Valee.
Cita:

Empezado por Valee (Mensaje 478925)
...
Debido a que no encontré una forma de poner en un stringgrid una bandera del país que corresponde ...

Hola Valee.

No especificaste un detalle importante: Con que formato están almacenadas las imágenes.

Como comentas tener guardadas las imágenes en una carpeta estimo que el nombre del archivo de cada imágen se corresponde con el del país.

Bajo el supuesto anterior y tratándose de imágenes de formato JPG, te hice un ejemplo que usa un TStringGrid con dos columnas. En la primera carga el nombre del país (extraído del nombre de archivo) y en la segunda la imágen almacenada en él.

La imágen se dibuja en StringGrid en el evento OnDrawCell y se extrae de un TImageList donde fué previamente almacenada.
Código Delphi [-]
...

implementation

uses Jpeg;

...

procedure TForm1.btnLoadImagesClick(Sender: TObject);
// también podrías usar el evento OnCreate del form,
// en ese caso podes quitar la línea: StringGrid1.Invalidate;
const
  IMG_PATH = 'C:\pruebas\Imagenes\';
var
  FS: TFileStream;
  SR: TSearchRec;
  JPEG: TGraphic;
  Bitmap: TBitmap;
  c: Integer;
begin
  if FindFirst(IMG_PATH+'*.JPG', faArchive, SR) = 0 then
  begin
    c:= StringGrid1.FixedRows;
    repeat
      FS:= TFileStream.Create(IMG_PATH+SR.Name, fmOpenRead);
      JPEG:= TJPEGImage.Create;
      Bitmap:= TBitmap.Create;
      try
        StringGrid1.Cells[0, c]:= ChangeFileExt(SR.Name, '');
        FS.Seek(0, soFromBeginning);
        JPEG.LoadFromStream(FS);
        Bitmap.Width:= JPEG.Width;
        Bitmap.Height:= JPEG.Height;
        Bitmap.PixelFormat:= pf24bit;
        Bitmap.Canvas.Draw(0, 0, JPEG);
        ImageList1.Add(Bitmap, Bitmap);
        Inc(c);
      finally
        JPEG.Free;
        Bitmap.Free;
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
    StringGrid1.Invalidate;
  end;
end;

// Evento OnDrawCell donde es dibujada la bandera
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if ACol = 1 then
    with Sender as TStringGrid do
    begin
      Canvas.FillRect(Rect);
      ImageList1.Draw(Canvas, Rect.Left, Rect.Top, ARow);
      Canvas.TextOut(Rect.Left+ImageList1.Width, Rect.Top, Cells[ACol, ARow]);
    end;
end;
Las imágenes deberán tener tamaños homogéneos y deberás ajustar las propiedades Height y Width del ImageList a los de las imágenes almacenadas. Y a fin de la correcta presentación, lo mismo con las propiedades ColWidths y RowWidths del StringGrid.

Saludos :)


La franja horaria es GMT +2. Ahora son las 14:57:01.

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