>LPARAMETERS tcFileName > >*!* LET OP !! >*!* Niet alle variabelen worden hier bovenin gedeclareerd. Om snelheidsredenen >*!* worden de variabelen die nodig zijn voor het maken van een Bitmap verderop >*!* in deze routine ingesteld. > >LOCAL lcFileName >LOCAL lnFileHandle > >lcFileName = ALLTRIM(tcFileName) >lnFileHandle = 0 > >*!* Voor de zekerheid controleren we hier of het bestand bestaat. > >IF !FILE(lcFileName) > THIS.cFileName = "" > THIS.nACVersion = 0 > THIS.cACVersion = "" > THIS.PictureVal = FILETOSTR(goApp.cHomeDir + "framework\grafisch\geenvoorbeeld.bmp") > RETURN >ENDIF > >*!* Nu het bestand aanwezig lijkt te zijn, >*!* kunnen we er daadwerkelijk mee aan de slag. > >*!* Eerst lezen we de versie uit. Is de versie lager dan 1014 >*!* dan zit er geen Preview in het bestand. > >THIS.cFileName = lcFileName >lnFileHandle = FOPEN(THIS.cFileName, 0) > >= FREAD(lnFileHandle, 2) >THIS.nACVersion = VAL(FREAD(lnFileHandle, 4)) > >DO CASE > CASE THIS.nACVersion = 1021 > THIS.cACVersion = "AutoCAD 2007" > CASE THIS.nACVersion = 1018 > THIS.cACVersion = "AutoCAD 2004/2005/2006" > CASE THIS.nACVersion = 1015 > THIS.cACVersion = "AutoCAD 2000/2000i/2002" > CASE THIS.nACVersion = 1014 > THIS.cACVersion = "AutoCAD 14" > CASE THIS.nACVersion = 1013 > THIS.cACVersion = "AutoCAD 14, Sample" > CASE THIS.nACVersion = 1012 > THIS.cACVersion = "AutoCAD 13" > CASE THIS.nACVersion = 1009 > THIS.cACVersion = "AutoCAD 11/12" > CASE THIS.nACVersion = 1006 > THIS.cACVersion = "AutoCAD 10" > CASE THIS.nACVersion = 1004 > THIS.cACVersion = "AutoCAD 9" > OTHERWISE > THIS.cACVersion = "" >ENDCASE > >IF THIS.nACVersion < 1014 > THIS.PictureVal = FILETOSTR("grafisch/geenvoorbeeld.bmp") > = FCLOSE(lnFileHandle) > RETURN >ENDIF > >*!* Nu kan de Bitmap worden uitgelezen en afgebeeld. > >LOCAL lnStartOfBitmap, lnNumberOfDescriptors, lnNum1 >LOCAL lnDescriptorID, lnDescriptorStart, lnDescriptorLength >LOCAL lcBitmap >LOCAL lcFileHeaderType, lcFileSize, lcFileHeaderReserved1, lcFileHeaderReserved2, lcFileHeaderOffsetBits > >lnStartOfBitmap = 0 >lnNumberOfDescriptors = 0 >lnNum1 = 0 >lnDescriptorID = 0 >lnDescriptorStart = 0 >lnDescriptorLength = 0 >lcBitmap = "" >lcFileHeaderType = "" >lcFileSize = "" >lcFileHeaderReserved1 = "" >lcFileHeaderReserved2 = "" >lcFileHeaderOffsetBits = "" > >*!* Daar gaan we..... > >= FSEEK(lnFileHandle, 13, 0) && Pointer verplaatsen >lnStartOfBitmap = DWord2Num(FREAD(lnFileHandle, 4)) && Startlocatie van de Bitmap >= FREAD(lnFileHandle, lnStartOfBitmap - 17 + 16) && Startlocatie is een absolute offset, dus de huidige > && positie (17 = 13 + 4) moet in mindering worden gebracht > && 16 Is de lengte van de header van de BMP. Doen we niks mee >= FREAD(lnFileHandle, 4) && Pointer verplaatsen >lnNumberOfDescriptors = ASC(FREAD(lnFileHandle, 1)) && Aantal Descriptors aftappen >FOR lnNum1 = 1 TO lnNumberOfDescriptors && Loop door de Descriptors heen > lnDescriptorID = ASC(FREAD(lnFileHandle, 1)) && de id, > lnDescriptorStart = DWord2Num(FREAD(lnFileHandle, 4)) && dan de startpositie en > lnDescriptorLength = DWord2Num(FREAD(lnFileHandle, 4)) && tenslotte de lengte aftappen > IF lnDescriptorID = 2 && Indien Descriptor Type = 2 (de Bitmap zelf) > EXIT && Exit de Loop en gebruik de gevonden startpositie en lengte > ENDIF >ENDFOR > >= FSEEK(lnFileHandle, lnDescriptorStart, 0) && Pointer naar begin van de Bitmap >lcBitMap = FREAD(lnFileHandle, lnDescriptorLength) > >= FCLOSE(lnFileHandle) > >*!* Nu gaan we de header voor de bitmap samenstellen. > >lcFileHeaderType = Num2Word(19778) && Letters BM in de Header als identificatie >lcFileSize = Num2DWord(14 + lnDescriptorLength) && grootte van het bestand (header + bitmap zelf) >lcFileHeaderReserved1 = Num2Word(0) && geen betekenis >lcFileHeaderReserved2 = Num2Word(0) && geen betekenis >lcFileHeaderOffsetBits = Num2DWord(1078) && offset naar begin van de feitelijke bitmap > && de waarde 1078 is een aanname die "altijd" klopt. > >*!* Tenslotte de bitmap samenstellen uit de verschillende onderdelen van >*!* de header en de bitmap zelf die uit de AutoCAD-tekening is geript en >*!* gelijk in de preview afbeelden (Jippie VFP9 met de nieuwe PictureVal!) > >THIS.PictureVal = lcFileHeaderType + lcFileSize + lcFileHeaderReserved1 + lcFileHeaderReserved2 + ; > lcFileHeaderOffsetBits + lcBitMap > >*!* LET OP!! >*!* Twee extra exit-points in deze routine. >