Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.76
bobkah1
2 / 0 / 1
Регистрация: 02.05.2012
Сообщений: 18
#1

Вывод структур в StringGrid1 в виде таблицы - C++ Builder

02.05.2012, 21:54. Просмотров 3214. Ответов 29
Метки нет (Все метки)

Всем доброго времени суток.
Нужна помощь вот в таком вопросе:
Есть какое-то количество структур в файле (data.txt лежит в папке с проектом), структуры задавались с клавиатуры. Нужно сделать так чтобы при нажатии кнопки был переход в другую форму и там в StringGrid1 выводились все эти структуры в качестве таблицы. Если чем-то поможет, то вот код кнопки
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Application->CreateForm(__classid(TForm4), &Form4);
    Form4->StringGrid1->RowCount=1;
    Form4->Show();
    Form4->StringGrid1->Cells[0][0]="Имя";
    Form4->StringGrid1->Cells[1][0]="Фамилия";
    Form4->StringGrid1->Cells[2][0]="Домашний телефон";
    Form4->StringGrid1->Cells[3][0]="Сотовый телефон";
    Form4->StringGrid1->Cells[4][0]="Skype";
}
Заранее благодарю

ps Я совсем начинающий, можно сказать моя первая программа, так что не серчайте на меня за глупость.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2012, 21:54
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вывод структур в StringGrid1 в виде таблицы (C++ Builder):

Поиск данных в StringGrid1 и вывод совпадений в StringGrid1
Добрый день! Делаю поиск данных в StringGrid1 и вывожу совпавшие с параметром...

Вывод значений функции в виде таблицы
Всем привет, поможете с задачей. Заранее спасибо) Задача: Для каждого x,...

Вывод массива в StringGrid1
Добрый день всем. Прошу вашей помощи. Вообщем с COM порта вытаскиваю данные в...

Загрузка данных из файла, содержащего записи в виде структур, в StringGrid
Здравствуйте! Поставлена задача: 1. Создать файл с типом записи, содержащий...

Из буфера в ворд в виде таблицы
Здравствуйте, люди добрые! Подскажите пожалуйста как из буфера обмена...

StringGrid Сохранение в файл в виде таблицы
Здравствуйте! Подскажите пожалуйста, как сохранять из StringGrid в текстовый...

29
nick42
Практикантроп
4216 / 2249 / 379
Регистрация: 23.09.2011
Сообщений: 4,821
05.05.2012, 23:53 #2
- а data.txt как выглядит?
0
bobkah1
2 / 0 / 1
Регистрация: 02.05.2012
Сообщений: 18
10.05.2012, 06:02  [ТС] #3
блокнот с расширением .txt
"Владимир ! P! и•Штерн Ёў&
б 
- Ьу tЪюvх89528061571 bobkah1 & ющvа•&Пётр 0 0 P0 PАТараканов
б 
82734754232 х89457893492 petr2 HА5 ющvHА5 Генадий _ P_ РћЗюганов d
б 
81234567890 х89876543210 genaz Ићd ющvИћd Василий $ P$ А¦Пупкин ?) "
чтото типа такого, только больше и в одну строчку
0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
10.05.2012, 06:28 #4
C++
1
Application->CreateForm(__classid(TForm4), &Form4);
Как попало в код?
0
nick42
Практикантроп
4216 / 2249 / 379
Регистрация: 23.09.2011
Сообщений: 4,821
10.05.2012, 13:16 #5
Судя по фрагменту из блокнота, это не текстовый файл, а бинарный файл, имеющий определенную структуру, которая включает и текстовые поля. Если это так, то загрузив его как двоичный массив в буфер своей программы (предварительно поняв структуру), можно в каждую строку таблицы вытаскивать эти текстовые поля по их относительному смещению в кадре (или фрейме) структуры.

Не по теме:

Если Вы, как пишете, совсем начинающий и мое мнение только добавило головной боли, то не обращайте внимания... .

0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
10.05.2012, 17:15 #6
Пoкажите код записи структур в файл, и код как пытаетесь считывать ( файл явно бинарный), и код самой структуры
0
bobkah1
2 / 0 / 1
Регистрация: 02.05.2012
Сообщений: 18
12.05.2012, 21:25  [ТС] #7
Так, начну по-порядку:

Цитата Сообщение от Avazart Посмотреть сообщение
Код C++
1
Application->CreateForm(__classid(TForm4), &Form4);
Попал через препода, она сказала, что эта строчка нужна, просто нужна и всё. Без неё кстати не работает.

Nick42
Если честно я не понял что Вы написали, извините. 1 курс всё таки

код записи структур в файл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
part p;
FILE *f;
char name [] = "data.txt";
strcpy(p.name,Edit1->Text.c_str());
strcpy(p.surname,Edit2->Text.c_str());
strcpy(p.tel,Edit3->Text.c_str());
strcpy(p.mob,Edit4->Text.c_str());
strcpy(p.skype,Edit5->Text.c_str());
f=fopen("data.txt","ab");
 
 
fwrite (&p, sizeof(p),1,f);
fclose(f);
Application->CreateForm(__classid(TForm5), &Form5);
Form5->Show();
Form3->Hide();
}
Тут всё что прописано в кнопке добавить контакт, последние три строчки не в тему, но на всякий случай оставил.

Так пытаюсь считывать:
C++
1
2
3
4
5
6
7
8
while (feof data.txt *stream)
 
   {file * f;
        part p;
        f=fopen("data.txt","ab");
        fread (&p, sizeof(p),1,f);
        fclose(f);
        Form4->StringGrid1->RowCount+=1;}
Снова по совету препода, но билдер ругается на while.

C++
1
2
3
4
5
6
7
typedef struct {
    char name [30];
    char surname[30];
    char tel[15];
    char mob[15];
    char skype[20];
} part;
А вот код структуры.

Вот(
0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
12.05.2012, 21:30 #8
C++
1
Application->CreateForm(__classid(TForm4), &Form4);
Не вижу всего кода, но подозреваю препод тупит...
Как ты Form4 создавал?
0
nick42
Практикантроп
4216 / 2249 / 379
Регистрация: 23.09.2011
Сообщений: 4,821
12.05.2012, 23:00 #9
Avazart, это как раз работает...
Цитата Сообщение от Avazart Посмотреть сообщение
Application->CreateForm(__classid(TForm4), &Form4);
весь код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Application->CreateForm(__classid(TForm4), &Form4);
    Form4->ShowModal();
}
а вот это я не очень понял...

Цитата Сообщение от bobkah1 Посмотреть сообщение
while (feof data.txt *stream)
0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
12.05.2012, 23:06 #10
Почему не просто:
C++
1
Form4->ShowModal();
Или она не создается автоматом?
0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
12.05.2012, 23:12 #11
Вот пример, раньше делал первому курсу в академии
1
Вложения
Тип файла: rar Бинарный файл Вар 11.rar (232.5 Кб, 37 просмотров)
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
12.05.2012, 23:14 #12
C++
1
2
3
4
5
f=fopen("data.txt","ab");
while (fread(&p, sizeof(p),1,f))
 {
//....Вывод из структуры в StringGrid
 }
0
bobkah1
2 / 0 / 1
Регистрация: 02.05.2012
Сообщений: 18
13.05.2012, 20:14  [ТС] #13
Form4 создавал как и всегда - file->new->form - C++ builder
а вообще эта строчка появилась после того как я пришёл к преподу и сказал что у меня ничего не работает, она посидела, погуглила и решила что эта строчка необходима, всё работает и слава богу, хотя я вообще не понимаю что она значит.


Цитата Сообщение от nick42 Посмотреть сообщение
а вот это я не очень понял...
Сообщение от bobkah1
while (feof data.txt *stream)
это я просто пытался вывести, я опять же спросил её и она набегу мне что-то подобное сказала, это один из множества вариантов, которые я перебрал за последние недели 3.
0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
13.05.2012, 20:34 #14
она посидела, погуглила и решила что эта строчка необходима
Как я угадал
Пиши просто
C++
1
2
Form4->Show(); //Показать форму
Form4->Hide();// Спрятать форму
0
bobkah1
2 / 0 / 1
Регистрация: 02.05.2012
Сообщений: 18
13.05.2012, 21:15  [ТС] #15
спасибо, сейчас попробую)

а я и так пишу show и hide, просто без этой строчки они не работают
0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
13.05.2012, 21:26 #16
а я и так пишу show и hide, просто без этой строчки они не работают?
Такого не может быть, какие ошибки выдает Builder?
Подозреваю что надо сделать сначала File->Use Unit-> Unit4
0
nick42
Практикантроп
4216 / 2249 / 379
Регистрация: 23.09.2011
Сообщений: 4,821
13.05.2012, 23:30 #17
Цитата Сообщение от Avazart Посмотреть сообщение
Такого не может быть
- если в свойствах проекта эта форма не autocreate, то "фиолетовый аксес" неизбежен
0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
14.05.2012, 00:00 #18
- если в свойствах проекта эта форма не autocreate, то "фиолетовый аксес" неизбежен
Поэтому я и спросил как он создавал
Form4 создавал как и всегда - file->new->form - C++ builder
Предположил что он его не перекидовал с autocreate, по тому как сомневаюсь что он знает что такое есть вообще
1
bobkah1
2 / 0 / 1
Регистрация: 02.05.2012
Сообщений: 18
17.05.2012, 17:49  [ТС] #19
сделал всё как в коде который ты скинул, адаптировал под свои переменные, вроде всё работает, ошибок нет, вот только stringgrid пустой совсем
прилагаю код кнопки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Application->CreateForm(__classid(TForm4), &Form4);
    Form4->StringGrid1->RowCount=1;
    Form4->Show();
    Form4->StringGrid1->Cells[0][0]="Имя";
    Form4->StringGrid1->Cells[1][0]="Фамилия";
    Form4->StringGrid1->Cells[2][0]="Домашний телефон";
    Form4->StringGrid1->Cells[3][0]="Сотовый телефон";
    Form4->StringGrid1->Cells[4][0]="Skype";
 
    FILE *f;
    char s[]="data.dat";
    if ( (f=fopen(s,"ab"))==NULL )  { ShowMessage("Файла нет!");return;}
 
int i=2;
while(fread(&part,sizeof(part),1,f))
  {
      Form4->StringGrid1->RowCount=i;
      Form4->StringGrid1->Height=(Form4->StringGrid1->DefaultRowHeight+1)*i+4;
      Form4->StringGrid1->Cells[0][i-1]= AnsiString(part.name);
      Form4->StringGrid1->Cells[1][i-1]= AnsiString(part.surname);
      Form4->StringGrid1->Cells[2][i-1]= AnsiString(part.tel);
      Form4->StringGrid1->Cells[3][i-1]= AnsiString(part.mob);
      Form4->StringGrid1->Cells[4][i-1]= AnsiString(part.skype);
  i++;
  }
fclose(f);
}
Добавлено через 20 часов 23 минуты
нашёл ошибку, теперь выводит, господи боже, 3 недели трудов и наконец работает) спасибо большое)
0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
17.05.2012, 18:03 #20
bobkah1,И все же
Подозреваю что надо сделать сначала File->Use Unit-> Unit4
Делали?
0
17.05.2012, 18:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2012, 18:03
Привет! Вот еще темы с решениями:

Функция вывода значений в виде таблицы (Out_Tabl)
написать программу расчета для каждого x, изменяющегося от a до b с шагом h,...

StringGrid Сохранение в файл в виде таблицы ( через - и | )
Здравствуйте! Подскажите пожалуйста, как сохранять из StringGrid в текстовый...

Stringgrid1->c++
Как задать ограничение на ввод только чисел в 1ячейке Stringgridа

Вычислить и вывести на экран в виде таблицы значения функции
Здравствуйте=) Мне нужна чья-нибудь помошь, программа работает некорректно=(...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru