Войти

Показать полную графическую версию : Определение выбранных объектов


Afon
26-02-2009, 11:08
Доброе время суток.

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

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

Drongo
27-02-2009, 10:49
Как мне определить какие файлы выбраны, чтобы дальше зачитать их в компонент Memo »Это нужно скорее приложение MDI.

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

1. Шаг 5 - Хранилище объектов. (http://www.firststeps.ru/cbuilder/r.php?5)
2. Шаг 6 - Апгрейдим MDI проект. (http://www.firststeps.ru/cbuilder/r.php?6)
3. Шаг 7 - Прием файлов Drag'n'Drop. (http://www.firststeps.ru/cbuilder/r.php?7)

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

Alan85
27-02-2009, 19:20
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
Drongo, Alan85, спасибо буду знать. Впервые в средствах разработки с этим диалогом "Открыть" столкнулся в VB6. Опции позволяющей выделять более одного файла на сколько помню там не было.
Не работаю с AkelPad по этому Винамп единственный который показал данную возможность.

Drongo
27-02-2009, 20:34
OpenDialog выделяет более одного файла. Для это надо в его свойствах в Object Inspector -> Options -> ofAllowMultiSelect поставить значение true. А значения получать из OpenDialog1->Files. »Да, действительно получилось. :up

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

http://s55.radikal.ru/i150/0902/b7/16de9d129904.png

Если сменить выделенный красным цветом код
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
Список файлов которые выделили хранится в коллекции типа 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);
//чтото еще делаем...
}
}




© OSzone.net 2001-2012