Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2014, 19:12   #1
Dilex
Пользователь
 
Аватар для Dilex
 
Регистрация: 04.11.2010
Сообщений: 76
По умолчанию DBGrid или StringGrid (XE2)

Добрый день, ребята такой вопрос, в программе раньше использовался ListBox к которому присваивались значения в таком порядке :

Код:
ListBox1->Items->Add(IntToStr(sr.n)+" "
                  +FloatToStrF(sr.hz,ffFixed,7,2)+" "
                  +FloatToStrF(sr.bz,ffFixed,7,0)+" "
                  +FloatToStrF(sr.l,ffFixed,7,0) +" "
                  +FloatToStrF(sr.pf,ffFixed,7,2)+" "
                  +TimeToStr(sr.tz)+" "
                  +TimeToStr(sr.ts));
Далее переменой int k; присваивалось все содержимое из ListBox1 (k=ListBox1->ItemIndex; )
и в другой функции (ListBox1->ItemIndex=k; )
Теперь вопрос стал в другом как все это провернуть проще с StringGrid'om или DBGrid'om ?
Сделал с StringGrid :

Код:
StringGrid19->Cells[0][i+1] =  IntToStr(sr.n);
          StringGrid19->Cells[1][i+1] =  FloatToStrF(sr.hz,ffFixed,7,2);
          StringGrid19->Cells[2][i+1] =  FloatToStrF(sr.bz,ffFixed,7,0);
          StringGrid19->Cells[3][i+1] =  FloatToStrF(sr.l,ffFixed,7,0);
          StringGrid19->Cells[4][i+1] =  FloatToStrF(sr.pf,ffFixed,7,2);
          StringGrid19->Cells[5][i+1] =  TimeToStr(sr.tz);
          StringGrid19->Cells[6][i+1] =  TimeToStr(sr.ts);
но теперь не могу правильно присвоить переменную k ошибка : [BCC32 Error] Unit1.cpp(346): E2034 Cannot convert 'UnicodeString' to 'int'
если написать UnicodeString k;
тогда ошибка в следующем :
[BCC32 Error] Unit1.cpp(355): E2015 Ambiguity between '_fastcall System::+(int,const System::Variant &) at c:\program files (x86)\embarcadero\rad studio\9.0\include\windows\rtl\sysv ari.h:3504' and '_fastcall System::+(double,const System::Variant &) at c:\program files (x86)\embarcadero\rad studio\9.0\include\windows\rtl\sysv ari.h:3526'

чтобы было понятнее где используется к: ( SetFilePointer(fser,(sizeof(str_sm) +(k*sizeof(ser))),NULL,FI LE_BEGIN); )
Как сделать тоже самое выполнение что и было с ListBox1 только с StringGrid или с DBGrid, простите за наглость но если можно с примером (было бы не плохо на моем куске кода). Большое спасибо
Dilex вне форума Ответить с цитированием
Старый 27.05.2014, 19:39   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А можно увидеть строку кода где всплывает такая ошибка?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2014, 20:32   #3
Dilex
Пользователь
 
Аватар для Dilex
 
Регистрация: 04.11.2010
Сообщений: 76
По умолчанию

Да действительно извините не показал само действие ...
повторюсь чуть вот так было в listbox
Код:
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
// k=ListBox1->ItemIndex;
 Rul_Sel();
}
далее попадая в функцию Rul_sel ();
Код:
void __fastcall TForm1::Rul_Sel()
{
ListBox1->ItemIndex=k;
 SetFilePointer(fser,(sizeof(str_sm)+(k*sizeof(ser))),NULL,FILE_BEGIN);
 ReadFile(fser,&sr,sizeof(ser),&lread,NULL);}
Сделав это с StringGrid я попробовал повторить трюк ...
Код:
 
void __fastcall TForm1::Rul_Sel()
{
//ListBox1->ItemIndex=k;
k= StringGrid19->Cells[2][i+1];
 SetFilePointer(fser,(sizeof(str_sm)+(k*sizeof(ser))),NULL,FILE_BEGIN);
 ReadFile(fser,&sr,sizeof(ser),&lread,NULL);}
 ;
[BCC32 Error] Unit1.cpp(347): E2034 Cannot convert 'UnicodeString' to 'int'

судя по ошибке понятно что не может переконвертировать с юникода в int
тогда я сделал вместо int k;
UnicodeString k;
Код:
void __fastcall TForm1::Rul_Sel()
{
//ListBox1->ItemIndex=k;
UnicodeString k;
k= StringGrid19->Cells[2][i+1];
 SetFilePointer(fser,(sizeof(str_sm)+(k*sizeof(ser))),NULL,FILE_BEGIN);
 ReadFile(fser,&sr,sizeof(ser),&lread,NULL);
и тогда ошибка следующего рода :
[BCC32 Error] Unit1.cpp(355): E2015 Ambiguity between '_fastcall System::+(int,const System::Variant &) at c:\program files (x86)\embarcadero\rad studio\9.0\include\windows\rtl\sysv ari.h:3504' and '_fastcall System::+(double,const System::Variant &) at c:\program files (x86)\embarcadero\rad studio\9.0\include\windows\rtl\sysv ari.h:3526'

ругается на:
Код:
SetFilePointer(fser,(sizeof(str_sm)+(k*sizeof(ser))),NULL,FILE_BEGIN);
вот такая вот проблема !
Dilex вне форума Ответить с цитированием
Старый 27.05.2014, 21:27   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
int k=StrToInt(StringGrid19->Cells[2][i+1]);
Годится?
I'm learning to live...

Последний раз редактировалось Stilet; 27.05.2014 в 21:31.
Stilet вне форума Ответить с цитированием
Старый 27.05.2014, 21:51   #5
Dilex
Пользователь
 
Аватар для Dilex
 
Регистрация: 04.11.2010
Сообщений: 76
По умолчанию

сейчас буду тэстить скажу точно ...

но как мне к переменой (к) присвоить
Код:
StringGrid19->Cells[0][i+1] =  IntToStr(sr.n);
          StringGrid19->Cells[1][i+1] =  FloatToStrF(sr.hz,ffFixed,7,2);
          StringGrid19->Cells[2][i+1] =  FloatToStrF(sr.bz,ffFixed,7,0);
          StringGrid19->Cells[3][i+1] =  FloatToStrF(sr.l,ffFixed,7,0);
          StringGrid19->Cells[4][i+1] =  FloatToStrF(sr.pf,ffFixed,7,2);
          StringGrid19->Cells[5][i+1] =  TimeToStr(sr.tz);
          StringGrid19->Cells[6][i+1] =  TimeToStr(sr.ts);
Я полагаю что так

Код:
int k=StrToInt(StringGrid19->Cells[0][i+1])+(StringGrid19->Cells[0][i+1])+(StringGrid19->Cells[1][i+1])
ну и т.д ? тогда как быть с FloatToStrF и TimeToStr ?? ведь раньше ListBox1 был просто как целая строка к которой присваивалось (к) ... ? правильно я думаю ?

Проверил ... компилируется нормально ... но при выполнении ошибка ...
EConvertError with message "1.5843215" is not a valid integer value

где ("1.5843215") это то что должно присвоить к

Последний раз редактировалось Stilet; 27.05.2014 в 23:16.
Dilex вне форума Ответить с цитированием
Старый 27.05.2014, 22:02   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

так что ж вы в интежер не интежер суете?
eval вне форума Ответить с цитированием
Старый 27.05.2014, 22:05   #7
Dilex
Пользователь
 
Аватар для Dilex
 
Регистрация: 04.11.2010
Сообщений: 76
По умолчанию

а можно взглянуть на ваше решение ? (буду очень благодарен за опыт) если есть время ...
Dilex вне форума Ответить с цитированием
Старый 27.05.2014, 22:11   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

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

могу только дать небольшую подсказку
ListBox1->ItemIndex - это индекс выделенной строки
StringGrid19->Cells[2][i+1] - это получение строки в ячейке грида с "координатами" 2, i+1
т.е. это уж и ёж

собственно и не понятно а какой смысл у вас в том что вы индекс выделенной строки сохраняете в переменную?

Последний раз редактировалось Stilet; 27.05.2014 в 23:20.
eval вне форума Ответить с цитированием
Старый 27.05.2014, 22:24   #9
Dilex
Пользователь
 
Аватар для Dilex
 
Регистрация: 04.11.2010
Сообщений: 76
По умолчанию

эта переменная делает сдвиг в бинарном файле ... по которому потом производиться расчет и т.д ... просто с ListBox не совсем устроило ... поэтому решил сделать через StringGrid но смотрю что у меня это не получиться ...(
Dilex вне форума Ответить с цитированием
Старый 27.05.2014, 22:26   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

как переменная может делать сдвиг в файле? что-то новое
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid перенос слов в XE2 andrejjka Общие вопросы Delphi 2 20.03.2012 20:55
Добавление сцен или объектов из 3D MAX в Delphi XE2(FireMonkey) ST@LKER Общие вопросы Delphi 0 06.03.2012 14:44
delphi XE2 Передать указатель на тип record в EnumWindows. Вылет в IntOverFlow или AV Человек_Борща Общие вопросы Delphi 8 12.02.2012 21:57
Embarcadero Delphi XE2 Partner DVD (Зборник компонентов для XE2) volod3000 Софт 2 01.11.2011 02:26
StringGrid -> DBGrid artemavd Общие вопросы Delphi 1 24.09.2008 20:34