![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Станное поведение программы.
FEV © (2009-09-10 08:04:00)В общем создал программку-оболочку (autorun) для диска и более простой навигации по файлам. Использовал ShellTreeView и FileListBox.
При выборе папки в ShellTreeView выводится список файлов в папке на эл. FileListBox. Оттуда запускаем что нужно.
В общем все работает. Создал образ диска (.ISO) и собрал полностью и эту программку Autorun закинул на диск. Смонтировал Daemon Tools образ. Все работает как и хотел. НО когда записал образ на диск FileListBox (FLB) не показывает файлов... Точнее при выделении пункта в ShellTreeView (STV) не происходит никаких действий, которые происходят на виртуальном диске. Не передаются пути элементу FileListBox и одной кнопке.
Возможно пути и передаются, но FileListBox и кнопка не реагирует.
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
str:='';
Drive1:=GetCurrentDir();
delete(Drive1,3,(length(drive1)-2));
{stv.Root:=Drive1+ '\ADDITIONAL'; }
stv.Root:='F:\Образы\ExUltimate4\ADDITIONAL';
flb.Mask:='*.exe';
flb.Directory:=stv.Path;
begin
form1.alphablend:=true;
for i:=1 to 185 do
begin
form1.alphablendvalue:=i;
sleep(3);
end;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form1.alphablend:=true;
for i:=1 to 185 do
begin
form1.alphablendvalue:=185-i;
sleep(3);
end;
end;
procedure TForm1.STVClick(Sender: TObject);
begin
mm.Clear;
if FileExists(STV.Path+'\info.txt') then
mm.Lines.LoadFromFile(STV.Path+'\info.txt') else
if FileExists(STV.Path+'\~.txt') then mm.Lines.LoadFromFile(STV.Path+'\~.txt') else
mm.Text:='Нет описания';
if FileExists(STV.Path+'\setup.exe') then
begin
Button4.Enabled:=true;
str:=STV.Path+'\setup.exe';
end else Button4.Enabled:=false;
FLB.Directory:=STV.Path;
end;
procedure TForm1.FLBDblClick(Sender: TObject);
begin
ShellExecute(Handle, nil , pansichar(flb.FileName), nil, nil, SW_SHOW)
end;
procedure TForm1.Button16Click(Sender: TObject);
begin
ShellExecute(Handle, nil , pansichar(flb.FileName), nil, nil, SW_SHOW)
end;
procedure TForm1.FLBClick(Sender: TObject);
var
s:string;
begin
s:=flb.FileName ;
delete(s,1,(length(flb.FileName)-4));
if s='.txt' then mm.Lines.LoadFromFile(flb.FileName) else
mm.clear;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
{stv.Root:=Drive1+ '\ADDITIONAL'; }
stv.Root:='F:\Образы\ExUltimate4\ADDITIONAL';
flb.Mask:='*.exe';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
{stv.Root:=Drive1+ '\SOFT'; }
stv.Root:='F:\Образы\ExUltimate4\SOFT';
flb.Mask:='*.*';
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
ShellExecute(Handle, nil , pansichar(str), nil, nil, SW_SHOW)
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
ShellExecute(Handle, nil , pansichar(str), nil, nil, SW_SHOW)
end;
initialization
OleInitialize(nil);
finalization
OleUninitialize;
Servy (2009-09-10 19:24:00) [1]
> Drive1:=GetCurrentDir();
> delete(Drive1,3,(length(drive1)-2));
Текущая папка - плохой способ для определения с какого диска запустили твою программу. Текущую папку, например, может изменять стандартный TOpenDialog, ее можно указывать в свойствах ярлыка, etc.
Я бы задавал все пути относительно папки с твоим исполняемым файлом автобега. Предположим, что полный путь к твоему autorun.exe:
X:\Autonrun\Autorun.exe
тогда:
var
Prefix: string;
...
Prefix := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + '..\';
Prefix будет содержать путь к X:\, после чего ты можешь дописать к нему ADDITIONAL, или что там тебе нужно. При этом, это будет работать и при перемещении всего содержимого диска в какую-нибудь директорию, то есть не будет необходимости что-то комментировать и раскомментировать.
DVM (2009-09-10 18:07:00) [2]
> FEV
Не работает, потому что твой код плохо форматирован.
> Это там для теста у меня папки с прогами :)
> Чтобы компилировать конечный результат, я убираю "{}" из
> {stv.Root:=Drive1+ '\ADDITIONAL'; }
> и ставлю их здесь:
> stv.Root:='F:\Образы\ExUltimate4\ADDITIONAL';
>
> типа наоборот.
Ты сразу бы делал по человечески, а то тебе для каждой буквы привода свои версии программ выпускать придется.
FEV (2009-09-10 16:31:00) [3]
> Хочешь сказать, у тебя и виртуальный и реальный привод имеют
> одну и туже букву F, как и увсезх пользователей в этом несчастном
> мире?
Это там для теста у меня папки с прогами :)
Чтобы компилировать конечный результат, я убираю "{}" из {stv.Root:=Drive1+ '\ADDITIONAL'; }
и ставлю их здесь:
stv.Root:='F:\Образы\ExUltimate4\ADDITIONAL';
типа наоборот.
> Button5 - кнопка, которой все-таки можно запустить файл,
> даже если он отсутствует :)
Она не доступна, если файла нет :)
Я не пойму только того, что на виртульном приводе всё супер, а на реальном баги... Хотя на то он и виртуальный, чтобы на 99% создавать условия, как при запуске с реального...
Не пойму, почему так с моей прогой.
KilkennyCat (2009-09-10 08:39:00) [4]Button5 - кнопка, которой все-таки можно запустить файл, даже если он отсутствует :)
KilkennyCat (2009-09-10 08:35:00) [5]Хочешь сказать, у тебя и виртуальный и реальный привод имеют одну и туже букву F, как и увсезх пользователей в этом несчастном мире?