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:
- Copia el archivo BRC32.EXE (buscalo en la carpeta donde esté instalado Delphi) a tu carpeta PRUEBA.
- 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'.
- 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.
- 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'); cbb1.Items.Add('cara triste'); cbb1.Items.Add('cara llorando'); 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