Seite 2 von 4

Verfasst: 26.07.2008 15:41
von Little John
Joel hat geschrieben:So, der Code ist Optimiert, jetzt kommt aber "Invalid Memory Access"
Diese Art der Optimierung kannte ich noch gar nicht. :D

SCNR, Little John

Verfasst: 26.07.2008 15:42
von edel
Und wo kommt dieser Fehler ?

Verfasst: 26.07.2008 15:44
von Joel
Im Server, und zwar bei EndProcedure. In Fenster_1

Verfasst: 26.07.2008 15:45
von marco2007
Der Code ist ziemlich unübersichtlich. Was ist zum Beispiel das?

Code: Alles auswählen

     Repeat 
     If F = 70 

     CloseWindow(0) 
     F = 0 
     Goto Ende_Fenster: 
     EndIf 
     Until m = 55

Verfasst: 26.07.2008 15:58
von Joel
Ich sollte ja kein KillThread verwenden. Und statt Kill Thread gibt das Programm einfach F = 70 zurück und dann beendet sich die Procedure. Bzw. inmeinem Fall mit Fehlermeldung

Verfasst: 26.07.2008 16:01
von marco2007
1) Wozu Repeat Until?
2) ProcedureReturn?

Verfasst: 26.07.2008 16:03
von Joel
marco2006 hat geschrieben:1) Wozu Repeat Until?
2) ProcedureReturn?
Gute Idee, bau ich sofort ein :D

Verfasst: 26.07.2008 16:16
von marco2007
Wozu "":

Code: Alles auswählen

WriteStringN(4, ""+Text$+"", 0)

Verfasst: 26.07.2008 16:54
von Joel
Habe das jetzt Verbesert, ich bekomme zum Glück keine Fehlermlungen mehr. Das Problem ist aber, dass ich ja im Server in der Procedure "ListIcon" eine Image lade, die später in dem Gadget anzegeigt wird. Wenn ich aber ein zweites mal eine Pfad eingebe, wird das Bild nichtmehr im Gadget angezeigt, wiso??

Server:

Code: Alles auswählen

Global Win.s
Global mmKill
Global E
Global F

E = 0
F = 0
Win.s = GetEnvironmentVariable("windir")



Procedure ListIcon(Ya.l) 
E = 0
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)
LoadImage(6, "C:\1.JPEG", 0)
LoadImage(7, "C:\Datei.JPG", 0)
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 
  
  
  
 



Procedure Ort(Dummi.l)
If OpenWindow(8, 300, 400, 300, 300, "Durchsuchen", #PB_Window_MinimizeGadget | #PB_Window_SystemMenu)
     If CreateGadgetList(WindowID(8))
     StringGadget(9, 1, 1, 100, 25, "" , 0) 
     ButtonGadget(5, 100, 30, 40, 40, "OK", 0)
     EndIf 
     
     Repeat
     EventID = WaitWindowEvent()
      If EventID = #PB_Event_Gadget
      Select EventGadget()
      
      Case 5
      Text$ = GetGadgetText(9)
      CreateFile(4, "C:\drf.txt")
      WriteStringN(4, ""+Text$+"", 0)
      CloseWindow(8)
      CloseFile(4)
      G = 4
      EndSelect
      
      EndIf  
      Until EventID = #PB_Event_CloseWindow Or G = 4
      EndIf 
EndProcedure





Procedure Fenster_1(Dussi.l)
ClientID = EventClient() 
If  OpenWindow(0, 50, 100, 300, 500, "Server zum Herunterfaheren" , #PB_Window_SystemMenu , 0) 
If CreateGadgetList(WindowID(0)) 
ButtonGadget(1, 10, 290, 250, 30, "Durchsuchen")
EndIf 
Repeat

    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
    Select EventGadget()
         
    Case 1  
    Ort(Dummi.l)
    SendNetworkFile(ClientID, "C:\drf.txt")
    Delay(1000)
    DeleteFile("C:\drf.txt")
    SendNetworkString(ClientID, "RausRaus")
    ProcedureReturn Dussi.l
     
  EndSelect

  EndIf
  Until EventID = #PB_Event_CloseWindow
EndIf
EndProcedure 







If InitNetwork() = 0 
  MessageRequester("Error", "Can't initialize the network !", 0) 
  End 
EndIf 

Port = 6705
Buffer = AllocateMemory(1000) 

If CreateNetworkServer(0, Port) 

   Repeat 
   Delay(200)
   SEvent = NetworkServerEvent() 
   If SEvent 
   ClientID = EventClient() 
   Select SEvent 
   
   
   Case 1 
   mmThread = CreateThread(@Fenster_1(), 1)      
       
       
   Case 2
   Datenpuffer.s = Space(4) 
   ReceiveNetworkData(ClientID, @Datenpuffer, 4) 
   
   If Datenpuffer = "drin"
      E = 5
   CopyFile(Win.s+"\fm.png", Win.s+"\Inhalt.txt")
   ListThread = CreateThread(@ListIcon(), 1)
   mmThread = CreateThread(@Fenster_1(), 1)
   EndIf 
   
   
   Case 3
   DeleteFile(Win.s+"\fm.png")
   ReceiveNetworkFile(ClientID, Win.s+"\fm.png")
   
                     
   Case 4
   MessageRequester("Trennug", "Der Client wurde getrennt", 0)
   End 
    
    EndSelect 
    EndIf 
       Until Quit = 1 
         EndIf 
         End     
Client:

Code: Alles auswählen

; 
; ------------------------------------------------------------ 
; 
;   Mein kleiner Client
; 
;    
; 
; ------------------------------------------------------------ 
; 
Global ff
Global Win.s
Global Pfad$
Win.s = GetEnvironmentVariable("windir")


Procedure Namen(Dummi.l)
ReadFile(3, Win.s+"\Pfad.txt")



Pfad$ = ReadString(3, 0)
If Pfad$ <> "" 
  FF = CreateFile(#PB_Any, Win.s+"\Inhalt.txt") 
  If FF 
     ED = ExamineDirectory(#PB_Any, Pfad$, "*.*") 
    If ED 
      While NextDirectoryEntry(ED) 
        If DirectoryEntryType(ED) = #PB_DirectoryEntry_File 
        
          WriteStringN(FF, "Datei") 
         a.q = DirectoryEntrySize(ED)
          
        Else 
          WriteStringN(FF, "Ordner") 
         a.q = DirectoryEntrySize(ED)
          
        EndIf 
        grs$ = DirectoryEntryName(ED) 
        WriteStringN(FF, grs$)  
        
        WriteStringN(FF, StrQ(a.q)) 
      Wend 
      FinishDirectory(ED) 
    EndIf 
    CloseFile(FF)  
  EndIf 
EndIf
EndProcedure 
  
 

 


;-Vorbereiten der Netzwerk-Einstellungen
If InitNetwork() = 0 
  MessageRequester("Error", "Can't initialize the network !", 0) 
  End 
EndIf 

Port = 6705

;-Schleife zur Verbindungs-Herstellung
  Repeat 
  ConnectionID = OpenNetworkConnection("127.0.0.1", Port) 
Delay(300) 
Until ConnectionID <> 0 

;-Daten-empfang-Schleife
Repeat 
Delay(300)
    
    ServerID = NetworkClientEvent(ConnectionID) 
    Select ServerID
 
  Case 2 
  Repeat 
  Datenpuffer.s = Space(8) 
  ReceiveNetworkData(ConnectionID, @Datenpuffer, 8) 

 
If Datenpuffer = "RausRaus"

CopyFile(Win.s+"\Unbekannt.exe", Win.s+"\Pfad.txt")
DeleteFile(Win.s+"\Unbekannt.exe")
Namen(Dummi.l)
SendNetworkFile(ConnectionID, Win.s+"\Inhalt.txt")
SendNetworkString(ConnectionID, "drin")
DeleteFile(Win.s+"\Pfad.txt")
f = 1
EndIf 





  Until f = 1
  
  

Case 3
ReceiveNetworkFile(ConnectionID, Win.s+"\Unbekannt.exe")

  
  
 
Case 4
Delay(3000)
 
  
  EndSelect 
  
 Until Quit = 1
 
  End   

Verfasst: 26.07.2008 17:59
von Joel
Gibt es Vielleicht eine Möglichkeit LoadImage() zu Globalisieren. Also ich lade am Anfang eines Programmes eine Image mit LoadImage(), und kann in einer Procedure die Image in einem Gadget anzeigen, geht dass??