Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Внизчто-то вроде ExtractFilePath(Application.ExeName) Найти похожие ветки
← →
01 (2005-06-07 00:10) [0]Как узнать путь запущенного проекта в Delphi?
Если его output в другое место нацелен (не туда где сам проект находится)
что-то вроде ExtractFilePath(Application.ExeName)
???
← →
Abessalom (2005-06-07 00:20) [1]Зачем вопрос задал? Причем тут аутпут, если у тебя есть конкретное имя файла Application.ExeName и независимая от аутпута функция ExtractFilePath? Какие там проблемы? Как написал так и делай.
← →
alex-drob (2005-06-07 00:22) [2]Ему наверно надо путь к папке в которой project.dpr лежит.
← →
01 (2005-06-07 00:23) [3]Нет. Нужно не полный путь exe знать, а полный путь проекта.
например: c:\111\Project1.dpr
поскольку если output другой, то у EXE будет путь, например:
c:\Project1.exe
как узнать путь запущеного проекта?
← →
Abessalom (2005-06-07 00:26) [4]
> alex-drob (07.06.05 00:22) [2]
А... ну тогда клавиша Win+F или просто F3
← →
Abessalom (2005-06-07 00:28) [5]))) так и есть)))
Из приложения что-ли узнать?)))
Зачем? Во время разработки, наверное, еще можно, но тут подумать надо, как это сделать.
← →
01 (2005-06-07 00:28) [6]А нужно это, поскольку путь к другим модулям зависит от пути к этому проекту. От имени его последней папки.
← →
Abessalom (2005-06-07 00:30) [7]Ну знаешь... ExtractRelativePath тебе поможет, если хочешь програмно вычислить, не используя в приложении, т.е. только для установки связей во время компиляции
← →
01 (2005-06-07 00:30) [8]
> Из приложения что-ли узнать?)))
> Зачем? Во время разработки, наверное, еще можно
Ну естественно, во время разработки..
И реакция программы будет только если приложение под отладкой..
← →
01 (2005-06-07 00:34) [9]
function ExtractRelativePath(const BaseName, DestName: string): string;
Да? а что передавать?
DescriptionCall ExtractRelativePath to convert a fully qualified path name into a relative path name. The DestName parameter specifies file name (including path) to be converted. BaseName is the fully qualified name of the base directory to which the returned path name should be relative. BaseName may or may not include a file name, but it must include the final path delimiter.
← →
Abessalom (2005-06-07 00:41) [10]Ну, например, путь к фалу проекта и путь к модулям. Будет что-то вроде ..\Modules\ если проект в папке D:\Project, а модули в папке D:\Modules. Если я тебя неправильно понимаю, постарайся объяснить подробнее, что за идея
← →
01 (2005-06-07 01:03) [11]Допустим, сборка (output) идет в "C:\111\final\"
проектов ~10. Каждый из них при компиляции бросает в "C:\111\final\config.exe".
А лежит (каждый из проектов) в
C:\111\_projects\01\config.dpr
C:\111\_projects\02\config.dpr
C:\111\_projects\03\config.dpr
библиотек "скинов" тоже ~10.
Лежат они в
C:\111\_faces\01\face.dpr
C:\111\_faces\02\face.dpr
C:\111\_faces\03\face.dpr
И бросают в "C:\111\final\face.dll".
и еще куча всего подобного..
Так вот, мне нужно, чтобы при компиляции "C:\111\_projects\02\config.dpr", например он еще скомпилил и "C:\111\_faces\02\face.dpr"
то есть, как бы собрался при запуске, в режиме отладки..
поэтому и нужны пути проектов а не exename
← →
Abessalom (2005-06-07 01:21) [12]А правой кнопкой на файле проекта в ProjectManager->BuildSooner не подходит? Правда я уже забыл есть ли в Д6 такое. Вообще, устанавливает порядок компиляции проектов в группе. В Д2005 реализовано более красиво - там есть Dependencies, т.е. проекты можно делать зависимыми от сборки других.
← →
Просто Джо © (2005-06-07 01:23) [13]
> Правда я уже забыл есть ли в Д6 такое
Есть.
← →
Abessalom (2005-06-07 01:40) [14]
> Просто Джо © (07.06.05 01:23) [13]
Прекрасно. Не знаю, зачем тогде такая постановка вопроса.
Я уже в OTA ушел, в принципе, нетрудно развить:unit uModEnum;
interface
uses Windows, Forms, Classes, ToolsAPI;
type
TModWizard = class(TNotifierObject, IOTAWizard, IOTAMenuWizard)
function GetIDString: string;
function GetName: string;
function GetState: TWizardState;
procedure Execute;
function GetMenuText: string;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterPackageWizard(TModWizard.Create);
end;
procedure TModWizard.Execute;
var
Project: IOTAProject;
PrjGrp: IOTAProjectGroup;
ModSrv: IOTAModuleServices;
Module: IOTAModule;
I: Integer;
S: string;
procedure AppendString(FileName, FormName: string);
begin
if FileName <> "" then
begin
S := S + FileName;
if FormName <> "" then
S := S + #9"{" + FormName + "}";
S := S + #13#10;
end;
end;
begin
ModSrv := BorlandIDEServices as IOTAModuleServices;
if ModSrv.ModuleCount <> 0 then
begin
for I := 0 to ModSrv.ModuleCount - 1 do
begin
Module := ModSrv.Modules[I];
if Module.QueryInterface(IOTAProjectGroup, PrjGrp) = S_OK then
Project := PrjGrp.GetActiveProject
else
AppendString(Module.FileName, "");
end;
Application.MessageBox(PChar(S), "Открытые модули ", MB_ICONINFORMATION);
if Assigned(Project) then
begin
S := "";
for I := 0 to Project.GetModuleCount - 1 do
with Project.GetModule(I) do
AppendString(FileName, FormName);
Application.MessageBox(PChar(S), "Модули активного проекта", MB_ICONINFORMATION);
end
end
else
Application.MessageBox("Нет открытых файлов", "Недоразумение!", MB_ICONERROR);
end;
function TModWizard.GetIDString: string;
begin
Result := "Modules Sample";
end;
function TModWizard.GetMenuText: string;
begin
Result := "Show Me Modules";
end;
function TModWizard.GetName: string;
begin
Result := "Modules Sample";
end;
function TModWizard.GetState: TWizardState;
begin
Result := [wsEnabled]
end;
end.
Модуль нужно включить в состав нового пакета, пакет откомпилировать и установить. В меню хелп клик на "Show Me Modules". Дорабатотать по желанию, единственный выход я пока вижу - это вызов ShellExecute для компилятора в заданной очередности. Но, имея стд. средства))) -> это через ж.))
Всем спокойной ночи
← →
Abessalom (2005-06-07 01:46) [15]Да, похоже, необязательно ShellExecute. У Project: IOTAProject есть метод Project.ProjectBuilder.BuildProject() и еще Project.ProjectBuilder.ShouldBuild - наверное, можно разрулить и так.
← →
Abessalom (2005-06-07 01:48) [16]Таким образом:
for I := 0 to ModSrv.ModuleCount - 1 do
begin
Module := ModSrv.Modules[I];
if Module.QueryInterface(IOTAProjectGroup, PrjGrp) = S_OK then begin
Project := PrjGrp.GetActiveProject;
Project.ProjectBuilder.BuildProject(cmOTABuild,False)
end
else
AppendString(Module.FileName, "");
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.051 c