Daten auslesen?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Daten auslesen?

Beitrag 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"


Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

danke

Beitrag von roherter »

Dann war mein ansatz richtig werds nachher vergleichen!
thanks
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

bildexe

Beitrag 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
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
MJP
Beiträge: 72
Registriert: 14.10.2004 18:45
Wohnort: Nähe Frankfurt/Hessen
Kontaktdaten:

Beitrag von MJP »

Hängt sich auf wenn ichs starten will...
Alle Reschtsreib feler sind beabsichticht unn kosten nichs echtra ;-D
Visit ---|> http://www.Komani.de/
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag 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!
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Antworten