Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] WPI (http://forum.oszone.net/showthread.php?t=225940)

NickDang 22-01-2012 17:06 1841905

WPI
 
Я делаю что-то похожее на WPI, только на много проще. при нажатии у меня открывается папка с данной программой ну или сама программа. так вот я хочу этот так называемый WPI записать на диск вместе с файлами. Но там в кнопках speedbuton я указал путь.
ShellExecute(Self.Handle,'open','D:\My Files.1.0\Soft\Corel.Painter.X.v10.0.046.Cracked-ARN',nil,nil,SW_SHOWNORMAL);
Как мне сделать чтобы буква совпадала всегда с диском?

PhilB 22-01-2012 17:25 1841915

Необходимо получить имя диска, с которого запущено приложение.
Информация о полном пути хранится в свойстве Application.ExeName.
Диск, с которого запущено приложение:
Код:

driveName = ExtractFileDrive(Application.ExeName);
В driveName будет имя диска.

NickDang 22-01-2012 17:28 1841919

И будет работать не зависимо от того будь это J или D диск?

PhilB 22-01-2012 18:28 1841973

Ну разумеется нужно подставить driveName вместо D.
Код:

ShellExecute(Self.Handle,'open',driveName + '\My Files.1.0\Soft\Corel.Painter.X.v10.0.046.Cracked-ARN',nil,nil,SW_SHOWNORMAL);

NickDang 22-01-2012 18:44 1841984

итак, ещё раз. Можете объяснить что куда вписывать и как подробнее. извините я в Delphi новичок)

PhilB 22-01-2012 21:55 1842174

Ваш код
Код:

ShellExecute(Self.Handle,'open','D:\My Files.1.0\Soft\Corel.Painter.X.v10.0.046.Cracked-ARN',nil,nil,SW_SHOWNORMAL);
следует заменить на
Код:

driveName = ExtractFileDrive(Application.ExeName);
ShellExecute(Self.Handle,'open',driveName + '\My Files.1.0\Soft\Corel.Painter.X.v10.0.046.Cracked-ARN',nil,nil,SW_SHOWNORMAL);

Не забудьте описать переменную driveName как string.

Я вам могу только подсказать идею, я на делфи на писал давно.
Если что не так, думаю, форумчане подправят.
Если снова не понятно, прикрепляйте исходник, будем смотреть дальше.

Skype не пользую.

NickDang 22-01-2012 22:07 1842191

Добавляю исходник, извините что ссылка на другой сайт, т. к. исходник выше 650 кб нельзя выложить, а у меня он на 1 мб. наверно из-за картинок.
вот: delphi.zip

PhilB 22-01-2012 22:25 1842222

В файле Unit1.pas
procedure TForm1.Button1Click(Sender: TObject); переписана так:
Код:

procedure TForm1.Button1Click(Sender: TObject);
var driveName:string;
begin
driveName := ExtractFileDrive(Application.ExeName);
ShellExecute(Self.Handle,'open',driveName + '\',nil,nil,SW_SHOWNORMAL);
end;

Должно работать, хотя не компилировал - нечем.
Остальные - по аналогии.

NickDang 23-01-2012 17:58 1842779

не работает. ошибка при запуске. может есть что то проще? можно ли сделать чтобы при загрузке диск менял букву наприм на K?

LilLoco 23-01-2012 18:31 1842796

Цитата:

Цитата NickDang
ошибка при запуске »

Запуск вашей программы? Если да, то как событие нажатия клавиши может на это влиять? Ошибка в чем то другом... Желательно указать ошибку, тут не гадалки.
Цитата:

Цитата NickDang
может есть что то проще? »

Цитата:

Цитата NickDang
загрузке диск менял букву наприм на K? »

И действительно, проще чем получить путь до программы :)

NickDang 23-01-2012 18:44 1842808

Вложений: 1
Ладно, пробую ещё раз. Захожу в Unit1.pas. меняю

procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Self.Handle,'open','D:\',nil,nil,SW_SHOWNORMAL);

end;


на

procedure TForm1.Button1Click(Sender: TObject);
var driveName:string;
begin
driveName := ExtractFileDrive(Application.ExeName);
ShellExecute(Self.Handle,'open',driveName + '\',nil,nil,SW_SHOWNORMAL);
end;


закрываю, сохраняю. Теперь запускаю Project2.dpr. Нажимаю выполнить (f9). Что произошло, смотрим на рисунке "Безымянный".

LilLoco 23-01-2012 18:57 1842815

Точно не помню, но попробуйте так :
Код:

var driveName:string;
 begin
 driveName := ExtractFileDrive(Application.ExeName);
 ShellExecute(Self.Handle,'open',PChar(driveName + '\'),nil,nil,SW_SHOWNORMAL);
 end;


NickDang 23-01-2012 19:05 1842820

Во, запустилось, только открыло диск C:\

LilLoco 23-01-2012 19:10 1842826

NickDang, Если у вас программа находится на диске C:\, то все правильно открылось...

Application.Exename - возвращает полный путь к приложению
ExtractFileDrive - извлекает диск из пути
Поэтому получается в driveName = C:\...

NickDang 23-01-2012 19:17 1842830

значит если прога находиться на D:\My Files.1.0\Soft\Corel.Painter.X.v10.0.046.Cracked-ARN
тогда мне нужно тут после \ добавить путь:

var driveName:string;
begin
driveName := ExtractFileDrive(Application.ExeName);
ShellExecute(Self.Handle,'open',PChar(driveName + '\My Files.1.0\Soft\Corel.Painter.X.v10.0.046.Cracked-ARN'),nil,nil,SW_SHOWNORMAL);
end;
так?

LilLoco 23-01-2012 19:18 1842832

Да, именно так :)

NickDang 23-01-2012 19:27 1842842

о всё отлично) была ещё проблема в том что проект делфи лежал на С, а файлы на D.
Всем спасибо!


Время: 09:34.

Время: 09:34.
© OSzone.net 2001-