Seite 1 von 1

PB- Editor schalten

Verfasst: 25.07.2012 07:10
von BSP
Hallo.
Ich möchte mit meinem Program den PB- Editor steuern.

Mein Prg macht folgendes:
Es sucht in einem auszuwählendem Prg alle Proceduren und zeigt diese an.
(XInclude's werden mit durchsucht)
Nun kann ich eine Angezeigte Proc. doppelt anklicken,
dann werden alle Aufrufe der Proc. gesucht und angezeigt.
Das geht auch durch Markieren der Proc. direkt im Prg und einfügen in ein Suchfeld.

Nun möchte ich, das beim Aklichen eines Aufrufs der PB- Editor auf die entsprechende Zeile geht und diese Anzeigt.
Ist das möglich und könnt Ihr bitte helfen?

Hier mein Program.
(Ich weis, ist noch nicht "durchgesteilt"). :roll:
Vieleicht eine Idee für eine spätere PB- Version?

Code: Alles auswählen

; Proceduren Finder

Enumeration
#hwnd
EndEnumeration
Global anzwnd=#PB_Compiler_EnumerationValue

Enumeration
  #suchbutt
  #stopbutt
  #suchealleaufrufe
  #ButtIde
  #buttneu
  #buttschliessen
EndEnumeration

#font=0

Global pfad$,datei$
Global LClick=0
Global DPLCLICKEDITOR
Global gOldEditProc

LoadFont(#font,"courier",16)

Structure incl
  datei.s
  ImPrg.s
  zeile.i
EndStructure
Global NewList ListeIncludes.incl()

Structure proc
  proc.s
  ImPrg.s
  Zeile.i
EndStructure
Global NewList ListeProc.proc()

Structure aufrufe
  gadgbox.i
  gadgedt.i
  gadgtxt.i
  aufruf.s
EndStructure
Global NewList gadgaufruf.aufrufe()

;-///// SystemProc
Procedure stop(a$)
MessageRequester("",a$)
EndProcedure

Procedure DPLCLICKEDITOR(hWnd, uMsg, wParam, lParam)
  Protected result
    Select uMsg
      Case #WM_LBUTTONDBLCLK
        LClick=#WM_LBUTTONDBLCLK
        result = 0
      Case #WM_LBUTTONUP
        LClick=#WM_LBUTTONUP
        ;result = 0
      Default
        result = CallWindowProc_(gOldEditProc, hWnd, uMsg, wParam, lParam)
    EndSelect
ProcedureReturn result
EndProcedure


Procedure.i PosX(Gadget.i)
  Protected GadgetID.i = GadgetID(Gadget), Range.CHARRANGE
  SendMessage_(GadgetID, #EM_EXGETSEL, 0, @Range)
  ProcedureReturn (Range\cpMax - (SendMessage_(GadgetID, #EM_LINEINDEX, SendMessage_(GadgetID, #EM_EXLINEFROMCHAR, 0, Range\cpMin), 0)) + 1)
EndProcedure

Procedure.i PosY(Gadget.i)
  Protected GadgetID.i = GadgetID(Gadget), Range.CHARRANGE
  SendMessage_(GadgetID, #EM_EXGETSEL, 0, @Range)
  ProcedureReturn SendMessage_(GadgetID, #EM_EXLINEFROMCHAR, 0, Range\cpMin) + 1
EndProcedure

Procedure.s DClick(gadgedt)
  a=0:ze=0
  a$=GetGadgetItemText(gadgedt,ze)
  While Not ze=PosY(gadgedt)-1
    a+Len(a$)+1 : ze+1
    a$=GetGadgetItemText(gadgedt,ze)
  Wend
  SendMessage_(GadgetID(gadgedt),#EM_SETSEL,a,a+Len(a$))
  ProcedureReturn a$
EndProcedure

Procedure AddItem(a$)
  AddGadgetItem(gadgaufruf()\gadgedt,-1,a$)
  ;SendMessage_(GadgetID(gadgaufruf()\gadgedt),#EM_LINESCROLL,#Null,GetGadgetState(gadgaufruf()\gadgedt))
  SendMessage_(GadgetID(gadgaufruf()\gadgedt),#EM_SCROLL,#SB_BOTTOM,0)
EndProcedure
;
Procedure StopEvent()
  While WindowEvent()
    If EventGadget()=#stopbutt
      stop("Abbruch")
      ok=1 :Break
    EndIf
  Wend
  ProcedureReturn ok
EndProcedure
;-
;-///// Meine Proc
Procedure Liste_Neu(proc$)
  If ListIndex(gadgaufruf())=>0
    HideGadget(gadgaufruf()\gadgbox,1)
  EndIf
  LastElement(gadgaufruf())
  AddElement(gadgaufruf())
  x=0 : w=WindowWidth(#hwnd)
  y=0 : h=WindowHeight(#hwnd)-60
  gadgbox=ContainerGadget(#PB_Any,x,y,w,h)
    gadgaufruf()\gadgbox=gadgbox
    gadgtxt=TextGadget(#PB_Any,0,0,w,22,"")
      gadgaufruf()\gadgtxt=gadgtxt
      SetGadgetFont(gadgtxt,FontID(#font))
      SetGadgetText(gadgtxt,proc$)
      gadgaufruf()\aufruf=proc$
    gadgedt=EditorGadget(#PB_Any,0,24,w,h-24,#PB_Editor_ReadOnly)
    ;gadgedt=ListViewGadget(#PB_Any,0,24,w,h-24)
      gadgaufruf()\gadgedt=gadgedt
      SetGadgetFont(gadgedt,FontID(#font))
  CloseGadgetList()
  gOldEditProc = SetWindowLongPtr_(GadgetID(gadgaufruf()\gadgedt), #GWL_WNDPROC, @DPLCLICKEDITOR())
EndProcedure

Procedure Liste_Close()
  FreeGadget(gadgaufruf()\gadgtxt)
  FreeGadget(gadgaufruf()\gadgedt)
  FreeGadget(gadgaufruf()\gadgbox)
  DeleteElement(gadgaufruf())
EndProcedure

;
Procedure Fenster()
  fl=#PB_Window_SystemMenu
  fl|#PB_Window_ScreenCentered
  ok=OpenWindow(#hwnd,0,0,800,600,"Proc- Finder",fl)
  If ok
    Liste_Neu("Proceduren")
    
    y=WindowHeight(#hwnd)-54
    ButtonGadget(#suchbutt,10,y,80,30,"Suchen")
    ButtonGadget(#stopbutt,100,y,80,30,"Stop")
    ButtonGadget(#suchealleaufrufe,200,y,200,30,"Suche alle Aufrufe")
    ButtonGadget(#ButtIde,440,y,100,30,"Öffne PB")
    ButtonGadget(#buttschliessen,560,y,100,30,"Liste Schliessen")
    ButtonGadget(#buttneu,670,y,100,30,"Datei auswahl")
  Else
    End
  EndIf
  ProcedureReturn ok
EndProcedure

Procedure Menue()
  If IsMenu(0)
  FreeMenu(0)
  EndIf
  
  CreateMenu(0,WindowID(#hwnd))
  MenuTitle("Menue")
  i=lastmenue
  ForEach gadgaufruf()
    proc$=gadgaufruf()\aufruf
    proc$=StringField(proc$,1,"(") +"("
      ; Der ProcName bis zur Klammer + die Klammer
    proc$=RemoveString(proc$," ")
      ; Eventuelle Leerzeichen entfernen
    MenuItem(i,proc$)
    i+1
  Next
EndProcedure

Procedure.s Dateiauswahl()
  titel$="Datei wählen"
  pfad$=GetCurrentDirectory()
  patt$="BureBasic |*.pb"
  Datei$=OpenFileRequester(titel$,pfad$,patt$,0)
  ProcedureReturn datei$
EndProcedure

Procedure finde_include(f)
  ClearList(ListeIncludes())
; --- Erster Eintrag ist die Hauptdatei
  AddItem("< "+UCase(GetFilePart(datei$))+" >"+#LF$)
  AddItem("Einzeldateien :"+#LF$)
  AddElement(ListeIncludes())
  ListeIncludes()\datei=datei$
; --- Nun die XIncludes suchen und eintragen
  If OpenFile(f,datei$)
    i=1
    While Not Eof(f)
      PrgZeile$=LTrim(ReadString(f))
      If Not Left(PrgZeile$,1)=";"
        suchstr$="XIncludeFile"
        a=FindString(UCase(PrgZeile$),UCase(suchstr$))
        If a; = 1
          ;Debug PrgZeile$
          b$=Mid(PrgZeile$,a+Len(suchstr$))
          b$=Trim(RemoveString(b$,Chr(34)))
          If b$
            LastElement(ListeIncludes())
            AddElement(ListeIncludes())
            If Not GetPathPart(b$)
              b$=GetPathPart(datei$)+b$
            EndIf
            ListeIncludes()\datei=b$
            ListeIncludes()\zeile=i
            ListeIncludes()\ImPrg=GetFilePart(datei$)
            b$=#TAB$+Str(ListeIncludes()\zeile)
            b$+#TAB$+GetFilePart(ListeIncludes()\datei)
            AddItem(b$)
          EndIf
        EndIf
      EndIf
      i+1
    Wend
    CloseFile(f)
    AddItem("")
  EndIf
EndProcedure

Procedure Finde_Proceduren()
  
  ;SelectElement(gadgaufruf(),0)
  ClearList(ListeProc())
  AddItem("Die Proceduren :"+#LF$)
  ForEach ListeIncludes()
    file$=ListeIncludes()\datei
    AddItem("< "+GetFilePart(ListeIncludes()\datei)+" >"+#LF$)
    ;Debug "< "+GetFilePart(ListeIncludes()\datei)+" >"
    If OpenFile(f,file$) : i=1
      While Not Eof(f)
        b$=LTrim(ReadString(f))
        suchstr$="Procedure"
        If Left(b$,Len(suchstr$))=suchstr$ And Not Mid(b$,Len(suchstr$)+1,3)="Ret"
          AddElement(ListeProc())
          ListeProc()\proc=b$
          ListeProc()\zeile=i
          ListeProc()\Imprg=GetFilePart(file$)
          b$=#TAB$+Str(ListeProc()\zeile)
          b$+#TAB$+ListeProc()\proc
          AddItem(b$)
        EndIf
        i+1
        If StopEvent() : abbruch=1 : Break : EndIf
      Wend
      CloseFile(f)
    EndIf
    If abbruch : Break : EndIf
    AddItem("")
  Next

EndProcedure
;-

Procedure Is_ProcStart(satz$)
  If Left(satz$,10)="Procedure " Or Left(satz$,10)="Procedure."
    ProcedureReturn 1
  EndIf
  ProcedureReturn 0
EndProcedure

Procedure Is_ProcEnde(satz$)
  If Left(satz$,12)="EndProcedure"
    ProcedureReturn 1
  EndIf
  ProcedureReturn 0
EndProcedure


Procedure Finde_alle_aufrufe(proc$)
  
  ForEach ListeProc()
  Proc$=ListeProc()\proc
  AddItem(proc$+#LF$)
  a=FindString(proc$," ")
  proc$=LTrim(Mid(proc$,a))
  proc$=StringField(proc$,1,"(") +"("
    ; Der ProcName bis zur Klammer + die Klammer
  proc$=RemoveString(proc$," ")
    ; Eventuelle Leerzeichen entfernen
  gadgedt=gadgaufruf()\gadgedt
  
  ForEach ListeIncludes()
    file$=ListeIncludes()\datei
    Debug file$
    file=0:filealt=0
    If OpenFile(f,file$)
      i=1
      While Not Eof(f)
        prgsatz$=LTrim(ReadString(f))
        
        If Not Left(prgsatz$,1)=";"
          
          ; Erst mal prüfen, ob der Aufruf eventuell
          ; Innerhalb oder Ausserhalb einer Proc liegt.
          If Is_ProcStart(prgsatz$)
            proc=1:proc1$=Str(i)+" : "+prgsatz$
          ElseIf Is_ProcEnde(prgsatz$)
            proc=0
          EndIf
          
          If Not Is_ProcStart(prgsatz$)
            If FindString(prgsatz$,proc$)
              
              ; Erst den FileNamen
              If Not file
                AddItem(#TAB$+"< "+GetFilePart(ListeIncludes()\datei)+" >"+#LF$)
                file=1
              EndIf
              
              ; Befindet sich der Aufruf in einer Proc.,
              ; dann die Procedure mit dem Aufruf
              If proc=1 And procalt=0
                AddItem(#TAB$+#TAB$+proc1$)
                procalt=1
              EndIf
              
              ; Der Aufruf
              If Left(prgsatz$,7)="Declare"
                a$=#LF$+Str(i)+" : "+prgsatz$+#LF$
                l=Len(a$)
              Else
                If proc
                a$=Str(i)+" : "+#TAB$+prgsatz$
                l=Len(a$);+tab
                Else
                a$=Str(i)+" : "+prgsatz$
                l=Len(a$);+tab
                EndIf
              EndIf
              AddItem(#TAB$+#TAB$+a$)
              If lmax<L:lmax=L:EndIf
            EndIf
          EndIf
          
          ; Befindet sich der Aufruf in einer Proc.,
          ; dann Procedureende markieren
          If proc=0 And procalt=1
            If Is_ProcEnde(prgsatz$)
              AddItem(#TAB$+#TAB$+Str(i)+" : "+"EndProcedure")
              procalt=0
            EndIf
          EndIf
          
        EndIf
        i+1
        If StopEvent() : abbruch=1:Break  : EndIf
      Wend
      If i>imax:imax=i:EndIf
      CloseFile(f)
      If abbruch:Break 2:EndIf
      If file And Not filealt
        AddGadgetItem(gadgedt,-1,"")
        filealt=file
      EndIf
    EndIf
  
  Next
  Next
  
  ProcedureReturn abbruch
EndProcedure


Procedure Suche_gadgaufruf(proc$)

  Liste_Neu(proc$)  
  Menue()
  gadgedt=gadgaufruf()\gadgedt
  
  proc$=StringField(proc$,1,"(") +"("
    ; Der ProcName bis zur Klammer + die Klammer
  proc$=RemoveString(proc$," ")
    ; Eventuelle Leerzeichen entfernen
    
  ForEach ListeIncludes()
    file$=ListeIncludes()\datei
    file=0:filealt=0
    If OpenFile(f,file$)
      i=1
      While Not Eof(f)
        prgsatz$=LTrim(ReadString(f))
        
        If Not Left(prgsatz$,1)=";"
          
          ; Erst mal prüfen, ob der Aufruf eventuell
          ; Innerhalb oder Ausserhalb einer Proc liegt.
          If Is_ProcStart(prgsatz$)
            proc=1:proc1$=Str(i)+" : "+prgsatz$
          ElseIf Is_ProcEnde(prgsatz$)
            proc=0
          EndIf
          
          If Not Is_ProcStart(prgsatz$)
            If FindString(prgsatz$,proc$)
              ;Debug prgsatz$
              ; Erst den FileNamen
              If Not file
                AddItem("< "+GetFilePart(ListeIncludes()\datei)+" >")
                file=1
              EndIf
              
              ; Befindet sich der Aufruf in einer Proc.,
              ; dann die Procedure mit dem Aufruf
              If proc=1 And procalt=0
                AddItem(#LF$+proc1$)
                procalt=1
              EndIf
              
              ; Der Aufruf
              If Left(prgsatz$,7)="Declare"
                a$=#LF$+Str(i)+" : "+prgsatz$+#LF$
                l=Len(a$)
              Else
                If proc
                a$=Str(i)+" : "+#TAB$+prgsatz$
                l=Len(a$);+tab
                Else
                a$=Str(i)+" : "+prgsatz$
                l=Len(a$);+tab
                EndIf
              EndIf
              AddItem(a$)
              If lmax<L:lmax=L:EndIf
            EndIf
          EndIf
          
          ; Befindet sich der Aufruf in einer Proc.,
          ; dann Procedureende markieren
          If proc=0 And procalt=1
            If Is_ProcEnde(prgsatz$)
              AddItem(Str(i)+" : "+"EndProcedure"+#LF$)
              procalt=0
            EndIf
          EndIf
          
        EndIf
        i+1
        If StopEvent() : abbruch=1 : Break : EndIf
      Wend
      If i>imax:imax=i:EndIf
      CloseFile(f)
      If abbruch : Break : EndIf
      If file And Not filealt
        AddItem("")
        filealt=file
      EndIf
    EndIf
  
  Next
  If abbruch : ProcedureReturn 0 : EndIf
  
  ; nun noch die Zeilennummern formatieren
  For i=0 To CountGadgetItems(gadgedt)
    a$=GetGadgetItemText(gadgedt,i)
    a=Val(a$)
    If a
      a1$=StringField(a$,1," ")
      a2$=Mid(a$,Len(a1$)+1)
      a1$=RSet(Str(a),Len(Str(imax))," ")
      SetGadgetItemText(gadgedt,i,a1$+a2$)
    EndIf
  Next
EndProcedure


;-----

For i=0 To CountProgramParameters()
  datei$+ProgramParameter()+" "
Next : datei$=RTrim(datei$)
If FileSize(datei$)<0 : datei$="" : EndIf

Fenster()
Menue()
If Not datei$
  Dateiauswahl()
EndIf
If Not datei$ : End : EndIf

; ----- Incudes auslesen
finde_include(0)
;AddItem("")

; ----- Die Proceduren
Finde_Proceduren()

menue()

gadgedt=gadgaufruf()\gadgedt
gadgbox=gadgaufruf()\gadgbox
;Debug gadgaufruf()\gadgedt
;-=== Schleife
Repeat
event=WaitWindowEvent()
If ListIndex(gadgaufruf())>0
  DisableGadget(#buttschliessen,0)
Else
  DisableGadget(#buttschliessen,1)
EndIf
If event=#WM_CLOSE:ende=1:EndIf

If LClick 
;--> LBUTTONDBLCLK
  If LClick=#WM_LBUTTONDBLCLK
    Proc$=DClick(gadgedt)
    a=FindString(proc$,"Procedure")
    If a
      proc$=Mid(proc$,a)
      If Is_ProcStart(proc$)
        a=FindString(proc$," ")
        proc$=LTrim(Mid(proc$,a))
        HideGadget(gadgbox,1)
        Suche_gadgaufruf(proc$)
        HideGadget(gadgaufruf()\gadgbox,0)
      EndIf
    EndIf
;--> LBUTTONUP
  ElseIf LClick=#WM_LBUTTONUP
    If gadgedt=gadgaufruf()\gadgedt
      DClick(gadgedt)
    Else
      gadgedt=gadgaufruf()\gadgedt
    EndIf
  EndIf
  
  LClick=0
EndIf

Select event
Case #PB_Event_Menu
  HideGadget(gadgaufruf()\gadgbox,1)
  SelectElement(gadgaufruf(),EventMenu())
  HideGadget(gadgaufruf()\gadgbox,0)
  DClick(gadgaufruf()\gadgedt)
  gadgedt=gadgaufruf()\gadgedt
  
Case #PB_Event_Gadget
  
  Select EventGadget()
  Case gadgaufruf()\gadgedt
    If EventType()=#PB_EventType_RightButtonUp
    stop(Str(PosY(gadgaufruf()\gadgedt)-1))
    EndIf
  Case #suchbutt
    a$ = InputRequester("Suche", "Procedure", "")
    If a$
      Proc$=a$
      a=FindString(proc$,"Procedure")
      If a
        proc$=Mid(proc$,a)
          ; Aus dem InputSatz extrahiert
        proc$=StringField(proc$,2," ")
          ; Der Teil nach z.B. "Procedure.s "
      EndIf  
      proc$=StringField(proc$,1,"(") +"("
        ; Der ProcName bis zur Klammer + die Klammer
      proc$=RemoveString(proc$," ")
        ; Eventuelle Leerzeichen entfernen
      Suche_gadgaufruf(proc$)
  
    EndIf
  
  Case #suchealleaufrufe
    Liste_Neu("Alle Aufrufe")
    menue()
    Finde_alle_aufrufe(proc$)
    
;--> IDE aufrufen
  Case #ButtIde
    ze=PosY(gadgedt)-1
    a$=LTrim(GetGadgetItemText(gadgedt,ze))
    ideze=Val(a$)
    For i=ze To 0 Step -1
      a$=LTrim(GetGadgetItemText(gadgedt,i))
      If Left(a$,2)="< "
        a$=Mid(a$,3)
        a=FindString(a$,">")
        a$=Left(a$,a-2)
        ForEach ListeIncludes()
          If UCase(GetFilePart(ListeIncludes()\datei))=UCase(a$)
            a$=ListeIncludes()\datei
            RunProgram(Chr(34)+#PB_Compiler_Home+"PureBasic.exe"+Chr(34),Chr(34)+a$+Chr(34)+" /L "+Str(ideze),"")
            Break 2
          EndIf
        Next
        
      EndIf
    Next

;--> Butt Schliessen
  Case #buttschliessen
    If ListIndex(gadgaufruf())>0
      Liste_Close()
      menue()
      gadgedt=gadgaufruf()\gadgedt
      HideGadget(gadgaufruf()\gadgbox,0)
    EndIf
    
;--> Butt Neu
  Case #buttneu
    file$=Datei$
    Dateiauswahl()
    If Datei$=""
      datei$=file$
    Else
      ForEach gadgaufruf()
        Liste_Close()
      Next
      menue()
      
      Liste_Neu("Proceduren")
      Finde_Include(0)
      Finde_Proceduren()
    EndIf
  EndSelect
EndSelect
Until ende

Vielen Dank schon mal für Eure Mühe.
Gruß: Bernd

Re: PB- Editor schalten

Verfasst: 26.07.2012 01:36
von CSHW89
Sehe ich es richtig, dass du das Programm von "außen" benutzt? Damit meine ich, dass du dein Programm selbst von alleine startest, und nicht aus der IDE heraus. Wenn du das Programm als externes Werkzeug schreibst, hast du, mein ich, mehr Kontrolle über den Code und vorallem über die IDE.
In der Hilfe gibt es eine Seite "Externe Werkzeuge". Ganz unten ist eine Liste von Umgebungsvariablen aufgelistet, auf die man Zugriff hat, u.a. auch auf die Scintilla-Komponente der IDE. Vielleicht kann man damit einiges anstellen. Habs aber selbst nie ausprobiert.

lg Kevin

Re: PB- Editor schalten

Verfasst: 26.07.2012 04:49
von BSP
Hallo Kevin.
Ja, mein Prg soll von aussen starten und nebenbei mit laufen.
Ursprünglich sollte es nur dazu dienen, mir die Proceduren eines Prgs und deren Aufrufe- Orte anzuzeigen,
damit ich das in ein Textprg kopieren dann auszudrucken kann.
So nebenbei hat mir das Prg sogar geholfen, einen Fehler in meinem Hauptprojekt aufzuspüren.
Und so kam mir dann die Idee, es wäre doch schön, wenn ich mit einem doppelclick auch auf die entsprechende Prgzeile in der Ide springen kann.
Nun habe ich mal folgendes versucht:

Code: Alles auswählen

a$="C:\Mein Programmpfad\procfinder\procfinder.pb"
RunProgram(a$,"/L 13","")
Die Ide öffnet die Datei auch, aber der Sprung in die Zeile misslingt.
Hat jemannd einen Rat, wie ich das richtig mache?
Gruß & Dank
Bernd

Re: PB- Editor schalten

Verfasst: 26.07.2012 07:34
von RSBasic
@BSP
Du kannst beim Aufrufen einer Datei keine Parameter mitschicken. Du musst schon die Anwendung starten mit deinen Parametern:

Code: Alles auswählen

RunProgram("C:\Program Files (x86)\PureBasic 4.60\PureBasic.exe", Chr(34) + "C:\Mein Programmpfad\procfinder\procfinder.pb" + Chr(34) + " /L 13","")
Den Pfad zur Executable-Datei von PB musst du natürlich vorher anpassen.

Re: PB- Editor schalten

Verfasst: 26.07.2012 08:29
von BSP
Hallo RSBasic.
Vielen Dank.
Ich war bei meinen Versuchen also schon ein paar mal nahe dran.
Nun habe ich die ganze Zeit im Forum rumgesucht
und tja, schulterzuck,
da bin ich auf den typischen "Anfängerfehler" mit den doppelten tüdelchen ,chr(34), herein gefallen.
chr(34)+ "Satz" +chr(34) ; tüdelchen vor tüdelchen und nach tüdelchen
da muss man erst mal drauf kommen.

Danke nochmals. Nun funktionierts.
Gruß: Bernd

Re: PB- Editor schalten

Verfasst: 29.07.2012 07:16
von BSP
Hallo.
Ich habe mein Progrämchen nun verändert und oben neu eingestellt.
Nun kann man das Prg als Externes- Werzeug einsetzen,
beim Aufruf in der IDE öffnet das Prg dann die Aktuelle Datei in der IDE und liest die Proceduren daraus aus.

Die Funktionen:
Aus einer Datei alle XIncludefiles auflisten

Aus dem Projekt alle Proceduren auflisten.

Ein Klick auf eine Zeile markiert diese,
dann ein Klick auf den Button < Öffne PB >
und schwups, wird die entsprechende Zeile in der IDE angezeigt.

Ein doppelklick auf eine Procedure öffnet eine neue Liste und zeigt alle dazugehörigen Aufrufe an.

Ein Klick auf den Button < Suche alle Aufrufe >
öffnet ebenfalls eine neue Liste,
durchläuft alle Proceduren und Listet deren Aufrufe auf.

In der IDE eine Procedure kopieren, klick auf meinen Butten < Suchen >
dann in das Eingabefeld die kopierte Procedure einfügen,
öffnet eine neue Liste und listet die Aufrufe auf.

Wie es sich gehört kann man nun auch eine Liste wieder löschen oder eine neue Datei aufrufen.

Zukünftige Ideen von mir:
Einen Procedurenamen + deren Aufrufe ändern,
eine Procedure verschieben.

Noch viel später soll das auch mit Constanten + Globalen variablen machbar werden.

Noch eine Bitte an die Spezis:
Bitte schaut Euch mal die Procedure
Procedure DPLCLICKEDITOR(hWnd, uMsg, wParam, lParam)
in Zeile 53
und deren Aufruf
gOldEditProc = SetWindowLongPtr_(GadgetID(gadgaufruf()\gadgedt), #GWL_WNDPROC, @DPLCLICKEDITOR())
in Zeile 129 an.
Frage: Mache ich das so richtig
und wenn ich eine Liste Lösche, muss ich da wegen dem API- aufruf etwas beachten, eventuell mit einen weiteren API etwas wieder zurücksetzen?
Ich hoffe, Ihr versteht meine Frage.

Vielen Dank schon mal für Eure Mühe:
Gruß: Bernd