Avatar billede koonz Nybegynder
24. oktober 2000 - 19:46 Der er 12 kommentarer og
2 løsninger

\"Billede i exe\"

Det har måske været oppe før men jeg kan ikke finde det:

Jeg vil gerne undgå at mine billeder (jpeg) som jeg bruger i mit program kan ses i program dir\'et. Så vidt jeg husker er det noget med en .Res fil og dll - men det er lidt over mit formåen - nogen der kan give et eksempel ?
Avatar billede hatecaps Nybegynder
24. oktober 2000 - 19:56 #1
lytter med...
Avatar billede blood Nybegynder
24. oktober 2000 - 20:01 #2
i den mappe vi taler om kan du højer musse klik og vælg \"tilpas denne mappe\"
Avatar billede kokoko Nybegynder
24. oktober 2000 - 20:12 #3
måske kan det her bruges til eller andet:

http://www.undu.com/DN961101/00000016.htm
Avatar billede koonz Nybegynder
24. oktober 2000 - 20:38 #4
Kokoko

Hmnn.....måske lidt af vejen, men proceduren gemmer jo filen - gør den ikke, det var ikke lige helt planen, så bliver den jo netop synlig igen
Avatar billede kim_friis Nybegynder
25. oktober 2000 - 09:34 #5
Koonz - Så er der jo heldigt at der istedet for en savetoFile også er en procedure på TResourceStream som hedder savetostream!!! Jeg synes at du skulle kikke lidt videre på det fordi det er LIGE præcis den måde hvorpå man skal gøre det. Du skal bare bruge hjælpefilen lidt!!
Avatar billede borrisholt Novice
25. oktober 2000 - 12:23 #6
Etenlig er der ikke noget i vejen for at gemme billeder. Det gør tingene en hel del lettere ...

Jeg anbefalder det følgende :

Lav i notepad en RC fil der feks. ser sådan her ud, og gem den sammen med resten af dit projekt.

//Name            TYPE             Filename
  P0000008         JPEGIMAGE        P0000008.JPG
  P0000009         JPEGIMAGE        P0000009.JPG

Så skal du bruge en tom applicatoin, med et Image felt på og en knap. Tilføj knappen et onClick event og skriv det følgende i din unit1 :

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
{$R \'Crap.res\' \'Crap.rc\'}

uses
  JPEG;
Function GetTempPath : String;
begin
  SetLength(Result, MAX_PATH);
  Windows.GetTempPath(MAX_PATH, PChar(Result));
  SetLength(Result, Pred(Pos(#0,Result)));
end;

Function  GetTempFileName : String;
Begin
  SetLength(Result,MAX_PATH);
  Windows.GetTempFileName(PChar(GetTempPath),\'TMP\', 0, PChar(Result));
End;

procedure ExtractRes(ResType, ResName, ResNewName : String);
var
  Res : TResourceStream;
begin
  Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
  Res.SavetoFile(ResNewName);
  Res.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  TempFileName : String;
  JPEGImage : TJPEGImage;
begin
  TempFileName := GetTempFileName;
  ExtractRes(\'JPEGIMAGE\', \'P0000008\',TempFileName);
  JPEGImage := TJPEGImage.Create;
  JPEGImage.LoadFromFile(TempFileName);
  Image1.Picture.Assign(JPEGImage);
  JPEGImage.Free;
  DeleteFile(TempFileName);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Stretch := true;
end;

end.

Så er du i luften ....

Jens B
Avatar billede koonz Nybegynder
25. oktober 2000 - 12:25 #7
Kim

Ja - jeg har kigget lidt på det du foreslår, men kan ikke rigtig få det til at spille...

Desuden ved jeg ikke om jeg får mine filer \"compilet\" rigtigt, får jeg kan heller ikke få proceduren til at virke med SaveTofile\" i min .Rc fil skriver jeg

Whip_fig_1 JPGFILE D:\\Projekter\\FlyDB\\Usedpics\\whip_fig_1.jpg
Whip_fig_2 JPGFILE D:\\Projekter\\FlyDB\\Usedpics\\whip_fig_2.jpg
Whip_fig_3 JPGFILE D:\\Projekter\\FlyDB\\Usedpics\\whip_fig_3.jpg
Whip_fig_4 JPGFILE D:\\Projekter\\FlyDB\\Usedpics\\whip_fig_4.jpg
Whip_fig_5 JPGFILE D:\\Projekter\\FlyDB\\Usedpics\\whip_fig_5.jpg
Splash    JPGFILE D:\\Projekter\\FlyDB\\Usedpics\\Splash.jpg

Herefter compiler jeg det med

brcc32 pictures.res

Laver en {$R pictures} i mit program

Når jeg så skal kalde proceduren skriver jeg eks.

ExtractRes(\'JPEG\', \'Whip_fig_1\', \'Fig1.jpeg\');

Men så får jeg fejl på at den ikke kan finde Whip_fig_1

Måske det er ud over min formåen *GG*

Nogen der evt gad lave et eksempel - bare med et billede ?
Avatar billede borrisholt Novice
25. oktober 2000 - 12:29 #8
Det synes jeg ellers jeg havde gjort .. Nå men send lige en e-mail til Jens@Borrisholt.com

Jens B
Avatar billede koonz Nybegynder
25. oktober 2000 - 12:34 #9
*LOL*
Jens - du fik skrevet dit svar, lige mens jeg skrev min kommentar - jeg tror helt sikkert jeg kan bruge dit eksempel - skal lige ha lidt tid til at kigge på det...

De filer der nu bliver lavet som tmp - bliver de slettet igen, eller bliver de \"genbrugt\" ?

Avatar billede borrisholt Novice
25. oktober 2000 - 12:37 #10
De bliver sletter med det samme...

JEns B
Avatar billede kim_friis Nybegynder
25. oktober 2000 - 12:40 #11
Blot en hurtig kommentar. Hvad med at smide dem over en memorystream istedet for at gemme dem på disken?
Avatar billede borrisholt Novice
25. oktober 2000 - 12:55 #12
Det havde jeg ikke lige tænkt på ..

Nå men så kan du gøre sådan her :

implementation
{$R *.DFM}
{$R \'Crap.res\' \'Crap.rc\'}
uses
  JPEG;
var
  MemoryStream : TMemoryStream;

procedure ExtractRes(ResType, ResName : String);
begin
  with TResourceStream.Create(Hinstance, Resname, Pchar(ResType)) do
  try
    SaveToStream(MemoryStream);
    MemoryStream.Position := 0;
  finally
    free;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  JPEGImage : TJPEGImage;
begin
  ExtractRes(\'JPEGIMAGE\', \'P0000008\');
  JPEGImage := TJPEGImage.Create;
  try
    JPEGImage.LoadFromStream(MemoryStream);
    Image1.Picture.Assign(JPEGImage);
  finally
  JPEGImage.Free;
  end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Stretch := true;
end;

initialization
  MemoryStream := TMemoryStream.Create;
finalization
  MemoryStream.Free;
end.

Jens B
Avatar billede koonz Nybegynder
25. oktober 2000 - 17:31 #13
Ups - fik fordelt point forkert - Jens, du er god for 40 mere vil du ha ?
Avatar billede borrisholt Novice
26. oktober 2000 - 08:52 #14
koonz  > Nej pyt med det .. Dem får jeg jo nok en anden dag ...

Jens B
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester