Toon posts:

[Delphi] Resource probleem *

Pagina: 1
Acties:
  • 127 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik probeer 4 jpegs in een resource file op te nemen voor gebruik in delphi.
wat ik doe : ik maak een txt, hier zet ik :

diagnose JPG "diagnose.jpeg"
lijnen JPG "lijnen.jpeg"
modules JPG "modules.jpeg"
wachtwoord JPG "wachtwoord.jpeg"

in, deze hernoem ik naar test.rc en hier maak ik een .res van met brcc32.
Om te testen of de resource file in orde is, open ik deze met de image editor in delphi,
nou is het probleem dat hij de error "out of memory" geeft, echter als ik alleen de 1e 2 doe dan
doet hij het wel, als ik de eerste 3 doe zegt hij "cannot read file", met de plaatjes is echter niets
mis, kan ze gewoon openen

iemand een idee ? alvast bedankt

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Is het met een resource file niet juist de bedoeling dat je de plaatjes in de resource file zet? Anders kun je net zo goed een inibestand gebruiken waar de locatie van je plaatjes instaat. Tenzij brcc32 dat voor je doet natuurlijk, dan heb ik niets gezegd...

My personal website


Verwijderd

Topicstarter
dat doet brcc32 voor mij jah

Verwijderd

is "Modules" misschien een reserved word ? Al eens geprobeerd met een andere naam ?

Verwijderd

Topicstarter
Verwijderd schreef op donderdag 10 februari 2005 @ 11:14:
is "Modules" misschien een reserved word ? Al eens geprobeerd met een andere naam ?
net ff geprobeerd, maakt geen verschil

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Misschien heb je hier iets aan. Wat je ook zou kunnen proberen is de Resource Workshop bij Delphi maar daar in zie ik geen mogelijkeheid een JPEG op te nemen.

www.fendt.com | Nikon D7100 | PS5


Verwijderd

Topicstarter
FendtVario schreef op donderdag 10 februari 2005 @ 11:30:
Misschien heb je hier iets aan. Wat je ook zou kunnen proberen is de Resource Workshop bij Delphi maar daar in zie ik geen mogelijkeheid een JPEG op te nemen.
heb het jpeg gedeelte geprobeerd -->

1 RCDATA "lijnen.jpg"
2 RCDATA "diagnose.jpg"
3 RCDATA "wachtwoord.jpg"

maar precies dezelfde errors helaas

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13-05 21:26

gorgi_19

Kruimeltjes zijn weer op :9

Delphi in de titel gefrot :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Mayco
  • Registratie: Augustus 2002
  • Laatst online: 05-05 08:13
en wat als het nu een fout in die image editor is? probeer gewoon de resources eens te gebruiken via je programma... mss gaat het wel...

edit: mss kan het handig zijn, http://www.latiumsoftware.com/en/pascal/0025.php staan een paar handige functies voor files uit resources...

[ Voor 35% gewijzigd door Mayco op 10-02-2005 13:55 ]


Verwijderd

Kun je niet gewoon een imagelist gebruiken ?

  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 12-03 16:55
ik gebruik brcc32 zelf niet, maar de resource compiler die bij de platform sdk zit.

file:
plaatje JPEG plaatje.jpg

cmd:
rc plaatje.rc

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
{$R plaatje.res}

procedure test;
var
  rs : TResourceStream;
  jpg : TJPEGImage;
begin
  rs := TResourceStream.Create(HInstance, 'plaatje', 'JPEG');
  jpg := TJPEGImage.Create;
  jpg.LoadFromStream(rs);
  rs.free;
 ....
end;

De Image Editor geeft ook een leesfout bij mij met het openen van die bestanden. Wellicht dat ze er wel gewoon goed in staan en dat het programma er gewoon niet mee overweg kan.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 13-05 20:49

Tomatoman

Fulltime prutser

In jouw code wil je een resource van het type RCDATA lezen, maar je geeft 'JPEG' als het type dat je daadwerkelijk leest:
Elissen schreef op vrijdag 11 februari 2005 @ 12:29:
Delphi:
7
  rs := TResourceStream.Create(HInstance, 'plaatje', 'JPEG');
Dat gaat natuurlijk niet goed.

Ik heb even een Delphiproject tevoorschijn gehaald waarin verschillende soorten resources zitten: een bitmap, twee icons (zelfde icon, maar met andere namen) en een dialog template. Dit is de RC-file, die met een resource compiler moet worden gecompileerd:
DEFWIZWATERMARK BITMAP DISCARDABLE DefWizWatermark.bmp

WIZTIP RCDATA DISCARDABLE WizTip.ico

12345 RCDATA DISCARDABLE WizTip.ico

DEFWIZEXTERIOR DIALOG DISCARDABLE 40, 0, 317, 193
STYLE WS_CHILD | WS_DISABLED
FONT 8, "MS Sans Serif"
BEGIN
END
In dezelfde directory staan de bestanden DefWizWatermark.bmp en WizTip.ico, die beide als resource in de resource file moeten worden opgenomen. Een bitmap is een standaard resourceformaat van het type BITMAP. De icons zijn - net als een JPEG-afbeelding - geen voorgedefinieerd resourcetype, vandaar dat ze moeten worden opgeslagen als het resourcetype RCDATA. Om dit script comfortabel te kunnen compileren tot een *.res-bestand kun je een batchbestand schrijven:
brcc32.exe MijnResource.rc MijnResource.res
pause
Natuurlijk moet je niet vergeten dat resourcebestand mee te compileren in je executable door in de implementation sectie van een van de units een resource directive op te nemen.
Delphi:
1
{$R MijnResource.res}
Nu een beetje stoeien met het laden van de icon resource uit het bestand.
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{$R MijnResource.res} 

procedure LoadMyIcon(Image: TImage; IconLib: HINST; IconID: PAnsiChar);
var
  AIconID: Integer;
  ResStream: TResourceStream;
begin
  with Image do
  begin
    AutoSize := True;
    if GetIconLib = 0 then
      Picture.Icon.Handle := LoadIcon(0, IconID)
    else
    begin
      AIconID := Integer(IconID);
      try
        { There's a bug in TResourceStream.CreateFromID, which raises an access
          violation instead of EResNotFound when the icon is not found }
        ResStream := TResourceStream.CreateFromID(IconLib, AIconID, RT_RCDATA);
      except
        on EAccessViolation do
          raise EResNotFound.CreateFmt('Resource %s not found', [IntToStr(AIconID)])
        else
          raise;
      end;
      try
        Picture.Icon.LoadFromStream(ResStream);
      finally
        ResStream.Free;
      end;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  { Assumption: MyImage is an existing TImage instance, for example on Form1 }

  { Load the standard Windows question mark. Use 0 for the instance handle -
    this indicates to load the file from the predefined Windows resources. }
  LoadMyIcon(MyImage, 0, IDI_QUESTION);

  { Now load the WIZTIP icon resource (a name) from the resources in the executable }
  LoadMyIcon(MyImage, HInstance, PAnsiChar('WIZTIP'));

  { Load the 12345 icon resource (a number) from the resources in the executable }
  LoadMyIcon(MyImage, HInstance, MakeIntResource(12345));
end;
Door de unit jpeg aan de uses clause van de unit toe te voegen en Image.Picture.Icon te vervangen door Image.Picture.JPEG kun je de code heel eenvoudig omschrijven tot iets wat een JPEG-afbeelding moet laden.

[ Voor 14% gewijzigd door Tomatoman op 11-02-2005 18:47 ]

Een goede grap mag vrienden kosten.


Verwijderd

Ik kan het op dit moment niet verifieren, maar volgens mij kan je het .rc-bestand aan je project toevoegen. Tijdens het compileren zal het resource bestand aangemaakt worden.
Pagina: 1