Seite 1 von 1

Daten auslesen?

Verfasst: 20.09.2005 11:01
von roherter
Kann sich das bitte mal jemand anschauen
Also ich habe eine datei die bilderexe heist der wurde die datei pics.bin angehangen und ein longwert der die länge der datei pics.bin enthält
so und no lese ich den longwert aus ,ziehe ihn von der gesamtlänge ab und springe zu dieser stelle und lese sie aus bis zum ende und danach soll sie als pics.bin gespeichert werden!
mein Problem irgendwo muss noch n fehler sein???
vileicht findet einer von euch heraus was ich falsch mache???
Der Code:

Code: Alles auswählen

UseJPEGImageDecoder()

Enumeration
  
  #window_0
  #file1
  #file2
  #pic
  #picdraw
  #button1
  #button2
  #next
  #last
  #frame3d
  #bildex
  #bildexefile3
  #bildexefile2
EndEnumeration




If OpenWindow(#window_0, 216, 0, 850, 650,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar |#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget,"Gallerymakershow")
  SetWindowTitle(#window_0,"Gallerymaker2005      "+GetFilePart(file$)+"  -  Bild:"+Str(a)+"  -  Bilder Insgesamt:"+Str(total))
  If CopyFile("bildexe.exe","~~bildexe.exe")
  If OpenFile(#bildexefile3,"~~bildexe.exe")
    lengedatei=Lof()
   
    longwert=lengedatei-4
    FileSeek(longwert)
    logw=ReadLong()
    
    wertex=lengedatei-logw
    
    
    If wertex>37000
      *speicher=AllocateMemory(logw)
      MessageRequester("",Str(*speicher))
      
      FileSeek(wertex)
      bytes=ReadData(*speicher,logw)
      CloseFile(#bildexefile3)
      If OpenFile(#bildexefile2,"pics.bin")
        
        WriteData(*speicher,lengedatei)
        CloseFile(#bildexefile2)
        
      EndIf 
    Else 
      CloseFile(#bildexefile3)
    EndIf 
  EndIf 
    
  EndIf
  a=1
  file$=VBin_Dir("pics.Bin",1) 
  adress=VBin_("pics.bin",file$)
  total=VBin_TotalFiles("pics.bin")
  CatchImage(#last,?last)
  CatchImage(#next,?Nexti)
  CatchImage(#picdraw,adress)
  VBin_Free(adress)  
If CreateGadgetList(WindowID())
    UseImage(#picdraw)
    imgh=335-(ImageHeight()/2)
    imgb=425-(ImageWidth()/2)
    ImageGadget(#pic,imgb,imgh,800,600,UseImage(#picdraw))
    Frame3DGadget(#frame3d,0,0,850,650,"",#PB_Frame3D_Double  )
    ButtonImageGadget(#button1,365,10,60,20,UseImage(#last))
    GadgetToolTip(#button1,"Ein Bild Zurück")
    ButtonImageGadget(#button2,435,10,60,20,UseImage(#next))
    GadgetToolTip(#button2,"Ein Bild Weiter")
  EndIf
EndIf


Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindowID() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadgetID() ; Is it a gadget event?
  
  EventType = EventType() ; The event type

  
  ;You can place code here, and use the result as parameters for the procedures
  
  If Event = #PB_EventGadget
    If GadgetID=#button2
      Debug a
        
      
      If a>VBin_TotalFiles("pics.Bin")-1
      a=VBin_TotalFiles("pics.Bin")
      
    Else
      a=a+1 
      file$=VBin_Dir("pics.Bin",a) 
    adress=VBin_("pics.bin",file$)
    SetWindowTitle(#window_0,"Gallerymaker2005      "+GetFilePart(file$)+"  -  Bild:"+Str(a)+"  -  Bilder Insgesamt:"+Str(total))
    CatchImage(#picdraw,adress)
    UseImage(#picdraw)
    imgh=335-(ImageHeight()/2)
    imgb=425-(ImageWidth()/2)
    SetGadgetState(#pic,UseImage(#picdraw))
    ResizeGadget(#pic,imgb,imgh,-1,-1)
    VBin_Free(adress)
    EndIf
   
    
    ElseIf GadgetID=#button1
      Debug a
     
      If a>1 
         a=a-1
      file$=VBin_Dir("pics.Bin",a) 
      adress=VBin_("pics.bin",file$)
      SetWindowTitle(#window_0,"Gallerymaker2005      "+GetFilePart(file$)+"  -  Bild:"+Str(a)+"  -  Bilder Insgesamt:"+Str(total))
      CatchImage(#picdraw,adress)
      UseImage(#picdraw)
      imgh=335-(ImageHeight()/2)
      imgb=425-(ImageWidth()/2)
      SetGadgetState(#pic,UseImage(#picdraw))
      ResizeGadget(#pic,imgb,imgh,-1,-1)
      VBin_Free(adress)
    Else 
      a=1
     
    EndIf 
    EndIf  
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

;
End
last:
IncludeBinary "last.ico"
Nexti:
IncludeBinary "next.ico"



Verfasst: 20.09.2005 11:16
von ts-soft
Bin jetzt zu faul zum vergleichen, aber hier mal ein Snippet aus meinen alten SFX-Programm:

Code: Alles auswählen

If ReadFile(0, GetExeName())
  FileSeek(Lof() - 4)
  filelen.l = ReadLong()
  *mem = AllocateMemory(filelen)
  FileSeek(Lof() - 4 - filelen)
  ReadData(*mem, filelen)
  CreateFile(1, GetTempPath() + "tmp.bin")
  WriteData(*mem, filelen)
  CloseFile(1)
  CloseFile(0)
EndIf
Ich hoffe es hilft

danke

Verfasst: 20.09.2005 14:47
von roherter
Dann war mein ansatz richtig werds nachher vergleichen!
thanks

bildexe

Verfasst: 20.09.2005 22:31
von roherter
Danke an Ts-Soft,das hat mir weiter geholfen,scheint nurn kleiner fehler gewesen zu sein,hatte dummerweise beim probieren verzeichnisse verwechselt so das ich in meiner Galleryversion immer die falsche exe genommen habe !

Hier ist mal das ergebnis eine ausführbare exe die bilder anzeigt die vorher mit meinem Gallerymaker generiert wird!


http://home.arcor.de/romartens/entwicklung/bildexe.exe

Verfasst: 20.09.2005 23:30
von MJP
Hängt sich auf wenn ichs starten will...

Verfasst: 21.09.2005 07:19
von roherter
wo hast dus gespeichert
und welches betriebssystem hast du,ist nur für xp gedacht,
bei ,einem bekannten gehts und bei mir auch
wenn du firefox hast bitte nicht über das menue extras-downloads starten da wirds dann wohl temporär ausgeführt und stürtzt ab sonder direkt im verzeichniss wohin du es runtergeladen hast ausführen!