![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
что-то вроде ExtractFilePath(Application.ExeName) [D6, WinXP]
01 © (2005-06-07 00:10:00)Как узнать путь запущенного проекта в Delphi?
Если его output в другое место нацелен (не туда где сам проект находится)
что-то вроде ExtractFilePath(Application.ExeName)
???
Abessalom (2005-06-07 01:48:00) [1]Таким образом:
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;
Abessalom (2005-06-07 01:46:00) [2]Да, похоже, необязательно ShellExecute. У Project: IOTAProject есть метод Project.ProjectBuilder.BuildProject() и еще Project.ProjectBuilder.ShouldBuild - наверное, можно разрулить и так.
Abessalom (2005-06-07 01:40:00) [3]
> Просто Джо © (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 для компилятора в заданной очередности. Но, имея стд. средства))) -> это через ж.))
Всем спокойной ночи
Просто Джо (2005-06-07 01:23:00) [4]
> Правда я уже забыл есть ли в Д6 такое
Есть.
Abessalom (2005-06-07 01:21:00) [5]А правой кнопкой на файле проекта в ProjectManager->BuildSooner не подходит? Правда я уже забыл есть ли в Д6 такое. Вообще, устанавливает порядок компиляции проектов в группе. В Д2005 реализовано более красиво - там есть Dependencies, т.е. проекты можно делать зависимыми от сборки других.
01 (2005-06-07 01:03:00) [6]Допустим, сборка (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 00:41:00) [7]Ну, например, путь к фалу проекта и путь к модулям. Будет что-то вроде ..\Modules\ если проект в папке D:\Project, а модули в папке D:\Modules. Если я тебя неправильно понимаю, постарайся объяснить подробнее, что за идея
01 (2005-06-07 00:34:00) [8]
function ExtractRelativePath(const BaseName, DestName: string): string;
Да? а что передавать?
Description
Call 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:30:00) [9]Ну знаешь... ExtractRelativePath тебе поможет, если хочешь програмно вычислить, не используя в приложении, т.е. только для установки связей во время компиляции
01 (2005-06-07 00:30:00) [10]
> Из приложения что-ли узнать?)))
> Зачем? Во время разработки, наверное, еще можно
Ну естественно, во время разработки..
И реакция программы будет только если приложение под отладкой..
Abessalom (2005-06-07 00:28:00) [11]))) так и есть)))
Из приложения что-ли узнать?)))
Зачем? Во время разработки, наверное, еще можно, но тут подумать надо, как это сделать.
01 (2005-06-07 00:28:00) [12]А нужно это, поскольку путь к другим модулям зависит от пути к этому проекту. От имени его последней папки.
Abessalom (2005-06-07 00:26:00) [13]
> alex-drob (07.06.05 00:22) [2]
А... ну тогда клавиша Win+F или просто F3
01 (2005-06-07 00:23:00) [14]Нет. Нужно не полный путь exe знать, а полный путь проекта.
например: c:\111\Project1.dpr
поскольку если output другой, то у EXE будет путь, например:
c:\Project1.exe
как узнать путь запущеного проекта?
alex-drob (2005-06-07 00:22:00) [15]Ему наверно надо путь к папке в которой project.dpr лежит.
Abessalom (2005-06-07 00:20:00) [16]Зачем вопрос задал? Причем тут аутпут, если у тебя есть конкретное имя файла Application.ExeName и независимая от аутпута функция ExtractFilePath? Какие там проблемы? Как написал так и делай.