Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 346

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Подскажите пожалуйста !
При запуске приложение в событии OnActivate нужно программно определить путь к каталогу Program Files

Kyran29 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Kyran29 (статус: Посетитель)
Вопрос отправлен: 30 октября 2009, 22:40
Состояние вопроса: открыт, ответов: 3.

Ответ #1. Отвечает эксперт: Amidamaru

Здравствуйте, Kyran29!
Нужно добавить в uses юнит shlobj и использовать например функцию из приложения.
FloderId - CSIDL_PROGRAM_FILES

Приложение:
  1. function GetShellFloderPath(FloderId:integer):string;
  2. var ss1:array[0..MAX_PATH] of WideChar;
  3. begin
  4. SHGetFolderPathW(0,FloderId,nil,0,ss1);
  5. Result:=ss1;
  6. end;


Ответ отправил: Amidamaru (статус: 4-ый класс)
Время отправки: 30 октября 2009, 22:57
Оценка за ответ: -1

Ответ #2. Отвечает эксперт: Паровоз

Здравствуйте, Kyran29!

uses SHFolder;
const
  SHGFP_TYPE_CURRENT = 0;
var
  s:String;
begin
  SetLength(s,MAX_PATH);
  SHGetFolderPath(0,CSIDL_PROGRAM_FILES,0,SHGFP_TYPE_CURRENT,PChar(s));
  Edit1.Text:=s;
end;

Ответ отправил: Паровоз (статус: 10-ый класс)
Время отправки: 30 октября 2009, 23:45
Оценка за ответ: 5

Ответ #3. Отвечает эксперт: Жикльор

Здравствуйте, Kyran29!

На самом деле все очень просто. Не нужно использовать сверху указанные варианты (ну это у кого какой вкус). Как по мне то можно просто обратится в реестр за этой информацией. Значение которое мы ищем лежит в HKLM\Software\Microsoft\Windows\CurrentVersion. Для этого мы пишем функцию которая узнает путь к ПрограмФайлес и вернет ее в результате:

function GetProgramFilesDir: string;
 var
   reg: TRegistry;
 begin
   reg := TRegistry.Create;
   try
     reg.RootKey := HKEY_LOCAL_MACHINE;
     reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion', False);
     Result := reg.ReadString('ProgramFilesDir');
   finally
     reg.Free;
   end;
 end;

А теперь просто используем ее в вашем обработчике OnActivate:

procedure TForm1.OnActivate(Sender: TObject);
var
ProgramFiles: string;
begin
ProgramFiles:=GetProgramFilesDir;
ShowMessage(ProgramFiles);
end;

З.Ы. Только не забудьте в раздел uses добавить модуль Registry.

Ответ отправил: Жикльор (статус: 5-ый класс)
Время отправки: 6 ноября 2009, 11:53


Мини-форум вопроса

Всего сообщений: 12; последнее сообщение — 3 ноября 2009, 12:38; участников в обсуждении: 6.
Kyran29

Kyran29 (статус: Посетитель), 30 октября 2009, 23:47 [#1]:

Amidamaru
Delphi 7 выдает ошибку.
[Error] Unit1.pas(27): Undeclared identifier: 'SHGetFolderPathW'
Kyran29

Kyran29 (статус: Посетитель), 30 октября 2009, 23:56 [#2]:

Большое спасибо Паровоз !!!
Вы меня опять выручили !!!
Amidamaru

Amidamaru (статус: 4-ый класс), 31 октября 2009, 10:14 [#3]:

Изза одного символа ставить -1 ? Ктомуже у меня в 2006й делфи всё работает.
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Паровоз

Паровоз (статус: 10-ый класс), 31 октября 2009, 12:34 [#4]:

Дело не в одном символе. Используемая функция находится не в shlobj,а в в другом модуле - SHFolder (в том числе и для Delphi 2006.)
Паровоз

Паровоз (статус: 10-ый класс), 31 октября 2009, 12:40 [#5]:

To Kyran29:

"-1" - это, конечно, слишком сурово.
min@y™

min@y™ (статус: Доктор наук), 31 октября 2009, 13:04 [#6]:

Цитата (Kyran29):

При запуске приложение в событии OnActivate нужно программно определить путь к каталогу Program Files


А зачем в OnActivate? Думаешь, что во время работы твоей програнны путь к Program files может измениться?
Может всё-таки достаточно в OnCreate?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Kyran29

Kyran29 (статус: Посетитель), 31 октября 2009, 14:02 [#7]:

min@y™ добрый день !

А зачем в OnActivate? Думаешь, что во время работы твоей програнны путь к Program files может измениться?


Путь к Program files думою не изменится.
Можно OnCreate, можно OnPaint.
Но мне надо OnActivate.
min@y™

min@y™ (статус: Доктор наук), 31 октября 2009, 14:08 [#8]:

Цитата (Kyran29):

Но мне надо OnActivate.


ЗАЧЕМ??!!11
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Kyran29

Kyran29 (статус: Посетитель), 31 октября 2009, 17:14 [#9]:

min@y™
Надо!!!
Егор

Егор (статус: 10-ый класс), 1 ноября 2009, 21:36 [#10]:

оценка -1 - это слишком

и убирать сообщение магистра :) тож не надо. пусть будет
а то так и до аватарки дело дойдёт :)
он магистр, ему можно :D
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Паровоз

Паровоз (статус: 10-ый класс), 1 ноября 2009, 23:18 [#11]:

Аватарку тоже надо убрать. Как раз для магистра это недопустимо.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 3 ноября 2009, 12:38 [#12]:

Цитата (Егор):

он магистр, ему можно :D

Правила едины для всех и нецензура не разрешена никому, независимо от статуса. Учимся пользоваться личными сообщениями.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:40
Выполнено за 0.04 сек.