Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Определение выбранных объектов (http://forum.oszone.net/showthread.php?t=133184)

Afon 26-02-2009 11:08 1049194

Определение выбранных объектов
 
Доброе время суток.

Беспокою со следующим вопросом. Реализация делается в среде Borland C++ Builder 6.
В программе на нажатии на кнопке "Открыть" выходит диалоговое окно выбора файла или файлов. После этот файл (или файлы) я должен зачитать в объект Memo.
Вопрос:
Как мне определить какие файлы выбраны, чтобы дальше зачитать их в компонент Memo, так как есть вероятность того, что из 10 файлов могут быть выбраны, скажем 7 файлов.

Admiral 27-02-2009 01:22 1050022

Afon, не работал в Borland C++ Builder 6 но заинтересовал момент с этим диалогом "Открыть". По моему это стандартны системный, так что одинаково представлена реализация в многих средах. Разве в нём можно выделить более одного файла?
Лично такое встречал в этом диалоге только в Винампе, но там походу он по своему вызывается.

Drongo 27-02-2009 10:49 1050262

Цитата:

Цитата Afon
Как мне определить какие файлы выбраны, чтобы дальше зачитать их в компонент Memo »

Это нужно скорее приложение MDI.

В Borland C++ Builder 6 выбрать Файл - Новый - Другое - вкладка Проэкт - MDI Application, но там тоже стандартный диалог, больше одного файла не выделяет, но если дописать некоторый код, то можно будет перетаскиванием файлов открывать их в более чем одном окне. Я когда-то учебный пример делал, по этим инструкциям:

1. Шаг 5 - Хранилище объектов.
2. Шаг 6 - Апгрейдим MDI проект.
3. Шаг 7 - Прием файлов Drag'n'Drop.

Цитата:

Цитата Admiral
Лично такое встречал в этом диалоге только в Винампе »

В AkelPad тоже такое есть.

Alan85 27-02-2009 19:20 1050719

OpenDialog выделяет более одного файла. Для это надо в его свойствах в Object Inspector -> Options -> ofAllowMultiSelect поставить значение true. А значения получать из OpenDialog1->Files. Вот часть моего исходника:
Код:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 if (OpenDialog1->Execute()) Memo1->Lines->AddStrings(OpenDialog1->Files);     
}


Admiral 27-02-2009 20:16 1050760

Drongo, Alan85, спасибо буду знать. Впервые в средствах разработки с этим диалогом "Открыть" столкнулся в VB6. Опции позволяющей выделять более одного файла на сколько помню там не было.
Не работаю с AkelPad по этому Винамп единственный который показал данную возможность.

Drongo 27-02-2009 20:34 1050774

Цитата:

Цитата Alan85
OpenDialog выделяет более одного файла. Для это надо в его свойствах в Object Inspector -> Options -> ofAllowMultiSelect поставить значение true. А значения получать из OpenDialog1->Files. »

Да, действительно получилось. :up

Только у меня открывается не содержимое файла, а его полный путь.



Если сменить выделенный красным цветом код
Код:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (OpenDialog1->Execute()) Memo1->Lines->AddStrings(OpenDialog1->Files);     
}

на такой
Код:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (OpenDialog1->Execute()) Memo1->Lines->LoadFromFile(OpenDialog1->FileName);     
}

То открывается содержимое текстового файла и выделяется произвольное количество файлов. В любом случае автору нужно было выделять более чем один файл в OpenDialog'e. Но всё равно я запутался. :dont-know Это наверное для каждого файла, чтобы открыть все выбраные, нужно создавать для каждого своё окно Memo, верно?

Alan85 27-02-2009 21:22 1050824

Список файлов которые выделили хранится в коллекции типа Tstrings. Чтобы открывать каждый по очереди надо обращаться по очереди к каждому ему значению...
Код:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 AnsiString fo;

 if (OpenDialog1->Execute())

    for (int i=0; i<=OpenDialog1->Files->Count-1;i++)
    {
        fo=(*OpenDialog1->Files)[i];
      Memo1->Lines->Add(fo);
    //чтото еще делаем...
    }
}



Время: 15:59.

Время: 15:59.
© OSzone.net 2001-