motofan logo
       
> 

Программирование На C++ Builder, Обмен опытом!

docwar
сообщение 9.9.2006, 14:51


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 14.6.2005
Пользователь №: 44 195
Модель телефона: E398
Прошивка: 48R

Рейтинг: 6



Привет! Если Ты - программист на C++ Builder, то тебе сюда!
Предлагаю обмениваться здесь учебниками и мануалами + задавать вопросы.

Начну я: выкладываю справочную информацию и задаю вопрос. :)

Вопрос: есть DBGrid, состоящий из двух колонок. В них есть данные, которые необходимо сохранять и загружать! Причем при загрузке - в соответствующий столбец. Организовать это можно введением символа, разделяющего данные разных колонок в файле.
Пусть | - символ, служащий "барьером" между колонками. Т.е. файл будет иметь вид типа: имя | номер и т.д.

Как организовать само выслеживание символа | на C++ Builder?
Прикрепленный файл first_steps.zip   ( 1.79 мегабайт ) Кол-во скачиваний: 86
Прикрепленный файл Borland_C___Builder_FAQ.zip   ( 144.05 килобайт ) Кол-во скачиваний: 81
Прикрепленный файл Borland_C___4.zip   ( 603.66 килобайт ) Кол-во скачиваний: 80
Прикрепленный файл FAQs.zip   ( 297.98 килобайт ) Кол-во скачиваний: 6
Прикрепленный файл Samou4itel__.zip   ( 966.25 килобайт ) Кол-во скачиваний: 35
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
мото_Химки
сообщение 11.9.2006, 8:18


Интересующийся
**

Группа: Пользователи
Сообщений: 48
Регистрация: 21.4.2005
Из: не скажу
Пользователь №: 41 118
Модель телефона: E398/WX390
Прошивка: R373_G_0E.30.45R / ?

Рейтинг: 168



docwar,
А кто мешает, две колонки в файле писать не в строку (обе сразу), а допустим, нечётные строки - первая колонка, чётные вторая колонка.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
docwar
сообщение 11.9.2006, 13:11


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 14.6.2005
Пользователь №: 44 195
Модель телефона: E398
Прошивка: 48R

Рейтинг: 6



Принцип не важен - главное реализация! :)
Помочь можешь?
Кстати, теперь не DBGrid, а StringGrid! :)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
ApxuBatop
сообщение 11.9.2006, 14:07


Мото-Художник
******

Группа: Пользователи
Сообщений: 788
Регистрация: 12.1.2006
Пользователь №: 65 512
Модель телефона: iphone 5
Прошивка: от Е398

Рейтинг: 705



О, мы щас С++ в универе изучаем. :) После паскаля как-то непривычно... :)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
мото_Химки
сообщение 11.9.2006, 18:50


Интересующийся
**

Группа: Пользователи
Сообщений: 48
Регистрация: 21.4.2005
Из: не скажу
Пользователь №: 41 118
Модель телефона: E398/WX390
Прошивка: R373_G_0E.30.45R / ?

Рейтинг: 168



Цитата(docwar @ Понедельник, 11 Сентября 2006, 16:11)
Принцип не важен - главное реализация! :)
Помочь можешь?
Кстати, теперь не DBGrid, а StringGrid! :)
*



Можно попробовать. (Я то не программер по специальности - так для себя балуюсь)

Может прям сейчас что нибудь попробую замутить.
У тебя есть срок какой нибудь с этой необходимостью, или тоже просто для себя?



Вот собственно и моё творение подоспело. Естественно не претендует на "красивый" стиль и алгоритм, но работает.

Сообщение отредактировал мото_Химки - 11.9.2006, 21:59
Прикрепленный файл STG0_pro.zip   ( 14.63 килобайт ) Кол-во скачиваний: 75
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
docwar
сообщение 12.9.2006, 18:15


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 14.6.2005
Пользователь №: 44 195
Модель телефона: E398
Прошивка: 48R

Рейтинг: 6



Спасибо! Но... одни ошибки...даже форма не показывается...
Ты, видно, добавлял кнопки, а потом удалял их... ошибки обработчика событий на какую-то девятую и первые кнопки выдает! Хе! :)
Хм... код еще понять не могу! :)

Сам так намутил: Добавление
i++;
StringGrid1->Cells[0][i] = Edit1->Text;
StringGrid1->Cells[1][i] = Edit2->Text;

А вот так посоветовали:
Цитата
//сохранение
AnsiString vinnie = "Винни";
AnsiString val = "1234"
TStringList *pStrings = new TStringList;
pStrings->Add(vinnie + "=" + value);
pString->SaveToFile("c:\\backup.txt");
delete pStrings;

//чтение
AnsiString vinnie,val;
TStringList *pStrings = new TStringList;
pString->LoadFromFile("c:\\backup.txt");
          val = pString->Values["Винни"]; // вместо имени ключа можно также использовать индекс
// через pStrings->Names[index] - можно получить список имен ключей
delete pStrings;


Но у меня данные не заданы программно! Они у меня задаются через редактируемые поля!
Как исправить?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
мото_Химки
сообщение 13.9.2006, 4:57


Интересующийся
**

Группа: Пользователи
Сообщений: 48
Регистрация: 21.4.2005
Из: не скажу
Пользователь №: 41 118
Модель телефона: E398/WX390
Прошивка: R373_G_0E.30.45R / ?

Рейтинг: 168



А кто мешает сделать присваивание:

AnsiString vinnie, val;
vinnie = Edit1->Text;
val = Edit2->Text;
и далее по коду )

А алгоритм такой есть в книге, правильно посоветовали.
Однако, "если я что нибудь в чём нибудь понимаю..." (С), то не зря тип называется stringLIST, т.е. создаётся лист, а не сетка (GRID). Да, сохранять гораздо удобнее, но это лист...
Млин, хотя фактически тоже самое, что и я делал - ведь этот динимаческий лист фактически тот же файл, в который я писал :)

pStrings->Add(StringGrid1->Cells[0][i]);
pStrings->Add(StringGrid1->Cells[1][i]);
pStrings->Add(StringGrid1->Cells[2][i]);
pStrings->Add(StringGrid1->Cells[3][i]);
... и т.д.

:) или:

for(i=0; i<ACol; i++)
for(j=0; j<ARow; j++)
{
pStrings->Add(StringGrid1->Cells[j][i]);
}

З.Ы. Сейчас попробую с динамическим списком покопаться )
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
мото_Химки
сообщение 13.9.2006, 7:51


Интересующийся
**

Группа: Пользователи
Сообщений: 48
Регистрация: 21.4.2005
Из: не скажу
Пользователь №: 41 118
Модель телефона: E398/WX390
Прошивка: R373_G_0E.30.45R / ?

Рейтинг: 168



Хех, однако и список работает :). И мучиться с открытием файлов не надо :)

Код

void __fastcall TForm1::Button1Click(TObject *Sender) // кнопка "Сохранить в файл"
{
char i,j;

TStringList *pStrings = new TStringList;

for(j=0; j<StringGrid1->ColCount; j++)
  for(i=0; i<StringGrid1->RowCount; i++)
     pStrings->Add(StringGrid1->Cells[j][i]); //добавление строк в список

pStrings->SaveToFile("STG0_pro.txt"); //сохранение в файл

delete pStrings;

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

void __fastcall TForm1::Button2Click(TObject *Sender) //кнопка "Прочитать из файла"
{
char i,j,k;
k=0;

TStringList *pStrings = new TStringList;

pStrings->LoadFromFile("STG0_pro.txt"); //прочитать файл в список

for(j=0; j<StringGrid1->ColCount; j++)
  for(i=0; i<StringGrid1->RowCount; i++)
  {
  StringGrid1->Cells[j][i]=pStrings->Strings[k]; //заполнение StringGrid строками из динамического листа (списка)
  k++;
  }

delete pStrings;
}


Исправленная версия приложена. Ошибок на работе (а первую я дома делал) не наблюдается.
docwar,
я не совсем понял - ты всю StringGrid заполняешь из Edit-ов?
Она же тоже может быть редактируемой? Может Edit-ы не нужны?
Если надо - поставь задачку по конкретнее (с заполнением StringGrid - размер её, сколько Edit-ов...), я попробую сделать под тебя.
Прикрепленный файл V2.zip   ( 14.81 килобайт ) Кол-во скачиваний: 62
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
docwar
сообщение 13.9.2006, 10:40


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 14.6.2005
Пользователь №: 44 195
Модель телефона: E398
Прошивка: 48R

Рейтинг: 6



Спасибо за ответ! :)
Опять возникают ошибки при создании формы! Какие-то ошибки с кнопкой...
Суть вопроса изменилась немного:
1. Да. Два Едита необходимы:с них ведется заполнение таблицы. Теперь тип таблицы совершенно не важен! Советуют сделать БД...
2. Причем теперь в таблице должен быть не только текст, но и еще возможность помещать небольшие картинки!

Может, мы в асе состыкуемся? Моя - 389711
Напиши, пожалуйста, как только сможешь!
Спасибо!
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
мото_Химки
сообщение 13.9.2006, 10:59


Интересующийся
**

Группа: Пользователи
Сообщений: 48
Регистрация: 21.4.2005
Из: не скажу
Пользователь №: 41 118
Модель телефона: E398/WX390
Прошивка: R373_G_0E.30.45R / ?

Рейтинг: 168



docwar,
Есть таблица в билдере, в которую можно помещать небольшие картинки.
Только боюсь тут уже простым SaveToFile не обойдёшься... ладно, попробую.

Правильно я понял - два эдита, в них текст, по нажатию кнопки происходит заполнение этим текстом следующих двух пустых ячеек в таблице?

Моя ася - 154982237.
Я на работе в асе не сижу практически - жутко как-то она тут работает, почти не запускается.
Я писал программку в 6-ом билдере, может чего с версиями глючит?
Никаких изворотов с кнопками, или созданием формы я не делал.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
docwar
сообщение 13.9.2006, 11:28


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 14.6.2005
Пользователь №: 44 195
Модель телефона: E398
Прошивка: 48R

Рейтинг: 6



Так вот оно что... у меня четвертый! :)
Цитата
Правильно я понял

Да! ;)
Цитата
Есть таблица в билдере, в которую можно помещать небольшие картинки.

Вот как раз такая и нужна!
Тут уже точно без бд не обойтись! :)

Кстати, если не затруднит: скинь свои мануалы и статьи по Билдеру!
Спасибо!
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
мото_Химки
сообщение 13.9.2006, 12:24


Интересующийся
**

Группа: Пользователи
Сообщений: 48
Регистрация: 21.4.2005
Из: не скажу
Пользователь №: 41 118
Модель телефона: E398/WX390
Прошивка: R373_G_0E.30.45R / ?

Рейтинг: 168



Мануалов я не имею.
У меня есть книга, специально тогда покупал, Архангельский "Программирование в Builder 6". Очень хорошая книжка. Толстая такая.
Есть хелп к 6 билдеру, занимает помоему 80МБ не помню.

С БД я никогда не возился, но попробовать можно. Я попробую таблицу с картинками использовать.
Ещё вот чего скажи - в ячейке где лежит картинка, должен быть ещё и текст? (такая конструкция думаю будет гемороем)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
docwar
сообщение 13.9.2006, 12:58


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 14.6.2005
Пользователь №: 44 195
Модель телефона: E398
Прошивка: 48R

Рейтинг: 6



В ячейке, где лежит картинка ничего другого не должно быть! Потом придумаю проверку на содержимое ячейки одной и в зависимости от этого будет отображаться картинка. Но это потом!
А сейчас, если будешь пробовать - выкладывай, пожалуйста, текст программы и названия компонентов, а не проект, а то ошибки... :)
Спасибо!

Архангельский "Программирование в Builder 6, а она хорошая? Стоит потраченных денег? :) и что в ней рассказывается?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
мото_Химки
сообщение 13.9.2006, 13:32


Интересующийся
**

Группа: Пользователи
Сообщений: 48
Регистрация: 21.4.2005
Из: не скажу
Пользователь №: 41 118
Модель телефона: E398/WX390
Прошивка: R373_G_0E.30.45R / ?

Рейтинг: 168



Текст программ говоришь. Ты попробуй не проект открыть, а создай у себя проект (пустой) и потом простым ctrl+ins и shift+ins скопируй из моих файлов текст к себе в проект.

Стоит или нет потраченных денег blink.gif не знаю - я ж не специализируюсь на программировании, так приспичило и купил :)

Сегодня попробую таблицу с картинками.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
docwar
сообщение 13.9.2006, 14:10


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 14.6.2005
Пользователь №: 44 195
Модель телефона: E398
Прошивка: 48R

Рейтинг: 6



Ок! Так и поступим!
Да пока на картинки можно забить! Главное сейчас - вставлять текст из едитов, сохранять и загружать!
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
мото_Химки
сообщение 13.9.2006, 17:19


Интересующийся
**

Группа: Пользователи
Сообщений: 48
Регистрация: 21.4.2005
Из: не скажу
Пользователь №: 41 118
Модель телефона: E398/WX390
Прошивка: R373_G_0E.30.45R / ?

Рейтинг: 168



docwar,
вот ещё один помежуточный релиз.

STG0_pro.JPG - скриншот программки.
Прикрепленное изображение
Прикрепленный файл v3.zip   ( 31.17 килобайт ) Кол-во скачиваний: 54
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
docwar
сообщение 13.9.2006, 20:41


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 14.6.2005
Пользователь №: 44 195
Модель телефона: E398
Прошивка: 48R

Рейтинг: 6



Вопрос решен, но накопились новые вопросы:
1) как сделать кнопку Редактирования данных таблицы StringGrid?
2) как сделать надпись на первых строках StringGrid?
3) как добавить скроулинг вертикальный?
4) в StringGrid я могу вставлять картинки?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
мото_Химки
сообщение 14.9.2006, 4:48


Интересующийся
**

Группа: Пользователи
Сообщений: 48
Регистрация: 21.4.2005
Из: не скажу
Пользователь №: 41 118
Модель телефона: E398/WX390
Прошивка: R373_G_0E.30.45R / ?

Рейтинг: 168



1. При проектировании проекта, в свойствах стринггрид можно поставить "галочку", чтоб её поля были редактируемыми, как эдиты (что я и сделал).
2. Просто - это параметры FixedRows и FixedCols. Будет похоже на Exel.
3. Очень просто - он сам добавляется, если видимая часть таблицы меньше, чем количество строк (если все строки сразу не видны)
4. Не помню, но помоему нет. Однако можно писать в поля драугрид, но они уже, вроде, не будут редактируемы, как в стринггрид.

Ты сам сделал добавление из эдитов?
Кстати насчёт скролинга - я и сам вчера подумал об этом. Ведь если по нажатию "Добавить" в стринггрид добавляется строка, значит количество строк увеличивается, отсюда и возникает необходимость скролинга.
Поковыряюсь, сделаю. Здесь уже просто интересно, для себя, ибо появляется задача и интересно - реализую или нет.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
docwar
сообщение 14.9.2006, 6:37


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 14.6.2005
Пользователь №: 44 195
Модель телефона: E398
Прошивка: 48R

Рейтинг: 6



1) я кнопку сделал для редактирования! :) так интереснее! :)
2) Поставил в FixedRows единицу, а FixedCols занулил. Теперь вся таблица активна, кроме первой строки. Это хорошо, а теперь надо в первой строке ввести заголовок для каждого столбца. Это будет шапкой у таблицы!
3) В тот-то и дело, что не появляется... :(
4) Мне дали пару ссылок... сказали, что код может быть больше, чем моя программа... blink.gif

Цитата
Ты сам сделал добавление из эдитов?

За основу взял твой код для динамического массива и немного доработал его для сохранения и загрузки через диалог!
Спасибо!

А.. я знаю почему не появляется скроклинг! В таблице надо ведь вводить количество строк! Вот они и не добавляются, а следовательно нет и скроулинга...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
мото_Химки
сообщение 14.9.2006, 9:34


Интересующийся
**

Группа: Пользователи
Сообщений: 48
Регистрация: 21.4.2005
Из: не скажу
Пользователь №: 41 118
Модель телефона: E398/WX390
Прошивка: R373_G_0E.30.45R / ?

Рейтинг: 168



Диалог естественно лучше, чем просто запись в заданный файл. Я просто не стал нагромождать программу - главное основу сделать, а дальше уже всё сервисные функции.

Вобщем я ещё покопаю свою/твою программу.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
docwar
сообщение 14.9.2006, 16:47


Интересующийся
**

Группа: Пользователи
Сообщений: 53
Регистрация: 14.6.2005
Пользователь №: 44 195
Модель телефона: E398
Прошивка: 48R

Рейтинг: 6



С этими вопроами разобрался!
Но скоро возникнет еще куча!

Уже возник новый: как сделать закругленные концы у программы?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Программирование На C++ Builder, Обмен опытом! · Компьютеры, операционные системы, софт и железо · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28.7.2025, 13:52

Форум живёт: