Войти

Показать полную графическую версию : [решено] WPI


NickDang
22-01-2012, 17:06
Я делаю что-то похожее на 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
Необходимо получить имя диска, с которого запущено приложение.
Информация о полном пути хранится в свойстве Application.ExeName.
Диск, с которого запущено приложение:
driveName = ExtractFileDrive(Application.ExeName);
В driveName будет имя диска.

NickDang
22-01-2012, 17:28
И будет работать не зависимо от того будь это J или D диск?

PhilB
22-01-2012, 18:28
Ну разумеется нужно подставить 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
итак, ещё раз. Можете объяснить что куда вписывать и как подробнее. извините я в Delphi новичок)

PhilB
22-01-2012, 21:55
Ваш код
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
Добавляю исходник, извините что ссылка на другой сайт, т. к. исходник выше 650 кб нельзя выложить, а у меня он на 1 мб. наверно из-за картинок.
вот: delphi.zip (http://www.fayloobmennik.net/1452462)

PhilB
22-01-2012, 22:25
В файле 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
не работает. ошибка при запуске. может есть что то проще? можно ли сделать чтобы при загрузке диск менял букву наприм на K?

LilLoco
23-01-2012, 18:31
ошибка при запуске »
Запуск вашей программы? Если да, то как событие нажатия клавиши может на это влиять? Ошибка в чем то другом... Желательно указать ошибку, тут не гадалки.
может есть что то проще? »
загрузке диск менял букву наприм на K? »
И действительно, проще чем получить путь до программы :)

NickDang
23-01-2012, 18:44
Ладно, пробую ещё раз. Захожу в 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
Точно не помню, но попробуйте так :

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
Во, запустилось, только открыло диск C:\

LilLoco
23-01-2012, 19:10
NickDang, Если у вас программа находится на диске C:\, то все правильно открылось...

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

NickDang
23-01-2012, 19:17
значит если прога находиться на 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
Да, именно так :)

NickDang
23-01-2012, 19:27
о всё отлично) была ещё проблема в том что проект делфи лежал на С, а файлы на D.
Всем спасибо!




© OSzone.net 2001-2012