|
Вопрос # 3 346/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Подскажите пожалуйста !
При запуске приложение в событии OnActivate нужно программно определить путь к каталогу Program Files
 |
Вопрос задал: Kyran29 (статус: Посетитель)
Вопрос отправлен: 30 октября 2009, 22:40
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: Amidamaru
Здравствуйте, Kyran29!
Нужно добавить в uses юнит shlobj и использовать например функцию из приложения.
FloderId - CSIDL_PROGRAM_FILES
Приложение: Переключить в обычный режим- function GetShellFloderPath(FloderId:integer):string;
- var ss1:array[0..MAX_PATH] of WideChar;
- begin
- SHGetFolderPathW(0,FloderId,nil,0,ss1);
- Result:=ss1;
- 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 (статус: Посетитель), 30 октября 2009, 23:47 [#1]:
Amidamaru
Delphi 7 выдает ошибку.
[Error] Unit1.pas(27): Undeclared identifier: 'SHGetFolderPathW'
|
|
Kyran29 (статус: Посетитель), 30 октября 2009, 23:56 [#2]:
Большое спасибо Паровоз !!!
Вы меня опять выручили !!!
|
|
Amidamaru (статус: 4-ый класс), 31 октября 2009, 10:14 [#3]:
Изза одного символа ставить -1 ? Ктомуже у меня в 2006й делфи всё работает.
|
|
Паровоз (статус: 10-ый класс), 31 октября 2009, 12:34 [#4]:
Дело не в одном символе. Используемая функция находится не в shlobj,а в в другом модуле - SHFolder (в том числе и для Delphi 2006.)
|
|
Паровоз (статус: 10-ый класс), 31 октября 2009, 12:40 [#5]:
To Kyran29:
"-1" - это, конечно, слишком сурово.
|
|
min@y™ (статус: Доктор наук), 31 октября 2009, 13:04 [#6]:
Цитата (Kyran29):
При запуске приложение в событии OnActivate нужно программно определить путь к каталогу Program Files
А зачем в OnActivate? Думаешь, что во время работы твоей програнны путь к Program files может измениться?
Может всё-таки достаточно в OnCreate?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Kyran29 (статус: Посетитель), 31 октября 2009, 14:02 [#7]:
min@y™ добрый день !
А зачем в OnActivate? Думаешь, что во время работы твоей програнны путь к Program files может измениться?
Путь к Program files думою не изменится.
Можно OnCreate, можно OnPaint.
Но мне надо OnActivate.
|
|
min@y™ (статус: Доктор наук), 31 октября 2009, 14:08 [#8]:
Цитата (Kyran29):
Но мне надо OnActivate.
ЗАЧЕМ??!!11
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Kyran29 (статус: Посетитель), 31 октября 2009, 17:14 [#9]:
min@y™
Надо!!!
|
|
Паровоз (статус: 10-ый класс), 1 ноября 2009, 23:18 [#11]:
Аватарку тоже надо убрать. Как раз для магистра это недопустимо.
|
|
Ерёмин А.А. (статус: *Администратор), 3 ноября 2009, 12:38 [#12]:
Цитата (Егор):
он магистр, ему можно 
Правила едины для всех и нецензура не разрешена никому, независимо от статуса. Учимся пользоваться личными сообщениями.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|