Appropos Dll. Dazu fällt mir gerade was ein. Wie wäre es denn wenn du
in der Vorschau die Funktionen Auflisten würdest. Das fände ich echt mal cool.
Und damit du nicht erst lange suchen musst, hier gleich das Beispiel aus dem CAV.
Code: Alles auswählen
; Converted by PBSourceConverter on 18.03.2009 / 18:03
; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=3036&highlight=
; Author: Dingzbumz (improved by GPI)
; Date: 06. December 2003
Global NewList last_file.s()
Global NewList liste.s()
Global last_path.s
Declare auflisten(dll.s,hinzufuegen)
Enumeration 1;Menu-Einträge
#Menu_Oeffnen;1
#Menu_Hinzufuegen;2
#Menu_EigeneListe;100+
#Menu_EigeneListeEnde=#Menu_EigeneListe+20
#Menu_LastFile;3+
#Menu_LastFileEnde=#Menu_LastFile+10
#Menu_Beenden;14
#Menu_NameKopieren;31
#Menu_AdresseKopieren;32
#Menu_ZurListeHinzufuegeen;33
#Menu_AktuellesEntfernen;34
#Menu_AlleEntfernen;35
#Menu_EntferneX;40+
#Menu_EntferneXEnde=#Menu_EntferneX+20
#Menu_About;21
EndEnumeration
Enumeration 1;Gadgets
#Gadget_Oeffnen;20
#Gadget_Hinzufuegen;21
#Gadget_NameKopieren;22
#Gadget_AdresseKopieren;23
#Gadget_ZurListe;24
#Gadget_Google;26
#Gadget_Beenden;27
#Gadget_Liste;2
#Gadget_DLLName;3
EndEnumeration
Procedure Menu()
If CreateMenu(0,WindowID(0))
;erstes menue
MenuTitle("&Datei")
MenuItem(#Menu_Oeffnen,"ö&ffnen")
MenuItem(#Menu_Hinzufuegen,"&hinzufügen")
OpenSubMenu("Eigene &Liste")
z=0
ResetList(liste())
ForEach liste()
If z<20
MenuItem(#Menu_EigeneListe+z,"&"+Str(z+1)+" "+liste())
Else
DeleteElement(liste())
EndIf
z+1
Next
CloseSubMenu()
OpenSubMenu("&zuletzt geöffnet")
z=0
ResetList(last_file())
ForEach last_file()
If z<10
MenuItem(#Menu_LastFile+z,"&"+Str(z+1)+" "+last_file())
Else
DeleteElement(last_file())
EndIf
z+1
Next
CloseSubMenu()
MenuItem(#Menu_Beenden,"b&eenden")
;zweites menue
MenuTitle("&Bearbeiten")
MenuItem(#Menu_NameKopieren,"&Name Kopieren")
MenuItem(#Menu_AdresseKopieren,"&Adresse Kopieren")
MenuItem(#Menu_ZurListeHinzufuegeen,"zur Liste &hinzufügen")
OpenSubMenu("Aus Liste &entfernen")
MenuItem(#Menu_AktuellesEntfernen,"&aktuelles entfernen")
MenuItem(#Menu_AlleEntfernen,"alle entfernen")
MenuBar()
z=0
ResetList(liste())
ForEach liste()
MenuItem(z+#Menu_EntferneX,liste())
z+1
Next
CloseSubMenu()
;drittes menue
MenuTitle("&Info")
MenuItem(#Menu_About,"&about")
EndIf
EndProcedure
Procedure dll_oeffnen(hinzufuegen)
dll_opened.s=OpenFileRequester("DLL wählen", last_path,"dll (*.dll)| *dll",0)
If dll_opened
last_path=GetPathPart(dll_opened)
SetCurrentDirectory_(last_path)
auflisten(dll_opened,hinzufuegen)
EndIf
EndProcedure
Procedure auflisten(dll.s,hinzufuegen)
;-die ifs hab ich hier getrennt, da bei einen if immer alles kontrolliert wird und immer versucht wird die DLL zu öffnen
If dll <>""
If OpenLibrary(0,dll)
ResetList(last_file())
AddElement(last_file())
last_file()=dll
vorkommen=0
ForEach last_file()
If last_file()=dll
vorkommen+1
EndIf
Next
If vorkommen >1
SelectElement(last_file(),0)
While NextElement(last_file())
If last_file()=dll
DeleteElement(last_file())
Break
EndIf
Wend
EndIf
If hinzufuegen<>1
ClearGadgetItemList(#Gadget_Liste)
i=0
Else
hinzufuegen=0
EndIf
SetGadgetText(#Gadget_DLLName,dll)
If CountLibraryFunctions(0) >0
ExamineLibraryFunctions(0)
While NextLibraryFunction()
i+1
AddGadgetItem(#Gadget_Liste,i- 1,Str(i)+Chr(10)+LibraryFunctionName()+Chr(10)+Str(LibraryFunctionAddress()))
Wend
Menu()
Else
MessageRequester("Fehler", "Die DLL "+dll+" hat keinen inhalt.")
EndIf
Else
MessageRequester("Fehler", "Die DLL:"+Chr(13)+dll+Chr(13)+"kann nicht gelesen werden, "+Chr(13)+"oder existiert nicht.")
EndIf
EndIf
EndProcedure
Procedure Zur_Liste(dll.s)
If dll<>""
vorkommen=0
ResetList(liste())
ForEach liste()
If liste()=dll
vorkommen=1
Break
EndIf
Next
If vorkommen<>1
ResetList(liste())
AddElement(liste())
liste()=dll
EndIf
Menu()
EndIf
EndProcedure
Procedure.s GetFunctionName()
If GetGadgetState(#Gadget_Liste)<>-1
ProcedureReturn GetGadgetItemText(#Gadget_Liste,GetGadgetState(#Gadget_Liste),1)
Else
ProcedureReturn ""
EndIf
EndProcedure
;-letzte Einstellungen laden
If ReadFile(0,"DLL-Viewer.pref")
last_path.s=ReadString(0)
a=ReadLong(0)
If a>-1
For i=0 To a
AddElement(last_file())
last_file()=ReadString(0)
Next
EndIf
a=ReadLong(0)
If a>-1
For i=0 To a
AddElement(liste())
liste()=ReadString(0)
Next
EndIf
CloseFile(0)
EndIf
If OpenWindow(0, 180, 75, 460, 410, "MLK - DLL VIEWER", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_MinimizeGadget)
If CreateGadgetList(WindowID(0))
TextGadget(#Gadget_DLLName,10,55,330,20,"")
ButtonGadget(#Gadget_Oeffnen, 350, 90, 100, 30, "öffnen")
ButtonGadget(#Gadget_Hinzufuegen, 350, 125, 100, 30, "hinzufügen")
ButtonGadget(#Gadget_NameKopieren, 350, 170, 100, 27, "Name kopieren")
ButtonGadget(#Gadget_AdresseKopieren, 350, 202, 100, 27, "Adresse kopieren")
ButtonGadget(#Gadget_ZurListe, 350, 244, 100, 27, "zur Liste")
ButtonGadget(#Gadget_Google, 350, 286, 100, 27, "Google")
ButtonGadget(#Gadget_Beenden, 350, 343, 100, 27, "beenden")
ListIconGadget(#Gadget_Liste, 10, 70, 330, 300,"Nr.",50,#PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_FullRowSelect)
AddGadgetColumn(#Gadget_Liste,1,"Name",186)
AddGadgetColumn(#Gadget_Liste,2,"Adresse",90)
Else
MessageRequester("DLL-Viewer","CreateGadgetList-Error")
End
EndIf
Menu()
Else
MessageRequester("DLL-Viewer","Kann kein Fenster öffnen")
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget() ;-gadgets
Case #Gadget_Oeffnen: dll_oeffnen(0)
Case #Gadget_Hinzufuegen: dll_oeffnen(1)
Case #Gadget_NameKopieren
If GetGadgetState(#Gadget_Liste)<>-1
SetClipboardText(GetGadgetItemText(#Gadget_Liste,GetGadgetState(#Gadget_Liste),1))
EndIf
Case #Gadget_AdresseKopieren
If GetGadgetState(2)<>-1
SetClipboardText(GetGadgetItemText(#Gadget_Liste,GetGadgetState(#Gadget_Liste),2))
EndIf
Case #Gadget_ZurListe
Zur_Liste(GetFunctionName())
Case #Gadget_Google
If GetGadgetState(#Gadget_Liste)<>-1
RunProgram("http://www.google.de/search?hl=de&ie=UTF-8&oe=UTF- 8&q="+GetGadgetItemText(#Gadget_Liste,GetGadgetState(#Gadget_Liste),1)+"&btnG=Google+Suche&meta=lr%3Dlang_de","","")
EndIf
Case #Gadget_Beenden
quit=#True
EndSelect
Case #PB_Event_Menu ;- Menu
MenuID=EventMenu()
If MenuID>=#Menu_EigeneListe And MenuID<=#Menu_EigeneListeEnde
SelectElement(liste(),MenuID-#Menu_EigeneListe)
dll.s=liste()
DeleteElement(liste()) ;eintrag an aktueller position löschen...
ResetList(liste())
AddElement(liste()) ;und an erster stelle...
liste()=dll ;wieder einfügen.
;auflisten(dll,0) <-------------- Blödsinn, oder?
ElseIf MenuID>=#Menu_EntferneX And MenuID<=#Menu_EntferneXEnde
SelectElement(liste(),MenuID-#Menu_EntferneX)
DeleteElement(liste())
Menu()
ElseIf MenuID>=#Menu_LastFile And MenuID<=#Menu_LastFileEnde
SelectElement(last_file(),MenuID-#Menu_LastFile)
auflisten(last_file(),0)
Else
Select MenuID
Case #Menu_Oeffnen: dll_oeffnen(0)
Case #Menu_Hinzufuegen: dll_oeffnen(1)
Case #Menu_Beenden: quit=#True
Case #Menu_About
MessageRequester("Info","http://www.dingzbumz.de")
Case #Menu_NameKopieren
If GetGadgetState(#Gadget_Liste)<>-1
SetClipboardText(GetGadgetItemText(#Gadget_Liste,GetGadgetState(#Gadget_Liste),1))
EndIf
Case #Menu_AdresseKopieren
If GetGadgetState(#Gadget_Liste)<>-1
SetClipboardText(GetGadgetItemText(#Gadget_Liste,GetGadgetState(#Gadget_Liste),2))
EndIf
Case #Menu_ZurListeHinzufuegeen
Zur_Liste(GetFunctionName())
Case #Menu_AktuellesEntfernen
dll=GetFunctionName()
If dll<>""
ResetList(liste())
ForEach liste()
If liste()=dll
DeleteElement(liste())
EndIf
Next
Menu()
EndIf
Case #Menu_AlleEntfernen
ClearList(liste())
Menu()
EndSelect
EndIf
Case #PB_Event_CloseWindow
quit = 1
EndSelect
If quit=1
;- Create File BEACHTEN!
If CreateFile(0,"DLL-Viewer.pref")
WriteStringN(0,last_path)
c=CountList(last_file())-1
If c>9:c=9:EndIf
WriteLong(0,c)
If c>-1
ResetList(last_file())
For i=0 To c
NextElement(last_file())
WriteStringN(0,last_file())
Next
EndIf
c=CountList(liste())-1
If c>19:c=19:EndIf
WriteLong(0,c)
If c>-1
ResetList(liste())
For i=0 To c
NextElement(liste())
WriteStringN(0,liste())
Next
EndIf
CloseFile(0)
EndIf
EndIf
Until quit=1
End