Показать сообщение отдельно
  #20  
Старый 07.01.2011, 13:28
UFO 007 UFO 007 вне форума
Новичок
 
Регистрация: 28.11.2010
Сообщения: 54
Репутация: 10
По умолчанию Re: Как запустить приложение из программы и не зависить от него

[quote=notricky]
Цитата:
Сообщение от UFO 007
Быть может после begin сразу написать
Код:
....begin
   GetPlaylist := TWinampPlaylist.Create;
?
К сожалению эту идею проишлось умертвить т.к. после Create второй строкой:
Код:
   TWinampPlaylist.Destroy;
- зависание... Но успешно воплотилась другая идея:
Код:
....If MyPlayerButton.Checked then ...
изменяем значение ключа реестра, отвечающего за m3u или mp3 на путь к Винампу с моей болванки и тогда ShellExecute отлично передаёт ему путь к плэйлисту: CurDir + ArtistBox + AlbumBox. Теперь проблема след.: чтобы нати папку Music и выкапывать оттуда значения для вышеупомянутых КомбоБоксов припахал первое попавшее под руку средство - DirectoryListBox1 (более подходящего метода вродь как не нашёл), но пока прога откатывалась на HDD - всё было ВэриКул, а вот как только итоговый вариант был записан на болванку .... Ни *.mp3 в TreeView1 не видно, фото артиста в Image1, ни ... потому что КомбоБоксы возвращают ' '. Ну, думаю Ща...
Короче - вот:
Код:
Procedure BoxChange (Box: TComboBox; StartDir: string; Level_: integer);
var s: string;
begin
  form1.DirectoryListBox1.Directory:= StartDir;
  repeat
    s:= form1.DirectoryListBox1.GetItemPath(Level_);
    if pos(StartDir, s)>0 then
    Delete(s, Pos(StartDir, s), length(StartDir));
    if s <> '' then Box.Items.Add(s);
    inc (Level_);
  until s = '';
end;

и если подавать ей Level_ := 0, то содержимое ArtistBox'а будет выглядет так:
C:\
C:\Program Files
C:\Program Files\Borland
C:\Program Files\Borland\Delphi7
C:\Program Files\Borland\Delphi7\Projects
C:\Program Files\Borland\Delphi7\Projects\Bpl
C:\Program Files\Borland\Delphi7\Projects\Music
а уж потом можно найти и Диану, и Маленького Принца с вложенными туда альбомами. Так вот чтобы исключить этот "мусор" - надо рассчитать Level_ :
Код:
  Level:= 0;
  i:= Level;
  repeat
  s:= DirectoryListBox1.GetItemPath(i);
memo2.Lines.Add('s= ' + s);
  inc (i);
  until  Pos ('Music', s) >0;
  CurDir:= s + '\';
  StrLCopy (buf, PChar(s), max_path);
  for i := 0 to SizeOf(buf)do
  if buf[i] = '\' then inc (Level);
memo2.Lines.Add('Level= ' + inttostr(Level));
memo2.Lines.Add('CurDir= ' + CurDir);
  BoxChange (ArtistBox, CurDir, Level +1); // ниже папки Music
  ArtistBox.ItemIndex := 0;
  artist:= CurDir + ArtistBox.Items[ArtistBox.ItemIndex]+'\'; 
memo2.Lines.Add('artist= ' + artist);  
Вродь как логично, но на ВиртуалСД (или только на реальной болванке всё будет Тип-Топ? - не хотелос бы лишний раз трепать DVDписюк) этот код показывает:
s= k:\
s= k:\Music
Level= 4
CurDir= k:\Music\
artist= k:\Music\\
album= \
и всё - пусто (а на винте - всё пашет О'К: видно все фото- и биографии, проигрыватся m3u и mp3 и Каролины, и Комиссара{окромя Дианы...}, системным и моим плэйером). Кто нить знает в чём собака порылась? и как это дело объегорить?
Заранее благодарен
Ответить с цитированием