Avatar billede landsbytossen Nybegynder
01. oktober 2001 - 09:18 Der er 9 kommentarer og
1 løsning

BitmapMinPict.LoadFromFile

Har levet en :
BitmapMinPict.LoadFromFile(ExtractFilePath(Application.ExeName) + \'minpict.bmp\');
Men den giver en runtime fejl: EAccessViolation...

Skal Loadfromfile ikke fodres med en sti+filnavn ?
Avatar billede ziron Nybegynder
01. oktober 2001 - 09:29 #1
jo men jeg tror nok at der ikke bliver sat \\ på extractfilepath, så:

BitmapMinPict.LoadFromFile(ExtractFilePath(Application.ExeName) + \'\\minpict.bmp\');

/ZIRON
Avatar billede landsbytossen Nybegynder
01. oktober 2001 - 09:46 #2
jo, der bliver sat en backslash med ExtractFilePath(Application.ExeName)
Avatar billede ziron Nybegynder
01. oktober 2001 - 09:47 #3
hmmm k hvad er din BitmapMinPict????

/ZIRON
Avatar billede landsbytossen Nybegynder
01. oktober 2001 - 10:14 #4
var
  BitmapMinPict:  TBitmap;
begin
  BitmapMinPict := TBitmap.Create;
Hey....vent lidt..
Disse to linier før LoadFromFile gav fejlen.
Selv om jeg ikke kan se hvorfor...
  IF  Assigned(BitmapMinPict)
  THEN BitmapMinPict.Free;

takker anyway......
Avatar billede ziron Nybegynder
01. oktober 2001 - 10:25 #5
hvad gabv fejl og har du fået det til at funge??

/ZIRON
Avatar billede landsbytossen Nybegynder
01. oktober 2001 - 10:41 #6
Det virker, fejlen fik jeg ikke identificeret. Men ved at fjerne de to linier:
IF  Assigned(BitmapMinPict)
THEN BitmapMinPict.Free;
i starten af mit program fik jeg ingen fejl i min efterfølgende LoadFromFile ??????
Avatar billede ziron Nybegynder
01. oktober 2001 - 10:49 #7
hmmm okay så er det jo fint nok...

/ZIRON
Avatar billede delphi Nybegynder
01. oktober 2001 - 11:51 #8
Lidt sent - spørgsmålet er lukke, men hva\'


Får du en EAccessViolation, så skal du altid strax tænke: \"Ikke created object!\"

Fejlen opstår typisk når du tilgår et object, som ikker er created, dvs. oprettet fysisk i hukommelsen og derfor typisk har værdien NIL.

Lad os tage dit program linie for linie:

>var
>  BitmapMinPict:  TBitmap;

Ok, du har nu en variabel (idette tilfælde en object pointer) af typen TBitmap

>begin

Din variabel er her udefineret (unassigned) og har værdien NIL

>  BitmapMinPict := TBitmap.Create;

Du reserverer noget hukommelse, nok til en object instans af classen TBitmap, kalder den Create metode, der laver noget \'husholdning\' og sætter tilsidst variablen til at \"pege\" på den reserverede hukommelse.

> IF  Assigned(BitmapMinPict)

Hvis variablen peger på et eller andet, dvs. er forskellig fra nil, så...

>  THEN BitmapMinPict.Free;

Frigiv den benyttede hukommelse igen. (lidt... uheldigt hvis du spørger mig)

>.
>.
>.
>  BitmapMinPict.LoadFromFile(...)

Du kalder her en metode, fra et TBitmap object instans, der skal være placeret på den adresse, som BitmapMinPict peger på.  Problemet er her, at BitmapMinPict godt nok peger på noget - nemlig på den adresse, hvor der tidligere lå et object... det er jo bare blevet slettet i mellemtiden.  Derfor virker det hvis du fjerner de to linier du omtalte.

Peter

Avatar billede delphi Nybegynder
01. oktober 2001 - 11:54 #9
EAccessViolation kan iøvrigt ikke skyldes at dit loadfromfile kald ikke kan finde filen pga. manglende backslash (der iøvrigt ikke manglede).  Her ville du få en eller anden fileerror.
Avatar billede landsbytossen Nybegynder
02. oktober 2001 - 08:19 #10
Mange tak for den fine gennemgang. Det er aldrig for sent at få rystet sine VB-nykker af :-)
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