Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Обработка StringGrid

Ответить
Настройки темы
Delphi - [решено] Обработка StringGrid

Аватара для noname_06

Пользователь


Сообщения: 92
Благодарности: 2


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: noname_06
Дата: 18-01-2009
В TMemo из файла загружен список файлов в виде [Линк |размер дата время]. Нужно чтобы в StringGrid в первом столбце были обработаные адреса файлов, а в втором - размер. Пробовал так:

Код: Выделить весь код
procedure TForm1.RunBtnClick(Sender: TObject); {обработка файла}
var i, j, position, strlenght, x, y, w, MaxWidth: integer;
    currstr, s: string;
begin
  StringGrid.Visible:= true;
  for j:=1 to 2 do {заполняется первый столбец, потом второй}
    begin
    for i:=1 to StringGrid.RowCount+1 do
    begin
    currstr:= Memo.Lines[i-1]; {получаем текущую строку}
    strlenght:= length(currstr); {длина}
    position:= pos(' |', currstr); {позиция конца адреса в строке}
      if j=1 then {для первого столбца оставляем только линк}
      begin
      delete(currstr, position, strlenght-position+1);
      currstr:= concat(EditPatch.text, currstr);
      end
      else {для второго солбца оставляем только размер файла}
      begin
      delete(currstr, 1, position+1);
      position:= pos(' ', currstr);
      delete(currstr, position, strlenght-position+1);
      currstr:= IntToStr(StrToInt(currstr) div 1024 div 1024) + 'Mb';
      end;
    StringGrid.Cells[j,i]:= currstr; {заполняем ячейку}
      if j=1 then ProgressBar.Position := 100 * i div StringGrid.RowCount
      else ProgressBar.Position := 50 + 100 * i div StringGrid.RowCount
    end;
  end;
  with StringGrid do {установить ширину ячеек по макс. ширине текста}
    ClientHeight:= DefaultRowHeight * RowCount + 5;
    with StringGrid do
    begin
      for x := 0 to ColCount - 1 do
      begin
        MaxWidth := 0;
        for y := 0 to RowCount - 1 do
        begin
          w := Canvas.TextWidth(Cells[x,y]);
          if w > MaxWidth then
            MaxWidth := w;
        end;
        ColWidths[x] := MaxWidth + 5;
      end;
    end; {конец установки}
end;
При нажатии на кнопку выбрасывает ошибку:
Debugger Exeption Notificetion
Project ***** raised exeprion class EConvertError with message "is not a valid integer value"

з.ы. и ещё - как лучше напрямую прочитать/записать данные в StringGrid из текстового файла? (подразумевается обработка по 5-30 тыс. строк текста)
з.з.ы. как правильно прикрутить к проэкту XPManifest? простым добавлением на форму не хочет. Среда Delphi 7.0

Отправлено: 17:42, 18-01-2009

 

Аватара для Alan85

Старожил


Сообщения: 463
Благодарности: 91

Профиль | Отправить PM | Цитировать


Цитата noname_06:
StrToInt(currstr) »
ошибка может быть только тут, но я у себя скомпилил все в порядке , значит ошибка раньше - возможно в memo или в файле с данными
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:29, 18-01-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для detrin

Ветеран


Сообщения: 540
Благодарности: 42

Профиль | Отправить PM | Цитировать


Цитата Alan85:
как правильно прикрутить к проэкту XPManifest? простым добавлением на форму не хочет. Среда Delphi 7.0 »
В uses добавьте XPMan.

-------
Лучше ничего не делать, чем делать ничего.


Отправлено: 01:44, 19-01-2009 | #3


Аватара для noname_06

Пользователь


Сообщения: 92
Благодарности: 2

Профиль | Отправить PM | Цитировать


Таки да, компилятору не понравилось именно это, точнее не сам перевод строки в integer, а почему-то попытка использовать его как аргумент для div. Пробовал отдельно StrToInt присвоить real-переменой, потом значение real-а передать integer переменной и уже из неё вычислять размер в Мб - всё равно не хочет

Цитата:
В uses добавьте XPMan.
-уже присутствует

Последний раз редактировалось noname_06, 19-01-2009 в 02:02.


Отправлено: 01:46, 19-01-2009 | #4


Аватара для Alan85

Старожил


Сообщения: 463
Благодарности: 91

Профиль | Отправить PM | Цитировать


Так ведь же у меня (думаю и других тоже) прошло на тесте.
Цитата noname_06:
is not a valid integer value »
Похоже что где то у тебя вместо числа передается чисто с лишним пробелом или символом. Попробуй пошагово отдебагить с выводом сообщений что где чему равно и на чем спотыкается.
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:49, 19-01-2009 | #5


Аватара для noname_06

Пользователь


Сообщения: 92
Благодарности: 2

Профиль | Отправить PM | Цитировать


Не знаю что это было, но переписал как

Код: Выделить весь код
size: integer;

size:= StrToInt(currstr) div 1048576;
StringGrid.Cells[j,i]:= IntToStr(size) + ' Mb';
и всё прошло, на том же самом файле

Отправлено: 16:39, 19-01-2009 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Обработка StringGrid

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - Раскраска ячеек StringGrid pirojok750 Программирование и базы данных 10 26-10-2009 17:26
Создание и заполнение таблицы StringGrid в Делфи Bronko Программирование и базы данных 2 22-09-2006 13:41
*Решено* | Обработка массивов в С++ Shad0VV Программирование и базы данных 7 15-10-2005 19:59
DBGrid (Stringgrid) и Win API Partizan Программирование и базы данных 1 13-09-2004 12:03
Delphi - StringGrid в Delphi 6 LedWorm Программирование и базы данных 1 16-02-2004 08:02




 
Переход