Ver Mensaje Individual
  #3  
Antiguo 13-07-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Valee.
Cita:
Empezado por Valee Ver Mensaje
...
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita