C/C++ - Определение выбранных объектов

Ответить
Аватара пользователя
Afon

C/C++ - Определение выбранных объектов

Сообщение Afon »

Доброе время суток.



Беспокою со следующим вопросом. Реализация делается в среде Borland C++ Builder 6.

В программе на нажатии на кнопке "Открыть" выходит диалоговое окно выбора файла или файлов. После этот файл (или файлы) я должен зачитать в объект Memo.

Вопрос:

Как мне определить какие файлы выбраны, чтобы дальше зачитать их в компонент Memo, так как есть вероятность того, что из 10 файлов могут быть выбраны, скажем 7 файлов.
Аватара пользователя
Admiral

Re: C/C++ - Определение выбранных объектов

Сообщение Admiral »

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

Лично такое встречал в этом диалоге только в Винампе, но там походу он по своему вызывается.
Аватара пользователя
Drongo

Re: C/C++ - Определение выбранных объектов

Сообщение Drongo »

Цитата Afon:



Как мне определить какие файлы выбраны, чтобы дальше зачитать их в компонент Memo
C/C++ - Определение выбранных объектов




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



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



1.
Шаг 5 - Хранилище объектов.


2.
Шаг 6 - Апгрейдим MDI проект.


3.
Шаг 7 - Прием файлов Drag'n'Drop.





Цитата Admiral:



Лично такое встречал в этом диалоге только в Винампе
C/C++ - Определение выбранных объектов




В AkelPad тоже такое есть.
Аватара пользователя
Alan85

Re: C/C++ - Определение выбранных объектов

Сообщение Alan85 »

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



Код:

Код: Выделить всё

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 if (OpenDialog1->Execute()) Memo1->Lines->AddStrings(OpenDialog1->Files);      
}
Аватара пользователя
Admiral

Re: C/C++ - Определение выбранных объектов

Сообщение Admiral »

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

Не работаю с AkelPad по этому Винамп единственный который показал данную возможность.
Аватара пользователя
Drongo

Re: C/C++ - Определение выбранных объектов

Сообщение Drongo »

Цитата Alan85:



OpenDialog выделяет более одного файла. Для это надо в его свойствах в Object Inspector -> Options -> ofAllowMultiSelect поставить значение true. А значения получать из OpenDialog1->Files.
C/C++ - Определение выбранных объектов




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



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



Изображение



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



Код:

Код: Выделить всё

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[/i]'e. Но всё равно я запутался. Это наверное для каждого файла, чтобы открыть все выбраные, нужно создавать для каждого своё окно Memo, верно?
Аватара пользователя
Alan85

Re: C/C++ - Определение выбранных объектов

Сообщение Alan85 »

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



Код:

Код: Выделить всё

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 AnsiString fo;
 if (OpenDialog1->Execute())
    for (int i=0; iFiles->Count-1;i++)
     {
        fo=(*OpenDialog1->Files)[i];
       Memo1->Lines->Add(fo);
     //чтото еще делаем...
     }
}
Ответить

Вернуться в «Программирование и базы данных»