Hosted by uCoz
Имя катклога, из которого запустили приложение (полное имя исполняемого модуля с путем)

Автор: Анатолий Московский (avm@trais.com.ua)
    
    Имя каталога определяется так:

	string  ls_AppPath
	string  ls_FullPath, ls_RevPath
	int     li_Pos, li_Pos2
	// получение полного имени
	ClassDefinition lcd
	n_dummy_obj u
	If IsNull(u) Then u = Create n_dummy_obj // если не autoinstantiated
	lcd = u.ClassDefinition
	ls_Fullpath = lcd.LibraryName
	
	// выделение имени каталога
	ls_RevPath = Reverse(ls_FullPath)
	li_pos = Pos( ls_RevPath, "\")
	li_pos2 = Pos(ls_RevPath, "/")
	If li_pos2 > 0 and li_pos > li_pos2 Then
	    li_Pos = li_Pos2
	End If
	If li_pos > 0 Then
	     ls_AppPath = Left(ls_FullPath, Len(ls_FullPath) - li_pos)
	Else
	     ls_AppPath = "."
	End IF
	return ls_AppPath
	
	
	Вместо "n_dummy_obj" можно подставить любой(почти)  класс, который
	находится в исполняемом модуле. Для того чтобы при компиляции объект
	поместился в EXE надо в проекте снять галку в поле "DLL/PBD" напротив
	библиотеки с этим объектом.
	Хотя если все библиотеки находятся в одном каталоге, можно не заботиться об
	этом.
	
	Есть еще и другой вариант (win32):
	Описываешь external function:
	function long GetModuleFileNameA (long module, ref string path, long length)
	library "kernel32.dll"
	
	А потом вызываешь ее:
	ls_Fullpath = Space (255)
	li_Ret = GetModuleFileNameA (Handle(GetApplication()), ls_FullPath, 255)
	Здесь мы имеем полный путь к EXE. Далее разбор пути как показано выше.
	
	Хотя мне больше нравится первый вариант.