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

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

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2013, 18:31   #1
Михаил_93
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 10
По умолчанию StringGrid (Загрузка из файла)

Есть разработанный компонент StringGrid.
И приложение, демонстрирующее работу этого компонента.
Один из методов компонента это загрузка матрицы из файла, но загружаются данные не так как нужно, прошу помочь что нужно изменить в коде чтобы метод работал правильно.

Наглядно на скринах:
Как должно быть

Как загружается

Прикрепил проект (пытался загрузить через вложения, но макс.размер .rar 507.8 Кб. а мой проект весит больше)

Скачатьstringgrid 2.rar
Изображения
Тип файла: jpg 1.jpg (42.8 Кб, 146 просмотров)
Тип файла: jpg 2.jpg (41.9 Кб, 133 просмотров)
Михаил_93 вне форума Ответить с цитированием
Старый 24.11.2013, 20:23   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Проект не смотрел, но явно загрузка данных начинается с индекса 1 для строки и столбца. Попробуйте с нулевого индекса
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.11.2013, 21:33   #3
Михаил_93
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 10
По умолчанию

загрузка и так стоит с нулевого индекса:
Код:
procedure TMYStGrid.MyLoadFromFile( const sFileName: string);
var
f:textfile;
b:string;
val:TStr;
i,j:word;
begin

 AssignFile(f,sfilename);
 Reset(f);
 readln(f,b);
 val:=_Words(b,' ');
 ColCount:=strtoint(val[0]);
 RowCount:=strtoint(val[1]);
 i:=0;
 while not eof(f) do
 begin
   readln(f,b);
   val:=_Words(b,' ');
   for j:=0 to Length(val)-1 do
   Cells[j,i]:=val[j];
   inc(i);
 end;
 CloseFile(f);
end;
Михаил_93 вне форума Ответить с цитированием
Старый 24.11.2013, 22:06   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
_Words(b,' ');
Чего?? Слова выделить?
Код:
procedure TMYStGrid.MyLoadFromFile( const sFileName: string);
var
st,words:TStringList;
i:word;
begin
 st:=TStringList.Create;words:=TStringList.Create;
 st.LoadFromFile(sfilename);
 words.Delimiter:=' ';
 words.DelimitedText:=st.Text;
 ColCount:=strtoint(words[0]);
 RowCount:=strtoint(words[1]);
 i:=0;
 for i:=2 to st.count-1 do
 begin
  StringGrid.Rows[i].Delimiter:=' ';
  StringGrid.Rows[i].DelimitedText:=st[i];
 end;
 words.free;st.free; 
end;
И никаких морок с файлами.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2013, 13:28   #5
Михаил_93
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Чего?? Слова выделить?
Код:
function _Words(s:string;dest:string = ','):TStr;
begin
 SetLength(Result,0);
 while pos(dest,s)>0 do
    begin
    SetLength(Result,Length(Result)+1);
    Result[Length(Result)-1]:=copy(s,1,pos(dest,s)-1);
    delete(s,1,pos(dest,s));
    end;
 SetLength(Result,Length(Result)+1);
 Result[Length(Result)-1]:=s;
end;
Тут ругается
Код:
begin
  MyStGrid.Rows[i].Delimiter:=' ';
  MyStGrid.Rows[i].DelimitedText:=st[i];
 end;
Изображения
Тип файла: jpg 3.jpg (41.4 Кб, 130 просмотров)
Михаил_93 вне форума Ответить с цитированием
Старый 25.11.2013, 14:00   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
function _Words(s:string;dest:string = ','):TStr;
ИМХО эта процедура лишняя. Костыльная.

MyStGrid какого типа? Должна быть TStringGrid
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2013, 14:35   #7
Михаил_93
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
.

MyStGrid какого типа? Должна быть TStringGrid
Код:
TMYStGrid = class(TStringGrid)
Все равно ругается в этом месте:
Код:
 begin
  TStringGrid.Rows[i].Delimiter:=' ';
  TStringGrid.Rows[i].DelimitedText:=st[i];
 end;
[dcc32 Error] MyStGrid.pas(97): E2233 Property 'Rows' inaccessible here
[dcc32 Error] MyStGrid.pas(98): E2233 Property 'Rows' inaccessible here
Михаил_93 вне форума Ответить с цитированием
Старый 25.11.2013, 16:46   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а... Ты свой класс-наследник сделал )
А зачем? Если не секрет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2013, 17:14   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
TStringGrid.Rows[i].Delimiter:=' ';
Чушь какая-то. Во-первых так вообще нельзя писать. Во-вторых, если уж наследник, то MyStGrid.Rows и так должен быть виден. Там 100% не наследник от TStringGrid
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.11.2013, 17:27   #10
Михаил_93
Пользователь
 
Регистрация: 24.11.2013
Сообщений: 10
По умолчанию

Я не силен в Delphi, поэтому и прошу помощи
Михаил_93 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка в StringGrid qpuTuJlb Общие вопросы Delphi 2 24.04.2013 20:16
загрузка из ListBox в StringGrid waka2ebawer Общие вопросы Delphi 2 21.08.2012 22:07
Непростая загрузка из CSV файла в StringGrid, а затем в БД artemavd БД в Delphi 17 06.10.2011 09:10
сохранение\загрузка в компоненте StringGrid Lorden Помощь студентам 1 07.12.2009 17:11
Проблема такова: язык:Delphi7; сохранения файла; загрузка файла в String Grid lightdevil Общие вопросы Delphi 3 06.03.2009 23:10