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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2009, 18:46   #1
noname_06
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 49
Счастье Ошибка при обработке StringGrid + использование XPManifest

В 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
noname_06 вне форума Ответить с цитированием
Старый 18.01.2009, 18:58   #2
ViktorXP
Форумчанин
 
Аватар для ViktorXP
 
Регистрация: 24.11.2006
Сообщений: 108
По умолчанию

Цитата:
При нажатии на кнопку выбрасывает ошибку:
Debugger Exeption Notificetion
Project ***** raised exeprion class EConvertError with message "is not a valid integer value"
пройдись отладчиком и посмотри на какой строчке выбрасывает ошибку. (предполагаю что на функции StrToInt)

Цитата:
простым добавлением на форму не хочет.
почмотри редактором ресурсов прикручивает ли он его к ексехе (ресторатором либо ресхакером)
и не надейся что стрингрид изменит свой вид. в виндовсе такого компонента нет, это чисто делфийская фича
ViktorXP вне форума Ответить с цитированием
Старый 18.01.2009, 19:26   #3
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Ошибка вылетает из-за несоответствия DECIMALSEPARATOR и разделителя дробной части числа
_Engine_ вне форума Ответить с цитированием
Старый 18.01.2009, 20:52   #4
noname_06
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 49
По умолчанию

Цитата:
Сообщение от _Engine_ Посмотреть сообщение
Ошибка вылетает из-за несоответствия DECIMALSEPARATOR и разделителя дробной части числа
можно поподробнее, для чайника ? Пробовал использовать ещё одну переменную real-типа и round, не помогает Как перевести размер в мегабайты?

Последний раз редактировалось noname_06; 19.01.2009 в 01:43.
noname_06 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись из StringGrid в файл при помощи SaveDialog NecroSlider Помощь студентам 5 17.04.2011 18:45
XPmanifest, Delphi north Общие вопросы Delphi 3 02.06.2008 21:06
Использование OpenGL. Ошибка. IgorKr Общие вопросы Delphi 2 11.04.2008 23:11
StringGrid - при пометке строки ставить значок на столбце Mick Standarov Компоненты Delphi 2 03.10.2007 23:26
XPmanifest ? Dude_first Компоненты Delphi 3 23.09.2007 23:40