Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по ListBox'y 
:(
    Опции темы
Salatovec
Дата 25.5.2008, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вообщем дано задание:

Написать программу, которая позволяет создавать и редактировать список сообщений. Каждое сообщение состоит из времени и текстовой строки. 
Основное окно содержит список сообщений (ListBox), а также кнопки «Добавить», «Изменить», «Удалить» для редактирования списка. Добавление и редактирование элементов списка производится с помощью вспомогательного окна, на котором имеется строка редактора (Edit) для ввода текста сообщения, строка редактора с шаблоном (MaskEdit) для ввода времени, а также кнопки «Записать» и «Отменить».
При нажатии кнопки «Добавить» открывается модальное вспомогательное окно с пустым текстом сообщения и текущим временем. После закрытия вспомогательного окна в список сообщений добавляется новый элемент (при выходе по кнопке «Записать») или список не изменяется (в противном случае).
При нажатии кнопки «Изменить» открывается такое же модальное вспомогательное окно, как и при нажатии кнопки «Добавить», но с текстом и временем, соответствующими текущему элементу списка сообщений. После закрытия вспомогательного окна текущий элемент списка сообщений изменяется (при выходе по кнопке «Записать») или не изменяется (в противном случае).
При нажатии кнопки «Удалить» удаляется текущий элемент списка сообщений. 
Если не один из элементов списка не выбран, то кнопки «Изменить» и «Удалить» должны быть недоступными, в противном случае – доступными.
Указание. Для хранение параметров сообщения использовать объекты типа:
struct TInfo : public TObject
{
  TDateTime  Time;
  AnsiString Text;
};
Эти объекты хранить в свойстве Items->Objects списка сообщений. При завершении программы необходимо обеспечить их удаление.
Доступность кнопок «Изменить» и «Удалить» обеспечивать с помощью события OnIdle объекта Application.

Я написал две формы.
Вот первая:

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
extern TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    Button2->Enabled = false;
    Button3->Enabled = false;
}
//---------------------------------------------------------------------------
struct TInfo : public TObject
{
  TDateTime  Time;
  AnsiString Text;
};
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Form2->MaskEdit1->Text = Time();
    Form2->Edit1->Text = "";
    Form2->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Form2->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    Form1->ListBox1->Items->Delete(Form1->ListBox1->ItemIndex);
    Button2->Enabled = false;
    Button3->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
    Button2->Enabled = true;
    Button3->Enabled = true;
}
//---------------------------------------------------------------------------


И вот вторая:

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 struct TInfo : public TObject
{
    TDateTime  Time;
    AnsiString Text;
};
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
    Form2->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
    TInfo *Message = new TInfo;
    Form1->ListBox1->Items->AddObject(MaskEdit1->Text+" - "+Form2->Edit1->Text,(TObject *) Message);
    Form2->Close();
}
//---------------------------------------------------------------------------


Не могу никак реализовать 2 кнопку на 1 форме, которая должна изменять уже существующие сообщения =\
Помогите пожалуйста, заранее спасибо!

Это сообщение отредактировал(а) Salatovec - 25.5.2008, 17:56
PM MAIL   Вверх
Zigmyndshtein
Дата 25.5.2008, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а ты сохранённые сообщения где храниш?
если их хранить в отдельном текстовом файле, то с редактирование нет проблемм, просто на кнопку вешаеш функцию которая открывает этот текстовый файлик и передаёт его на редактирование
PM MAIL   Вверх
Salatovec
Дата 25.5.2008, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Эти объекты хранить в свойстве Items->Objects списка сообщений.

Вот где они хранятся.
PM MAIL   Вверх
Salatovec
Дата 26.5.2008, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Неужели никто не знает (
PM MAIL   Вверх
mrbrooks
Дата 26.5.2008, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Как я вразумил из написанного следует отредактировать уже существующую запись.

Я правильно понял?
PM MAIL   Вверх
SerK
Дата 26.5.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Salatovec 
В ListBox есть свойства как, Items->Insert, Items->Delete, Items->Count. 
Например, нужно вставить данные в третью строку:
Код

String S= MaskEdit1->Text+" - "+Form2->Edit1->Text;
Form1->ListBox1->Items->Insert(3,S);

Таким же образом можно удалять строки.
В вашем коде не пойму зачем нужно использовать свойство Items->Objects, можно обойтисть
Items->Add(S);


--------------------
Пусть будет миру хорошо!
PM MAIL   Вверх
mrbrooks
Дата 26.5.2008, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Цитата(SerK @ 26.5.2008,  13:28)
Salatovec 
В ListBox есть свойства как, Items->Insert, Items->Delete, Items->Count. 
Например, нужно вставить данные в третью строку:
Код

String S= MaskEdit1->Text+" - "+Form2->Edit1->Text;
Form1->ListBox1->Items->Insert(3,S);

Таким же образом можно удалять строки.
В вашем коде не пойму зачем нужно использовать свойство Items->Objects, можно обойтисть
Items->Add(S);

Речь идет скорее о методах имхо smile Причем тип данных TStringList.

Если более расширить ответ SerK то в первую очередь следует определить индекс строки изменяемой строки:
Код

//к примеру этот код можно занести в обработчик двойного щелчка мышкой в ListBox
int i = ListBox->ItemIndex; //индекс строки - допустим глобальная переменная
....
String str = ListBox->Items->Strings[i]; //заносишь текст строки в переменную
Edit->Text = str;


Теперь редактируй в Edit свою строку и при нажатии кнопки скажем изменить:
Код

 ListBox->Items->Delete[i];
String s = Edit->Text;
ListBox->Items->Insert(i, s);


Что то типа этого. smile 




PM MAIL   Вверх
Rrader
  Дата 26.5.2008, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

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



Salatovec, пример тебе в аттаче.

И пожалуйста, 
Цитата

Доступность кнопок «Изменить» и «Удалить» обеспечивать с помощью события OnIdle объекта Application.

Лучше так не делай smile 

Это сообщение отредактировал(а) Rrader - 26.5.2008, 13:53

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  AddObject.rar 6,51 Kb


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Salatovec
Дата 26.5.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Доступность кнопок «Изменить» и «Удалить» обеспечивать с помощью события OnIdle объекта Application.

Так я и не делал.

Цитата

В вашем коде не пойму зачем нужно использовать свойство Items->Objects, можно обойтисть.

Так по заданию =\

Добавлено @ 23:03
mrbrooks, спасибо за совет, попробую)
 
Цитата

Как я вразумил из написанного следует отредактировать уже существующую запись.
Я правильно понял?

Правильно.

Это сообщение отредактировал(а) Salatovec - 26.5.2008, 23:06
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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