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
	
EndIfEdit: Verbesserungsvorschläge von Sicro implementiert. Danke dafür!
