Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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;

Да? а что передавать?

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: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.042 c
14-1117606571
NightStranger
2005-06-01 10:16
2005.06.29
Следующий вопрос на засыпку


3-1116491433
MEV
2005-05-19 12:30
2005.06.29
ADOCommand &amp; скрипт


1-1118127516
Andy BitOff
2005-06-07 10:58
2005.06.29
Ошибка: "Cannot open file ..."


8-1109699665
Руслана
2005-03-01 20:54
2005.06.29
Где можно почитать о создании собственного кодека (аудио)


9-1111583096
StrangeMan
2005-03-23 16:04
2005.06.29
Игровые конструкторы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский