Поиск:

Ответ в темуСоздание новой темы Создание опроса
> добавить симсол к строке по определенному условию, работа с файломи,  
V
    Опции темы
gosn1ck
Дата 4.5.2009, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

    if (RadioGroup1->ItemIndex != -1  &&
    !Edit1->Text.IsEmpty() &&
    !Edit2->Text.IsEmpty() &&
    !Edit3->Text.IsEmpty() &&
    !Edit4->Text.IsEmpty() &&
    !Edit5->Text.IsEmpty() )
    {
      int correct = RadioGroup1->ItemIndex+1;
      if (SaveDialog1->Execute())
      {
        FILE * fin;
        if(!(fin = fopen (SaveDialog1->FileName.c_str(), "at+")));
        {

          char buf[200] = "", buf2[3] = "";
          fputs(strcpy(buf, "\nСледующий вопрос \n"), fin);
          fputs(strcpy(buf, Edit1->Text.c_str()), fin);
          fputs(strcpy(buf, "\nВарианты ответов \n"), fin);

          switch (correct)
          {
            fputs(strcpy(buf, Edit2->Text.c_str()), fin);
            fputs(strcpy(buf, "\n"), fin);
            fputs(strcpy(buf, Edit3->Text.c_str()), fin);
            fputs(strcpy(buf, "\n"), fin);
            fputs(strcpy(buf, Edit4->Text.c_str()), fin);
            fputs(strcpy(buf, "\n"), fin);
            fputs(strcpy(buf, Edit5->Text.c_str()), fin);
            fputs(strcpy(buf, "\n"), fin);
          }
        }

    fclose(fin);
    }
  Edit1->Text = "";
  Edit2->Text = "";
  Edit3->Text = "";
  Edit4->Text = "";
  Edit5->Text = "";
  RadioGroup1->ItemIndex = -1;
  }else MessageBox(0, "Не все поля заполнены или не выбран ответ", "Информация", MB_ICONINFORMATION);



собственно вот весь код, edit для вопроса и 4 edit'a для вариантов ответа. вопрос в том как вставить, например, символ плюса (+) перед той строкой выходного файла напротив которой пользователь нажал radiobutton выборе RadioGroup1 

вот примерный интерфейс
user posted image

вот что на выходе
user posted image

вот что хотелось бы
user posted image


PM MAIL ICQ   Вверх
artsb
Дата 4.5.2009, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код на наличие ошибок и возможность усовершенствования не смотрел, но как я понял, вам нужно это:
Код

fputs(strcpy(buf, ("+" + Edit1->Text).c_str()), fin);


Естественно, вы ставите проверку: отмечен RadioButton или нет.

Это сообщение отредактировал(а) artsb - 4.5.2009, 18:54


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


Шустрый
*


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

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



в представленном выше мною коде конечно switch вообще не нужен.
artsb, получается решение "в лоб" если отмечен радио баттон то  fputs(strcpy(buf, ("+" + Edit1->Text).c_str()), fin); а иначе fputs(strcpy(buf, Edit1->Text).c_str(), fin); но так надо будет 4 раза. хотелось бы узнать способ "компактнее"

Добавлено через 1 минуту и 28 секунд
в представленном выше мною коде конечно switch вообще не нужен.
artsb, получается решение "в лоб" если отмечен радио баттон то  fputs(strcpy(buf, ("+" + Edit1->Text).c_str()), fin); а иначе fputs(strcpy(buf, Edit1->Text).c_str(), fin); но так надо будет 4 раза. хотелось бы узнать способ "компактнее"
PM MAIL ICQ   Вверх
artsb
Дата 4.5.2009, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



switch там действительно не в тему. smile

Да тут особо и не оптимизируешь, ИМХО...
Ну можно так попробовать:
Всем RadioButton'ам задаёте один обработчик OnClick, а в свойство Tag записываете числа 1, 2, 3, 4. Тогда:
Код

int CheckRadio;
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButtonsClick(TObject *Sender)
{
CheckRadio = (dynamic_cast<TRadioButton*>(Sender))->Tag;
}
//---------------------------------------------------------------------------
// клик по кнопке ОК
void __fastcall TForm1::ButtonOkClick(TObject *Sender)
{
// проверка: отмечен ли какой-нибудь радиобаттон
// открытие файла и др. операции
TStringList *lst = new TStringList();
lst->Add(Edit1->Text);
lst->Add(Edit2->Text);
lst->Add(Edit3->Text);
lst->Add(Edit4->Text);
lst->Add(Edit5->Text);
lst->Strings[CheckRadio] = "+" + lst->Strings[CheckRadio];
fputs(lst->Text.c_str(), fin); // запись вопроса вместе с ответами
delete lst;
// другие операции
}
//---------------------------------------------------------------------------

Но это извращение, как мне кажется.


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


Шустрый
*


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

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



а как мне проверить какой радиобаттон в группе выбран? RadioGroup1->ItemIndex получаю -1. до твоего совета я использовал свойство Items у RadioGroup1 , а теперь теперь накидал Radio кнопок и RadioGroup1->ItemIndex == -1  smile 
PM MAIL ICQ   Вверх
taiven
Дата 4.5.2009, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

//Первые две функции естественно надо сделать членами класса...
bool IsEditsEmpty(int count)
{
    for(int i = 1; i <= count; i++)
        if(dynamic_cast<TEdit*>(Form1->FindComponent("Edit" + AnsiString(i)))->Text.IsEmpty())
            return true;
    return false;
}
//---------------------------------------------------------------------------
void ClearEdits(int count)
{
    for(int i = 1 ; i <= count; i++)
        dynamic_cast<TEdit*>(Form1->FindComponent("Edit" + AnsiString(i)))->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if ((RadioGroup1->ItemIndex != -1)  && !IsEditsEmpty(5))
  {
      if(SaveDialog1->Execute())
      {
        FILE *fin;
        if((fin = fopen(SaveDialog1->FileName.c_str(), "at+")) != NULL);
        {
          fputs("\nСледующий вопрос \n", fin);
          fputs(Edit1->Text.c_str(), fin);
          fputs("\nВарианты ответов \n", fin);

          for(int i = 2 ; i <= 5; i++)
          {
              if(i-2 == RadioGroup1->ItemIndex)fputs("+", fin); // :)
              else fputs(" ", fin);
              fputs(dynamic_cast<TEdit*>(Form1->FindComponent("Edit" + AnsiString(i)))->Text.c_str(), fin);
              fputs("\n", fin);
          }

          ClearEdits(5);
          RadioGroup1->ItemIndex = -1;
        }
        fclose(fin);
    }
  }
  else MessageBox(0, "Не все поля заполнены или не выбран ответ", "Информация", MB_ICONINFORMATION);

}
//---------------------------------------------------------------------------



Это сообщение отредактировал(а) taiven - 4.5.2009, 21:25
PM   Вверх
artsb
Дата 5.5.2009, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ладно, раз вы не можете подправить как надо smile, верните как было и напишите это:
Код

void __fastcall TForm1::ButtonOkClick(TObject *Sender)
{
// проверка: отмечен ли какой-нибудь радиобаттон
// открытие файла и др. операции
int CheckRadio = RadioGroup1->ItemIndex + 1;
TStringList *lst = new TStringList();
lst->Add(Edit1->Text);
lst->Add(Edit2->Text);
lst->Add(Edit3->Text);
lst->Add(Edit4->Text);
lst->Add(Edit5->Text);
lst->Strings[CheckRadio] = "+" + lst->Strings[CheckRadio];
fputs(lst->Text.c_str(), fin); // запись вопроса вместе с ответами
delete lst;
// другие операции
}

Не забудьте Edit'ы расположить соответственно индексам радиокнопок  smile 


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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