Ver Mensaje Individual
  #7  
Antiguo 21-11-2019
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.

Estuve mirando tu código y funciona correcto mostrando las caras el único problema que veo es que el archivo caraalegre.jpg es en realidad una cara triste, de allí que dos ítems diferentes muestren la misma imágen.

Para resolver tu planteo tenes dos opciones, una es copiar los archivos .JPG junto con tu ejecutable y cargarlos del modo que lo haces, pero el programa fallaría si por ejemplo alguien borra alguna imágen.

Y la otra, la mejor, es la que te comentaron y es poner esas imágenes en un archivo de recurso. Los pasos a hacerlo de modo simple:
  1. Copia el archivo BRC32.EXE (buscalo en la carpeta donde esté instalado Delphi) a tu carpeta PRUEBA.
  2. Con el block de notas crea un archivo de texto con el siguiente contenido:

    1 RCDATA caraalegre.jpg
    2 RCDATA caratriste.jpg
    3 RCDATA carallorando.jpg

    y guardalo, por ejemplo con el nombre de 'CARAS.RC'.
  3. Desde el explorador de windows te situas en la carpeta PRUEBA y:

    luego del click derecho del mouse te quedará así:

    borras lo pintado en azul con la tecla Backspace, escribes CMD y presionas la tecla Enter.
  4. Ya en consola escribes la línea de comando: BRC32 -R -V CARAS.RC

    y la ejecutas presionando la tecla Enter, te creará un archivo CARAS.RES.

Luego tu código Delphi debería ser algo así:
Código Delphi [-]
...
implementation

implementation

uses JPeg;

{$R *.dfm}
{$R CARAS.RES}

procedure TForm1.FormCreate(Sender: TObject);
begin
  cbb1.Items.Clear;
  cbb1.Items.Add('cara alegre');     // 1
  cbb1.Items.Add('cara triste');     // 2
  cbb1.Items.Add('cara llorando');   // 3
end;

procedure TForm1.cbb1Change(Sender: TObject);
const
  CARAS: array[1..3] of string = ('#1','#2','#3');
var
  RS: TResourceStream;
  JPG: TJPegImage;
begin
  if cbb1.ItemIndex > -1 then
  begin
    RS := TResourceStream.Create(hInstance,CARAS[cbb1.ItemIndex+1], RT_RCDATA);
    JPG := TJPegImage.Create;
    try
      RS.Position := 0;
      JPG.LoadFromStream(RS);
      img1.Picture.Assign(JPG);
    finally
      RS.Free;
      JPG.Free;
    end;
  end;
end;
...

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 21-11-2019 a las 19:59:53. Razón: corrección
Responder Con Cita