mich hat schon immer gestört, dass man nicht auf einen Blick sehen kann, in welcher Procedure man sich befindet.
Aus diesem Grund hier folgender Code, den man zu einem PB-Tool kompilieren kann. Wird dieses Tool aufgerufen (ich habe es mir auf das Tastaturkürzel Shift + Ctrl + P gelegt), so wird die der Name der aktuellen Procedure mittels MessageRequester ausgegeben:

Bitte beachten: In den Werkzeug-Einstellungen als Argument "%TEMPFILE" eintragen
Code: Alles auswählen
; GetProcedureName
; #################################################################
; In den Werkzeug-Einstellungen als Argumente "%TEMPFILE" eintragen
; #################################################################
EnableExplicit
Procedure.s RemoveLeadingWhitespaceFromString(InString.s)
While Left(InString, 1) = Chr(32) Or Left(InString, 1) = Chr(9)
InString = LTrim(InString, Chr(32))
InString = LTrim(InString, Chr(9))
Wend
ProcedureReturn InString
EndProcedure
Procedure.s GetScintillaText()
; thx to sicro (http://www.purebasic.fr/german/viewtopic.php?p=324916#p324916)
Protected ReturnValue.s
Protected FilePath.s
Protected File, BOM
FilePath = ProgramParameter(0) ; %TEMPFILE (Datei existiert auch, wenn Code nicht gespeichert ist)
File = ReadFile(#PB_Any, FilePath, #PB_File_SharedRead)
If IsFile(File)
BOM = ReadStringFormat(File) ; BOM überspringen, wenn vorhanden
ReturnValue = ReadString(File, #PB_File_IgnoreEOL | BOM)
CloseFile(File)
EndIf
ProcedureReturn ReturnValue
EndProcedure
Define ScintillaText.s
Define CursorLine = Val(StringField(GetEnvironmentVariable("PB_TOOL_Cursor"), 1, "x"))
Define Line.s
Define LineCounter
ScintillaText = GetScintillaText()
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
#LineFeed = #CRLF$
CompilerDefault
#LineFeed = #LF$
CompilerEndSelect
If ScintillaText <> ""
For LineCounter = CursorLine - 1 To 1 Step - 1
Line = RemoveLeadingWhitespaceFromString(StringField(ScintillaText, LineCounter, #LineFeed))
If Left(LCase(Line), Len("endprocedure")) = "endprocedure"
Break
EndIf
If Left(LCase(Line), Len("procedure")) = "procedure"
If Left(LCase(Line), Len("procedurereturn")) <> "procedurereturn"
MessageRequester("You are here:", Line)
Break
EndIf
EndIf
Next
EndIf
Edit: Verbesserungsvorschläge von Sicro implementiert. Danke dafür!