Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > gпролемы со StringGrid в билдере 6


Автор: wertklop 23.11.2008, 22:42
привет всем

кто работает с таблицей StringGrid, подскажите.
есть кнопка загрузить, есть компонента диалог открытия файла.

Код

struct info{
char *field1;
};

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if ( !OpenDialog1->Execute() )return; //вызов окна  выбора файла
char ch[]="";
  FILE*file=fopen(OpenDialog1->FileName.c_str(),"rt");
  struct info Field;
  int rt = fscanf(file, "%s",ch);//чтение 1 строки из файла
  Field.field1=strtok(ch,"|");//получение 1 слова до первого разделителя "|"
  fclose(file);
  Application->MessageBox(Field.field1, "Look", MB_OK);//для проверки правильности считывания
 // StringGrid1->Cells[1][1]=Field.field1;//если снять комент, то вывводится ошибка(см рис)
}

user posted image

как мне сделать так, чтобы в ячейку выходило значене Field.field1 ?

Автор: Данкинг 23.11.2008, 22:48
Я со StringGrid мало работал, но вроде там изначально должно быть задано какое-то минимальное число строк и столбцов.

Автор: wertklop 23.11.2008, 23:21
Цитата(Данкинг @ 23.11.2008,  22:48)
Я со StringGrid мало работал, но вроде там изначально должно быть задано какое-то минимальное число строк и столбцов.

в свойствах StringGrid указано по умолчанию количество столбцов и строк стоит по 5
даже если я изменяю количество
Код

StringGrid1->ColCount=3;
StringGrid1->RowCount=3;


всё равно выходит та же ошибка. хотя я делаю как написано в документации

Автор: mrbrooks 24.11.2008, 09:45
wertklop, для Бормана есть отдельный раздел. Поищи в нем - там много примеров работы со StringGrid

Автор: xvr 24.11.2008, 14:36
TStringGrid тут абсолютно не при чем. Ошибка в другом месте:
Код

char ch[]="";
int rt = fscanf(file, "%s",ch);//чтение 1 строки из файла  
У тебя ch имеет тип массива чаров, размера 1 (1 чар), ты в нее читаешь строку из файла. Сдается мне, что строка много длиннее, чем 0 символов  smile  Сдалай массив побольше
Код

char ch[1024];
(Хотя потенциальную проблему ее переполнения это не решит)

Автор: wertklop 24.11.2008, 14:58
Цитата(xvr @ 24.11.2008,  14:36)
TStringGrid тут абсолютно не при чем. Ошибка в другом месте:
Код

char ch[]="";
int rt = fscanf(file, "%s",ch);//чтение 1 строки из файла  
У тебя ch имеет тип массива чаров, размера 1 (1 чар), ты в нее читаешь строку из файла. Сдается мне, что строка много длиннее, чем 0 символов  smile  Сдалай массив побольше
Код

char ch[1024];
(Хотя потенциальную проблему ее переполнения это не решит)

а разве я не создаю массив с неогрангиченным размером?

Автор: mrbrooks 24.11.2008, 15:06
Цитата(wertklop @  24.11.2008,  14:58 Найти цитируемый пост)

а разве я не создаю массив с неогрангиченным размером? 


неа  smile 

Автор: wertklop 27.11.2008, 21:50
ребята! я нашёл то, что мне нужно!
 smile 
всё работает так, как надо!
смотрите и пользуйтесь, вдруг кому пригодится

http://forum.vingrad.ru/forum/topic-113291/unread-1.html
 smile 

Автор: wertklop 28.11.2008, 00:51
подскажите, как сделать так, чтобы можно было выделять не всю строку целиком, а по ячейкам?
и как их сделать редактируемыми?
свойство goEditing не помогает (( 

Автор: xvr 28.11.2008, 09:57
Цитата(wertklop @ 28.11.2008,  00:51)
подскажите, как сделать так, чтобы можно было выделять не всю строку целиком, а по ячейкам?

Options->goRowSelect

Цитата

и как их сделать редактируемыми?
Options->goEditing 

Цитата

свойство goEditing не помогает ((
F2 нажимали? Если нужно без F2, то goAlwaysShowEditor

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)