Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с ComboBox 
:(
    Опции темы
awkarene
  Дата 17.9.2012, 04:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.9.2012

Репутация: нет
Всего: нет



Доброго времени суток господа. Столкнулся с небольшой проблемой и не как не могу решить самостоятельно...

Ситуация такая: на форме имеется компонент типа TComboBox  

при нажатии на него он заполняется названиями txt файлов из определённой директории. Например так
Код

void __fastcall TForm10::ComboBox22Change(TObject *Sender)
{
struct ffblk ffblk;
int done;
done = findfirst("**.txt", &ffblk, 0);
while (!done)
  {
Form10->ComboBox22->Items->Add(ffblk.ff_name)  ;
done = findnext(&ffblk);
  }
}


После выбора определённого txt файла он должен открыться в Memo, но выдает ошибку.

Пробовал двумя способами и оба неудачно

1) способ

Код

void __fastcall TForm10::ComboBox22Select(TObject *Sender)
{
Form10->Memo2->Lines->LoadFromFile(ExtractFileDir(ParamStr(0))+"\\"+AnsiString(Form10->ComboBox1->Items->Strings[ComboBox1->ItemIndex]));
}

2) способ

Код

void __fastcall TForm10::ComboBox22Select(TObject *Sender)
{
Form10->Memo2->Lines->LoadFromFile(ExtractFileDir(ParamStr(0))+"\\"+AnsiString(Form10->ComboBox22->SelText));
}


Не считывается название активной строки в ComboBox.

Причем в    
Код


void __fastcall TForm10::ComboBox22KeyPress(TObject *Sender, char &Key) и  в void __fastcall TForm10::SpeedButton1Click(TObject *Sender)  
 оба способа работают, но вводить ключ или нажимать кнопку не очень удобно... хотелось бы сразу после выбора строки.

PM MAIL   Вверх
Dem_max
Дата 17.9.2012, 04:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Причем тут эта  ExtractFileDir() функция ???


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
awkarene
Дата 17.9.2012, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.9.2012

Репутация: нет
Всего: нет



Цитата

Причем тут эта  ExtractFileDir() функция ???


Функция извлекает часть полного файлового имени вплоть до названия папки, не включая " \ " перед файловым именем.
С этим проблем нет.  
Например мне нужно открыть файл  "C:\Users\Kuso4ek\Desktop\1\Debug_Build\file.txt"
нажимаю в Memo на строку   "file.txt"
При выборе строки выходит ошибка, что системе не удалось найти указанный путь   "C:\Users\Kuso4ek\Desktop\1\Debug_Build\"

куски кода

Код

AnsiString(Form10->ComboBox1->Items->Strings[ComboBox1->ItemIndex])

и
Код

AnsiString(Form10->ComboBox22->SelText)

не хотят работать. вопрос почему?
PM MAIL   Вверх
math64
Дата 17.9.2012, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 4
Всего: 72



Потому что ошибка в компиляторе. Может быть исправлена в новых версиях.
property типа AnsiString нельзя использовать в выражениях; их значения нужно сначала запомнить в переменную.

А тема должна быть в разделе билдера.
PM   Вверх
artsb
Дата 17.9.2012, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Попробуйте событие CloseUp:
Код

void __fastcall TForm1::ComboBox1CloseUp(TObject *Sender)
{
    Memo2->Lines->LoadFromFile(ExtractFilePath(ParamStr(0)) + ComboBox1->Items->Strings[ComboBox1->ItemIndex]);
}

И не используйте Form10->ComboBox22->SelText. Есть же Form10->ComboBox22->Text.

Добавлено через 14 минут и 36 секунд
Вот так прекрасно работает:
Код

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    struct ffblk ffblk;
    int done;

    ComboBox1->Items->Clear();

    done = findfirst("*.txt", &ffblk, 0);
    while (!done)
    {
        ComboBox1->Items->Add(ffblk.ff_name);
        done = findnext(&ffblk);
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Select(TObject *Sender)
{
    String sFilePath;

    sFilePath = ExtractFilePath(Application->ExeName);

    if(sFilePath[sFilePath.Length()] != '\\')
    {
        sFilePath += '\\';
    }

    sFilePath += ComboBox1->Text;

    Memo1->Lines->LoadFromFile(sFilePath);
}


Кстати, сейчас заметил:
1. Не нужно каждый раз перестраивать список в ComboBox22, при выборе записи из этого же списка.
2. Событие относится к ComboBox22, а индекс берётся из ComboBox1.
Код

void __fastcall TForm10::ComboBox22Select(TObject *Sender)
{
Form10->Memo2->Lines->LoadFromFile(ExtractFileDir(ParamStr(0))+"\\"+AnsiString(Form10->ComboBox1->Items->Strings[ComboBox1->ItemIndex]));
}


Наведите порядок в своём коде! И дайте человеческие имена компонентам!

Это сообщение отредактировал(а) artsb - 17.9.2012, 12:53


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
awkarene
Дата 18.9.2012, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.9.2012

Репутация: нет
Всего: нет



Большое спасибо! Всё работает.  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0618 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.