Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.03.2008, 18:14
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию Проблема с фильтром OpenDialog

При запуске программа загружает плагины, и в OpenDialog должны добавляться новые расширения. Проблема вот в чем:
Код:
const
  DefOpenList = 'MPEG Audio Files(*.mp3;*.mp2;*.mp1)|*.mp3;*.mp2;*.mp1|'+
                'Ogg Vorbis Audio (*.ogg)|*.ogg|'+
                'Microsoft Wave Audio (*.wav)|*.wav|'+
                'MOD Music (*.mo3;*.it;*.xm;*.s3m;*.mtm;*.mod;*.umx)|*.mo3;*.it;*.xm;*.s3m;*.mtm;*.mod;*.umx|'+
                'Windows Media Audio (*.wma;*.wm;*.wax;*.asx;*.wn;*.wmx;*.wmd;*.wmz)|*.wma;*.wm;*.wax;*.asx;*.wn;*.wmx;*.wmd;*.wmz|'+
                'Midi(*.mid;*.midi;*.rmi)|*.midi;*.mid;*.rmi|'+
                'AudioCD(*.cda)|*.cda|'+
                'Video(*.avi;*.wmv;*.mpg;*.asf;*.dvr-ms)|*.avi;*.wmv;*.mpg;*.mpeg;*.asf;*.dvr-ms';
 var AllSupFiles : widestring = 'All Supported Files|*.mp3;*.mp2;*.mp1;*.ogg;*.wav;*.mo3;*.it;*.xm;*.s3m;*.mtm;*.mod;*.umx;*.wm;*.wax;*.asx;*.wn;'+
'*.wmx;*.wmd;*.wmz;*.midi;*.mid;*.rmi;*.cda;*.avi;*.wmv;*.mpg;*.mpeg;*.asf;*.dvr-ms';
//Это дефолтные значения
...
OpenDialog1.Filter := DefOpenList

  fh := FindFirstFile(PChar(ExeDir + 'bass*.dll'), fd);
  if (fh <> INVALID_HANDLE_VALUE) then
  try
    repeat
      plug := BASS_PluginLoad(fd.cFileName, 0);
      if Plug <> 0 then
      begin
        Info := pointer(BASS_PluginGetInfo(Plug));
        for a := 0 to Info.formatc - 1 do
        begin
          OpenDialog1.Filter := OpenDialog1.Filter + '|' + Info.Formats[a].name + '(' +
            Info.Formats[a].exts + ')|' + Info.Formats[a].exts;//добавляем новые расширения в диалог
          AllSupFiles := AllSupFiles + ';' + Info.Formats[a].exts;// и в список поддерживаемых форматов
        end;
      end;
    until FindNextFile(fh, fd) = false;
  finally
    Windows.FindClose(fh);
  end;

OpenDialog1.Filter := AllSupFiles + '|' + OpenDialog.Filter;
после этого при выборе фильтра All Supported Files показываются ВСЕ файлы
не думаю, что это из-за длины строки. я видел фильтры и подлиннее. Как заставить диалог работать как положено?
Ответить с цитированием
  #2  
Старый 11.03.2008, 21:42
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию

В каком смысле показываются все файлы? Тоесть всякие *.txt, *.tha и др. ? Если так то попробуй внести еще в сам диалог открытия All Support Files и в фильтре нужные форматы..

если не поможет то напиши в аську
Ответить с цитированием
  #3  
Старый 12.03.2008, 14:10
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

Если ты не заметил, то я так и делаю
Код:
OpenDialog1.Filter := AllSupFiles + '|' + OpenDialog.Filter;
Ответить с цитированием
  #4  
Старый 13.03.2008, 18:21
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

На основе твоего кода написал тестовое, но немного по другому (думаю что из-за того, что у меня Delphi 7). Может быть и коряво... Но у меня все работает.
Код:
const
  DefOpenList = 'MPEG Audio Files(*.mp3;*.mp2;*.mp1)|*.mp3;*.mp2;*.mp1|'+
                'Ogg Vorbis Audio (*.ogg)|*.ogg|'+
                'Microsoft Wave Audio (*.wav)|*.wav|'+
                'MOD Music (*.mo3;*.it;*.xm;*.s3m;*.mtm;*.mod;*.umx)|*.mo3;*.it;*.xm;*.s3m;*.mtm;*.mod;*.umx|'+
                'Windows Media Audio (*.wma;*.wm;*.wax;*.asx;*.wn;*.wmx;*.wmd;*.wmz)|*.wma;*.wm;*.wax;*.asx;*.wn;*.wmx;*.wmd;*.wmz|'+
                'Midi(*.mid;*.midi;*.rmi)|*.midi;*.mid;*.rmi|'+
                'AudioCD(*.cda)|*.cda|'+
                'Video(*.avi;*.wmv;*.mpg;*.asf;*.dvr-ms)|*.avi;*.wmv;*.mpg;*.mpeg;*.asf;*.dvr-ms';
 Var
 
AllSupFiles : widestring;

// так для теста
const

name:array [1..3] of string =('Test1','Test2','test4');
Exts:array [1..3] of String =('*.test','*.tstst','*.stst');

Var
I:Byte;
begin

OpenDialog1.Filter := DefOpenList;

//Это дефолтные значения

AllSupFiles := 'All Supported Files|*.mp3;*.mp2;*.mp1;*.ogg;*.wav;*.mo3;*.it;*.xm;*.s3m;*.mtm;*.mod;*.umx;*.wm;*.wax;*.asx;*.wn;'+
'*.wmx;*.wmd;*.wmz;*.midi;*.mid;*.rmi;*.cda;*.avi;*.wmv;*.mpg;*.mpeg;*.asf;*.dvr-ms';

For I:=1 to 3 do
 begin
OpenDialog1.Filter := OpenDialog1.Filter + '|' + name[i] + '(' +
            exts[i] + ')|' + exts[i];//добавляем новые расширения в диалог
          AllSupFiles := AllSupFiles + ';'+ exts[i];// и в список поддерживаемых форматов
end;
OpenDialog1.Filter := AllSupFiles + '|' + OpenDialog1.Filter;
OpenDialog1.Execute;

Ты проследи под отладчиком может быть идет неверное присваивание имен и расширений.
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #5  
Старый 22.03.2008, 13:21
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

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


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:18.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter