read error at adress 17 bei sämtlichen Untils

Anfängerfragen zum Programmieren mit PureBasic.
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Wiso nicht?

Mach doch einfach eine Globale Variable. Aber besser wäre es wenn die ID als Parameter übergeben wird. Es ist voralles übersichtlicher.

Vil. hast du ja nicht das prinzip der ID bei LoadImage() verstanden... Du kannst mit der ID im ganzem Programm herumspielen, solange das Image nicht aus dem Speicher gelöscht wird...
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Andreas_S hat geschrieben: Vil. hast du ja nicht das prinzip der ID bei LoadImage() verstanden... Du kannst mit der ID im ganzem Programm herumspielen, solange das Image nicht aus dem Speicher gelöscht wird...
Und das Klappt bei mir leider nicht:

Code: Alles auswählen

LoadImage(6, "C:\1.JPEG", 0)
LoadImage(7, "C:\Datei.JPG", 0)


Procedure ListIcon() 
E = 0

Win.s = "C:\Windows"
If OpenWindow(10, 0, 0, 500, 550, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(10))
UseJPEGImageDecoder()
ListIconGadget(11,  1,  1, 599, 550, "Name", 300)
AddGadgetColumn(11, 1, "Größe in Byte", 200)

ReadFile(8, Win.s+"\Inhalt.txt")
ColumnPos = 0

For x = 1 To 500
a$ = ReadString(8, 0)
b$ = ReadString(8, 0)
c$ = ReadString(8, 0)

If a$ = "Datei"
AddGadgetItem(11, -1, b$ , ImageID(6))
SetGadgetItemText(11, ColumnPos, c$, 1)
EndIf 
If a$ = "Ordner"
AddGadgetItem(11, -1, b$ , ImageID(7))
SetGadgetItemText(11, ColumnPos, c$, 1)
EndIf 
ColumnPos+1
Next   

Repeat
If E = 5
ProcedureReturn
EndIf 
   
Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndIf
EndProcedure 

mm = CreateThread(@ListIcon(), 0)
Delay(5000)
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Sorry, aber mir schmerzen richtig die augen wenn ich den code ansehe.
Stichwort: Einrückungen

So könnte ich beim besten willen nicht programmieren... man weis ja nie wann ein Block anfängt und wann er endet...
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Code: Alles auswählen

LoadImage(6, "C:\1.JPEG", 0)
LoadImage(7, "C:\Datei.JPG", 0)


Procedure ListIcon() 
E = 0
Win.s = "C:\Windows"
UseJPEGImageDecoder()
ReadFile(8, Win.s+"\Inhalt.txt")

If OpenWindow(10, 0, 0, 500, 550, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(10))
ListIconGadget(11,  1,  1, 599, 550, "Name", 300)
AddGadgetColumn(11, 1, "Größe in Byte", 200)
ColumnPos = 0

 For x = 1 To 500
 a$ = ReadString(8, 0)
 b$ = ReadString(8, 0)
 c$ = ReadString(8, 0)

  If a$ = "Datei"
  AddGadgetItem(11, -1, b$ , ImageID(6))
  SetGadgetItemText(11, ColumnPos, c$, 1)
  EndIf 

  If a$ = "Ordner"
  AddGadgetItem(11, -1, b$ , ImageID(7))
  SetGadgetItemText(11, ColumnPos, c$, 1)
  EndIf 
  
 ColumnPos+1

 Next   

Repeat

If E = 5
ProcedureReturn
EndIf 
   
Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndIf
EndProcedure 
So besser?
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

>> So besser?
naja, daran muss noch gearbeitet werden...


Ganz einfach... du musst .*ico laden, es ist ja auch ein ListIconGadget...

Und zu deinem Code... Da sind so viele Dinge drinnen die keinen Sinn haben, um nur ein paar bsp. zu nennen:

UseJPEGImageDecoder() innerhalb einer Prozedur, das sollte ganz am anfang des codes stehen...

Du verwendest die Variable E nicht für berrechnugen, aber fragst sie auf 5 ab...

Code: Alles auswählen

ReadFile(8, "C:\Windows\Inhalt.txt")

For x = 1 To 500
    a$ = ReadString(8, 0)
    b$ = ReadString(8, 0)
    c$ = ReadString(8, 0)
Next
Das ist wirklich sehr naiv. man kann mit EoF(File) überprüfen ob man am ende der Datei angekommen ist.
Außerdem gibt man einen allokierten Speicher vor Programmende wieder frei wenn man ihn vorher bezogen hat. Das gilt auch für Images, Files, ect. .

-> Back to the routes.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

So habe nach mehreren Stunden den Fehler gefunden bzw. die 3 Fehler. Ich räume meinen Code jetzt mal ein bisschen auf und hoffe, dass sich jetzt nichtmehr so leicht Fehler einschleichen.

Wenn ihr wollt Poste ich den Code später nochmal und hoffe vielleicht noch Verbesserungsvorschläge zu bekommen.
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Habe jetzt leider bei einem anderen Program wieder diesen Fehler.

Hier der Code:

Code: Alles auswählen

Procedure Auswahl(*Wert)

  If OpenWindow(1, 216, 0, 451, 194, "Auswahlfenster",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
       OptionGadget(50, 70, 70, 20, 20, "")
      OptionGadget(51, 70, 130, 20, 20, "")
      StringGadget(52, 100, 70, 210, 25, "")
      StringGadget(53, 100, 130, 210, 25, "")
      ButtonGadget(54, 330, 70, 100, 30, "Auswählen")
      ButtonGadget(55, 330, 130, 100, 30, "Auswählen")
      TextGadget(56, 10, 20, 400, 20, "Bitte wählen sie eine Datei oder ein Verzeichnis aus, das hochgeladen werden soll.")
      TextGadget(57, 20, 70, 40, 20, "Datei:")
      TextGadget(58, 16, 130, 40, 20, "Ordner:")
      ButtonGadget(59, 170, 160, 120, 33, "Senden")
      Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()

        Case 54
        Datei$ = OpenFileRequester("Datei Auswählen", "Desktop", "*.*", 70, 0)
        SetGadgetText(52, Datei$)
         
        
        Case 55
        Ordner$ = PathRequester("Ordner Auswählen", "")
        SetGadgetText(52, Datei$)    
        
        
        Case 59
        Goto Auswahl_Ende:
     
        
    
         EndSelect
           EndIf 
  Until EventID = #PB_Event_CloseWindow
  EndIf
  *Wert = 66
  Auswahl_Ende:
EndProcedure

wahl = CreateThread(@Auswahl(), 67)
WaitThread(wahl)
Warum wird bei Endprocedure wieder "Invalid Memory access" angezeigt?

Habe phpbb 4.30 Beta 4
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Ligatur
Beiträge: 196
Registriert: 09.07.2006 00:41

Beitrag von Ligatur »

Du lieferst hier ein gutes Beispiel ab, warum Goto bei vielen verpönt ist. Du springst bei

Code: Alles auswählen

     
        Case 59
        Goto Auswahl_Ende:
 
aus einer Repeat Until Schleife raus, das kann den Stack durcheinanderbringen und damit zu Abstürzen führen. Benutze lieber Break.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Gute Idee!

Ihr seid echt Super, hat geklappt, , danke!!!!!
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

für die bilder nimm lieber ne enumeration für die IDs ( die sind dann auch automatisch Global ).

Code: Alles auswählen

Enumeration
#Bild1    ; -> 0
#Bild2    ; -> 1
; ... usw.
Endenumeration
dann so:

Code: Alles auswählen

LoadImage(#Bild1, "C:\1.JPEG", 0)
LoadImage(#Bild2, "C:\Datei.JPG", 0) 
...
Ausserdem solltest du deine Bildpfade auch relativ angeben anstatt absolut - wenn du das programm auf einem anderen pc auch zum laufen bringen willst ;)

Cheers,
Thalius
"...smoking hash-tables until until you run out of memory." :P
Antworten