Hallo,
in meinem Aktuellen 3D Project bin ich so wie immer dazu übergegangen. Die verschiedenen Abschnitte in einzelne .pbi Files auszulagern.
Allerdings stelle ich fest, das es etwas unübersichtlich wird.
Wenn Ihr zum Beispiel die Deklaration einer Variablen sucht. Also der Ort wo das gemacht wurde. Wie behelft Ihr euch mit dem suchen?
Kann man im Editor sowas wie HyperLinks einfügen. Wo der Editor dann hinspringt wenn man draufklickt?
Und wenn es das noch nicht gibt ..... könnte ich das irgendwie in den Editor einbauen?
Gruss TFT
3.4.2021
Dabei ist dieses kleine SuchTool entstanden. Und da ich es selber benutze ....... gibt es Updates. Da sich doch der eine oder andere Fehler ergeben hat.
Code: Alles auswählen
;
;
;
; PBTool 1.0 By TFT | Temuçin SourceMagic | Bahnhofstr.15 | CH-8447 Dachsen/Zürich/Schweiz
;
; PBForum Verion
;
; Letztes UpDate 3.4.2021 : 8:00
;
; Das programm arbeitet simultan. Es nimmt den Text aus dem Clipboard und sucht in allen .pbi Dateien
; des Projekt nach dem Text. Wo es gefunden wird gibt es eine Ausgabe mit zeilen nummer und in welcher
; Datei es sich befindet.
; Ich nutze es um zu sehen wo überall bestimmte Strings zu finden sind. Wenn ich eine variable suche oder
; widermal beim Code aufräumen bin.
; Wenn ich mal wider nicht weis wo ich eine VAraible oder einen Befehl wider überall verwende.
; Das gute daran ist. Das es unabhängig vom Editor funktioniert.
;
; Bei ctrl + C , werden nach 200 ms die Text Daten aus dem Clipboard geholt und mit ctrl + F3
; wird in allen Dateien die im ProjetzFile definiert sind danach gesucht und im DebugFenster
; einer Console ausgegeben.
;
EnableExplicit
#OutPutConsole = 1
#OutPutDebuger = 1
Define ProjektFile.s = "_Project_3dx2mesh.pbp"
;{ Consolen ausgabe & Font ändern
; Aufrufen nach öffnen der Console mit "ConsoleFont(#Null,#Null,"Lucida Console",20)"
Import "kernel32.lib"
SetCurrentConsoleFontEx.i(hConsoleOutput.i,bMaximumWindow.i,*lpConsoleCurrentFontEx)
EndImport
Structure CONSOLE_FONT_INFO_EX
cbSize.l
nFont.l
dwFontSize.COORD
FontFamily.l
FontWeight.l
FaceName.w[#LF_FACESIZE]
EndStructure
Procedure.i ConsoleFont(*Buffer,BufferSize.i,FontName.s,FontSize.i)
Protected cfiex.CONSOLE_FONT_INFO_EX
Protected res.i
Protected length.i
Protected font_resource.i
With cfiex
length = Len(FontName)
If length < #LF_FACESIZE
\cbSize = SizeOf(CONSOLE_FONT_INFO_EX)
\nFont = #Null
\dwFontSize\x = #Null
\dwFontSize\y = FontSize
\FontFamily = #FF_DONTCARE
\FontWeight = #FW_DONTCARE
If *Buffer And BufferSize
AddFontMemResourceEx_(*Buffer,BufferSize,#Null,@res)
EndIf
length << 1
CopyMemory(@FontName,@\FaceName[0],length)
ProcedureReturn SetCurrentConsoleFontEx(GetStdHandle_(#STD_OUTPUT_HANDLE),#False,@cfiex)
EndIf
ProcedureReturn #False
EndWith
EndProcedure
If #OutPutConsole = 1 : OpenConsole("OnError") : ConsoleFont(#Null,#Null,"Lucida Console",12) : EndIf
;}
Macro ER
"Error in Line ("+Str(#PB_Compiler_Line)+")"
EndMacro
Declare OutPut(text.s,arg1.s = "",modus= 0)
Declare Error(text.s,arg1.s="",arg2.s="")
Procedure Error(text.s,arg1.s="",arg2.s="")
Protected t.s = text+" arg1 = ("+arg1+")"+" arg2 = ("+arg2+")"
If #OutPutConsole = 0 : OpenConsole("OnError") : EndIf
OutPut(text)
OutPut("arg1 = ("+arg1+")")
OutPut("arg2 = ("+arg2+")")
OutPut("Enter key to exit")
Input()
CloseConsole()
End
EndProcedure
#OutPutModus_EVER = 0 ; Gibt den Text immer aus
#OutPutModus_PINT = 1 ; PrintItNewText , es wird nur dan audgegeben, wenn es ungleich des vorherigen Textes war
Procedure OutPut(text.s,arg1.s = "",modus= 0)
Static told.s
Protected p0, p1, p2, p3, ts.s
If #OutPutDebuger = 1 : Debug text : EndIf
If #OutPutConsole = 1
If arg1<>""
p0 = Len(Text)
p1 = Len(arg1)
p2 = 1
p3 = 1
p2 = FindString(text,arg1,p3,#PB_String_NoCase)
If p2 > p3
; den vorderen Teil des String ausgeben sofern es vorne einen teil gibt
ConsoleColor(7,0)
ts = Mid(text,1,p2-1)
Print(ts)
While p2 > 0
ConsoleColor(7,0)
;p2 = FindString(text,arg1,p3,#PB_String_NoCase)
If p2 > p3
ts = Mid(text,p2,p1)
ConsoleColor(14,1)
Print(ts)
ConsoleColor(7,0)
;Debug ts
EndIf
p3 = p2 + p1
p2 = FindString(text,arg1,p3,#PB_String_NoCase )
If p2 > 0
ts = Mid(text,p3,p2-p3)
ConsoleColor(7,0)
Print(ts)
EndIf
;Debug p3
Wend
ConsoleColor(7,0)
PrintN(Mid(text,p3,p0-p3+1))
Else
ConsoleColor(7,0)
PrintN("Fehler bei der Suchfunktion")
EndIf
Else
ConsoleColor(7,0)
If Modus = #OutPutModus_PINT
If told <> text
PrintN(text)
told = text
EndIf
Else
PrintN(text)
told = text
EndIf
EndIf
EndIf
EndProcedure
#MainWIndow = 0
Structure ListText
text.s
EndStructure
NewList LT.ListText()
Define result, arg1.s, arg2.s, t.s, p1, p2
;{ Load Project File Name
arg1 = GetCurrentDirectory()+ProjektFile.s
result = FileSize(arg1) : If result < 1 : Error(ER,arg1) : EndIf
result = ReadFile(0,arg1) : If result < 1 : Error(ER,arg1) : EndIf
ClearList(LT())
While Eof(0)=0
t = ReadString(0)
If FindString(t,"<file name=",1)
p1= FindString(t,"=",1)+1
p2 = FindString(t,">",1)
t = Mid(t,p1+1,p2-p1-2)
AddElement(LT())
LT()\text = t
EndIf
Wend
CloseFile(0)
;}
Define VK_LCONTROL_VK_C_SET = 0
Define VK_LCONTROL_VK_F3_SET = 0
Define Quit, Event
Define Text.s, LineCount, Aktuelles_SuchFile.s, EintragGefunden
Define st.Point
Define xold, yold, told
If OpenWindow(#MainWIndow,-220,0,200,100,"PB Tools")
Repeat
Event = WindowEvent()
While Event <> 0
Select Event
Case #PB_Event_CloseWindow
Quit = 1
Case #WM_KEYUP
Select EventwParam()
Case #ESC ; Programm beenden bei drücken der ESC Taste
Quit = 1
EndSelect
Default
EndSelect
Event = WindowEvent()
Wend
; Auf globale tasten ereignisse reagieren
If GetAsyncKeyState_(#VK_LCONTROL) <> 0
If GetAsyncKeyState_(#VK_C) <> 0
If VK_LCONTROL_VK_C_SET = 0
VK_LCONTROL_VK_C_SET = 1
Delay(200)
Text = GetClipboardText()
OutPut("Get Text from Clipboard = " + Text)
EndIf
Else
VK_LCONTROL_VK_C_SET = 0
EndIf
If GetAsyncKeyState_(#VK_F3) <> 0
If VK_LCONTROL_VK_F3_SET = 0
VK_LCONTROL_VK_F3_SET = 1
If Text <> ""
OutPut(" Suche nach einträgen für (" + Text + ")")
If FirstElement(LT())
ForEach LT()
;OutPut("Suche ("+Text+") in ("+LT()\text+")")
Aktuelles_SuchFile.s = LT()\text
EintragGefunden = 0
If ReadFile(0,GetCurrentDirectory()+LT()\text)
LineCount = 1
While Eof(0) = 0
t = ReadString(0)
LineCount = LineCount + 1
;Debug t
If FindString(t, Text)
If EintragGefunden = 0
OutPut(" Eintrag gefunden in ("+Aktuelles_SuchFile.s+")")
EndIf
EintragGefunden = 1
OutPut(" Line ("+Str(LineCount)+")("+t,text)
EndIf
Wend
CloseFile(0)
Else
OutPut("Cant Read File")
EndIf
Next
EndIf
EndIf
EndIf
Else
VK_LCONTROL_VK_F3_SET = 0
EndIf
Else
VK_LCONTROL_VK_C_SET = 0
VK_LCONTROL_VK_F3_SET = 0
EndIf
GetCursorPos_(st.POINT)
If st\x <> xold Or st\y <> yold
;Debug " Mouse Position "+Str(st\x )+"/"+Str(st\y)
xold = st\x
yold = st\y
EndIf
Delay(1)
Until Quit = 1
If #OutPutConsole = 1 : CloseConsole() : EndIf
CloseWindow(#MainWIndow)
EndIf
End