Доброе время суток.
Беспокою со следующим вопросом. Реализация делается в среде Borland C++ Builder 6.
В программе на нажатии на кнопке "Открыть" выходит диалоговое окно выбора файла или файлов. После этот файл (или файлы) я должен зачитать в объект Memo.
Вопрос:
Как мне определить какие файлы выбраны, чтобы дальше зачитать их в компонент Memo, так как есть вероятность того, что из 10 файлов могут быть выбраны, скажем 7 файлов.
C/C++ - Определение выбранных объектов
-
Admiral
Re: C/C++ - Определение выбранных объектов
Afon, не работал в Borland C++ Builder 6 но заинтересовал момент с этим диалогом "Открыть". По моему это стандартны системный, так что одинаково представлена реализация в многих средах. Разве в нём можно выделить более одного файла?
Лично такое встречал в этом диалоге только в Винампе, но там походу он по своему вызывается.
Лично такое встречал в этом диалоге только в Винампе, но там походу он по своему вызывается.
-
Drongo
Re: C/C++ - Определение выбранных объектов
Цитата Afon:
Как мне определить какие файлы выбраны, чтобы дальше зачитать их в компонент Memo
Это нужно скорее приложение MDI.
В Borland C++ Builder 6 выбрать Файл - Новый - Другое - вкладка Проэкт - MDI Application, но там тоже стандартный диалог, больше одного файла не выделяет, но если дописать некоторый код, то можно будет перетаскиванием файлов открывать их в более чем одном окне. Я когда-то учебный пример делал, по этим инструкциям:
1.
2.
3.
Цитата Admiral:
Лично такое встречал в этом диалоге только в Винампе
В AkelPad тоже такое есть.
Как мне определить какие файлы выбраны, чтобы дальше зачитать их в компонент 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++ - Определение выбранных объектов
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++ - Определение выбранных объектов
Drongo, Alan85, спасибо буду знать. Впервые в средствах разработки с этим диалогом "Открыть" столкнулся в VB6. Опции позволяющей выделять более одного файла на сколько помню там не было.
Не работаю с AkelPad по этому Винамп единственный который показал данную возможность.
Не работаю с AkelPad по этому Винамп единственный который показал данную возможность.
-
Drongo
Re: C/C++ - Определение выбранных объектов
Цитата Alan85:
OpenDialog выделяет более одного файла. Для это надо в его свойствах в Object Inspector -> Options -> ofAllowMultiSelect поставить значение true. А значения получать из OpenDialog1->Files.
Да, действительно получилось.
Только у меня открывается не содержимое файла, а его полный путь.

Если сменить выделенный красным цветом код
Код:
на такой
Код:
То открывается содержимое текстового файла и выделяется произвольное количество файлов. В любом случае автору нужно было выделять более чем один файл в OpenDialog[/i]'e. Но всё равно я запутался. Это наверное для каждого файла, чтобы открыть все выбраные, нужно создавать для каждого своё окно Memo, верно?
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++ - Определение выбранных объектов
Список файлов которые выделили хранится в коллекции типа 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);
//чтото еще делаем...
}
}