Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2011, 16:05   #1
P@radise
 
Регистрация: 30.05.2011
Сообщений: 8
По умолчанию Добавление имен файлов в ListBox и их открытие

Здравствуйте! Нужна помощь, Подскажите пожалуйста!
Ситуация такая, делаю оболочку под электронные учебники, библиотеку. Сами учебники в ехе формате.
Есть две формы, заставка и сама форма библиотеки, на ней имеется ListBox. При закрытии формы Заставка, открывается вторая с заполненным списком электронных учебников. Теперь нужно при клике/двойном клике открыть экзешник учебника.
Список заполнял двумя способами:
Код:
SendMessage(Form2.ListBox1.Handle,LB_DIR,0,integer(pchar('c:\ЭБ\*.exe')))
и
Код:
var str:TSearchRec;
begin

 if FindFirst('c:\ЭБ\*.exe',faAnyFile,str)= 0
  then begin
      repeat
       Form2.ListBox1.Items.Add(str.Name);
       Form2.ListBox1
      until FindNext(str)<>0;
      FindClose(str);
      end;
А Открыть пытаюсь так:
Код:
ShellExecute(Application.Handle,'Open',PChar(ListBox1.Items[ListBox1.ItemIndex]),Nil,Nil,SW_SHOWDEFAULT);
Но не открывается.

Я так понимаю должны еще пути к файлам сохраняться, но не знаю как это сделать.
Подскажите пожалуйста, как правильней заполнить список и открыть файл при дабл клике?
P@radise вне форума Ответить с цитированием
Старый 30.05.2011, 16:48   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

hellExecute(Application.Handle,'Ope n',PChar('c:\ЭБ\' + ListBox1.Items[ListBox1.ItemIndex]),Nil,Nil,SW_SHOWDEFAULT);

а если набор учебников будет перенесен? Например в С:\нов_ЭЛ_УЧ
менять везде?
Код:
SendMessage(Form2.ListBox1.Handle,LB_DIR,0,integer(pchar('c:\ЭБ\*.exe')))
 if FindFirst('c:\ЭБ\*.exe',faAnyFile,str)= 0
ShellExecute(Application.Handle,'Open',PChar(ListBox1.Items[ListBox1.ItemIndex]),Nil,Nil,SW_SHOWDEFAULT);
самое место для глобальной переменной
pathelbook: string;
pathelbook:='c:\ЭБ\';
Код:
SendMessage(Form2.ListBox1.Handle,LB_DIR,0,integer(pchar(pathelbook + '*.exe')))
 if FindFirst(pathelbook +'*.exe',faAnyFile,str)= 0
ShellExecute(Application.Handle,'Open',PChar(pathelbook + ListBox1.Items[ListBox1.ItemIndex]),Nil,Nil,SW_SHOWDEFAULT);
замена в одном месте и все.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.05.2011 в 16:54.
evg_m вне форума Ответить с цитированием
Старый 30.05.2011, 17:39   #3
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

если учебник в той же папке что и основная программа то можно так...


Код:
ShellExecute(Application.Handle,'Open',PChar(ExtractFilePath(application.ExeName)  + ListBox1.Items[ListBox1.ItemIndex]),Nil,Nil,SW_SHOWDEFAULT);
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 30.05.2011, 20:34   #4
P@radise
 
Регистрация: 30.05.2011
Сообщений: 8
По умолчанию

Спасибо большое!!!!

Еще вопросик, подкиньте идею как реализовать группировку, например по дисциплине, а то руководитель озадачил сегодня Вот у меня 21 учебник записались в ListBox, из них есть 6 учебников по Английскому языку.... допустим при нажатии на кнопку они перекидывались бы в отельный список Иностранные языки или еще куда-нибудь, разницы нет.
Вообще не принципиально как это будет осуществляться и какими путями
P@radise вне форума Ответить с цитированием
Старый 30.05.2011, 20:56   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Вот у меня 21 учебник записались в ListBox, из них есть 6 учебников по Английскому языку...
Как можно программно узнать что эти учебники по английскому языку этип математике эти по физике. причем число групп и названия групп должны быть НЕЗАВИСИМЫ от программы (измения в списке групп не должны требовать изменения программы). после того как ответишь на этот вопрос группировка будет решена. Именно из задач группировки появилось понятие папки. Но это сработает только при одном(единственном) критерии группировки. А несколько критериев группировки это следующий ход преподавателя. (пример двойной группировки (предмет + класс) (математика 7 класс математика 8 класс) (физика 8 класс) (физика 10 класс).
1 группировка учебники 8 класса
2 группировка учебники по физике.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 31.05.2011, 00:00   #6
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

В принципе можно предварительно создать каталог в отдельном файле, там же можно указать принадлежность к какой либо группе
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 01.06.2011, 16:04   #7
P@radise
 
Регистрация: 30.05.2011
Сообщений: 8
По умолчанию

Спасибо за идеи! Пошел путем группировки файлов по папкам. Теперь у меня такой вопрос, заполнил ListBox файлами и которые в подпапках, а как убрать пути к файлам, оставив только имена???
Код:
procedure DirSearch(Dir: string; Mask : string; SL: TStrings);
var str: TSearchRec;
begin
  Dir := IncludeTrailingBackslash(Dir);

  if FindFirst(Dir + '*.*', faAnyFile, str) = 0 then
    repeat
      Application.ProcessMessages;

      if (str.Attr and faDirectory) <> 0 then begin
        if (str.name <> '.') and (str.name <> '..') then
                DirSearch(Dir + str.name, Mask, sl)
      end
      else
        if MatchesMask(ExtractFileName(str.Name), Mask) then
          Sl.Add(Dir + str.Name);
    until FindNext(str) <> 0;
  FindClose(str);
end;
Код:
procedure TForm1.Button1Click(Sender: TObject);

begin
Form1.Hide;
Form2.Show;

         DirSearch('C:\ЭБ', '*.exe', Form2.ListBox1.Items);

end;
P@radise вне форума Ответить с цитированием
Старый 01.06.2011, 16:19   #8
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

Код:
        if MatchesMask(ExtractFileName(str.Name), Mask) then
          Sl.Add(Dir + ExtractFileName(str.Name));
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 01.06.2011, 16:46   #9
P@radise
 
Регистрация: 30.05.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Swarog Посмотреть сообщение
Код:
        if MatchesMask(ExtractFileName(str.Name), Mask) then
          Sl.Add(Dir + ExtractFileName(str.Name));
Не выходит
P@radise вне форума Ответить с цитированием
Старый 01.06.2011, 23:32   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Спасибо за идеи! Пошел путем группировки файлов по папкам. Теперь у меня такой вопрос, заполнил ListBox файлами и которые в подпапках, а как убрать пути к файлам, оставив только имена???
Код:
for j:=0 to MatchesMask.items.count -1 do 
  MatchesMask.items.strings[j]:=extractfilename(MatchesMask.items.strings[j]);
И как после такого будешь различать что математика, а что физика. к какой группе относится, если информация о группе удалена.
Более того как запустить учебник, если ты не знаешь в какой он папке. Искать по всем? А если в разных папках окажется два с одинаковыми именами. До второго ты просто никогда не доберешься.(не запустишь).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 01.06.2011 в 23:38.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
количество имен открытых файлов Пользователь1 Microsoft Office Excel 1 24.04.2011 08:53
Открытие Excel из списка файлов ListBox anton555sleptsov Помощь студентам 2 16.11.2010 22:48
Получить список имен файлов на сайте syserg Работа с сетью в Delphi 8 28.03.2010 14:01
Список ListBox из файла и открытие файлов в браузере oduvan4ik Общие вопросы Delphi 3 02.03.2009 23:35
Перевод длинных имен файлов в короткие... ActiveX Помощь студентам 1 24.10.2008 16:47