Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ShellExecute


Nonamers ©   (2006-06-01 00:53:00) 

Такая проблемма, нада было сделать ссылку на файл лежащий в папке с программой, посоветовали сделать так:
1. Создал переменную dirRoot : string;
2. В OnCreate формы написал
dirRoot := ExtractFileDir(ParamStr(0));
3. Потом
ShellExecute(h27, 'open', dirRoot+'saper.doc', '', dirRoot, SW_SHOWDEFAULT);


Но проблемма в несовместимости string и PansiChar. Можно ли как-нить string переделать в PansiChar? А может есть доугое решение моей проблеммы?


evvcom   (2006-06-01 09:33:00) [1]


> F1 не могу нажать, потому что Делфи справки у меня нет

Ты где такого кастрата взял?

> строка, содержащаяся в DirRoot на конце не имеет слэша

А отладчика в твоем Delphi тоже нет? Попробуй почитать про точки останова и трассировку по шагам (F4,F7,F8)


Nonamers   (2006-06-01 08:26:00) [2]

ВСЕМ СПАСИБО !

Все получилось)) Сделал по совету Cashmare ©

ShellExecute(h27, 'open', pchar(dirRoot+'saper.doc'), '', pchar(dirRoot), SW_SHOWDEFAULT);

Раньше не получалось, потому что не подумал, что строка, содержащаяся в DirRoot на конце не имеет слэша, поэтому и не открывался файл))


Nonamers   (2006-06-01 08:12:00) [3]

To ASoft
F1 не могу нажать, потому что Делфи справки у меня нет(((

> PAnsiChar(S)


Как я понял, она преобразовывает переменную S(string) в PAnsiChar? Ну сделал я так. Написал


> Var
> PC:PAnsiChar;
> ...
> Begin
> PC:=PansiChar(dirRoot);
> ...
> ShellExecute(h27, 'open', PC+'saper.doc', '', PC, SW_SHOWDEFAULT);
>
> ...


Но он опять кричит о несовместимости PansiiChar и String (( .

А если использовать эту

function TSettingsManager.GetRootDir: string;
begin
Result := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
end;


Вылазиет ошибка - Function needs result type - .

И вообще, обязательно ее использовать, чтобы узнать корн. директорию? Можно же эту?

dirRoot := ExtractFileDir(ParamStr(0));

Сильно не ругайте, лучше обьясните))


ASoft   (2006-06-01 07:23:00) [4]

Nonamers   (01.06.06 03:32) [6]
вас, практически уже навели на путь истинный. осталось нажать F1 на этой функции...
тем не менее:
dirRoot - строковая переменная с путем к вашему файлу
пусть S будет именем файла (doc)
посылая вышеуказанной функции dirRoot вы возвращаете правильно оформленный путь к файлу.
Остается объединить результат функции и S, преобразовать в PChar и вызывать в ShellExecute.


Nonamers   (2006-06-01 03:32:00) [5]

to Kolan ©  and ЮЮ ©

Извеняйте конечно, но в Делфи я неособо то разбираюсь.
Написал я вот это -
function TSettingsManager.GetRootDir: string;
begin
Result := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
end;


Вылезла ошибка - Function needs result type -.


> ДЫк
> PAnsiChar(S)

поподробней, что такое S?


Kolan   (2006-06-01 03:19:00) [6]


> Дык мне нада использовать не string, а PAnsiChar

ДЫк
PAnsiChar(S)


ЮЮ   (2006-06-01 03:05:00) [7]

ExtractFileDir возвратит имя папки без слэша
ExtractFilePath возвратит имя пути, т.е. со слэшем


Nonamers   (2006-06-01 02:51:00) [8]

to Cashmare ©

Немного подправил, сделал так, а то ошибка вылазила

ShellExecute(h27, 'open', pchar(dirRoot+'saper.doc'), '', pchar(dirRoot), SW_SHOWDEFAULT);

Ошибка перестала вылазить, но теперь ноль реакции, жму открыть, а ему пофиг((

to Kolan ©

Дык мне нада использовать не string, а PAnsiChar


Kolan   (2006-06-01 02:28:00) [9]

function TSettingsManager.GetRootDir: string;
begin
 Result := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
end;

Пользуюсь вот такой ф-цией и не знаю бед :)
Она вернёт строку с путем к папке, в которой лежит программа...


Cashmare   (2006-06-01 02:20:00) [10]

ShellExecute(h27, 'open', pchar(dirRoot+'saper.doc'), '', dirRoot, SW_SHOWDEFAULT);

Поможет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо