Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

StringGrid [D6, WinXP]


john_mag ©   (2005-06-27 09:06:00) 

Всем доброе утро! Кто-нибудь сможет подсказать, как очистить от значений StringGrid не используя циклов? Пытался использовать StringGrid.Free, но выдает ошибку...


Digitman   (2005-06-27 10:34:00) [1]


> Все-таки придеться циклы писать?


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


john_mag   (2005-06-27 10:21:00) [2]

Digitman ©   (27.06.05 10:14) [16]

>вообще код - безобразный

Извините, что разочаровал... В Delphi я 6 месяцев и стиль пока не выработал...
Какой приговор Ваш, МАСТЕРА? Мне сегодня прогу сдавать... Все-таки придеться циклы писать?...


Digitman   (2005-06-27 10:14:00) [3]

вообще код - безобразный


Digitman   (2005-06-27 10:07:00) [4]


> ColCount в программе определяются динамически


> StringGrid2.ColCount:= 10;//количество столбцов в таблице


присвоение св-ву ColCount ЗАРАНЕЕ известного тебе значения 10 ты называешь "определяется динамически" ?

с тем же успехом ты мог в и дизайн-тайм установить это св-во !

ну да это, судя по коду, не имеет отношения к проблеме ..

а проблема у тебя в том , что св-во RowCount ты определяешь позже чем обращаешься к той или иной строке, в то время как RowCount как раз и определяет актуальное кол-во строк грида

и "очистка" тут ни при чем совершенно

..
Read(F6,FF6);
StringGrid2.RowCount := cc + 1;
StringGrid2.Cells[1,cc+1]:= '     '+IntToStr(FF1.Number);
..


TUser   (2005-06-27 10:06:00) [5]

В дополнение к [1] - неплохо бы еще FixedRows/FixedColumns запоминать.


john_mag   (2005-06-27 09:51:00) [6]

begin
 StringGrid2.ColCount:= 10;//количество столбцов в таблице
 AssignFile(F8, 'C:\Apteka\DataBase\Analize.DAT');
 AssignFile(F1,'C:\Apteka\DataBase\BaseTab.DAT');
 AssignFile(F6, 'C:\Apteka\DataBase\DataBaseAll.DAT');
 {$I-}
 Reset(F8);
 Reset(F1);
 Reset(F6);
 c:= 0;
 cc:= 0;
 cc1:= 0;
 cc2:= 0;
 for j:= 1 to n do
   begin
     summ:= 0;
     b:= false;
     for i:= 1 to m do
       begin
          Seek(F8,c);
          Read(F8,FF8);
          if mass[4+cc2,i] = 1 then (во втором цикле if mass[4+cc2,i] = 2 then)
            begin
              Seek(F1,cc1);
              Seek(F6,c);
              Read(F1,FF1);
              Read(F6,FF6);
              StringGrid2.Cells[1,cc+1]:= '     '+IntToStr(FF1.Number);
              StringGrid2.Cells[2,cc+1]:= FF1.Naimenovanie;
              StringGrid2.Cells[3,cc+1]:= '    '+FF1.Ediniza;
              StringGrid2.Cells[4,cc+1]:= '    '+FF1.ColihestvoString;
              StringGrid2.Cells[5,cc+1]:= '    '+FF6.Cena;
              StringGrid2.Cells[6,cc+1]:= '    '+FF6.NameFirm;
              StringGrid2.Cells[7,cc+1]:= '  '+FF6.Primehanie;
              v1:= FF1.ColihestvoString;
              v2:= FF6.Cena;
              v:= v1*v2;
              summ:= summ + v;
              StringGrid2.Cells[8,cc+1]:= v;
              Inc(cc);
              b:= true;
            end;
          Inc(c);
          Inc(cc1);
       end;
     if b = true then StringGrid2.Cells[9,cc]:= summ;
     cc1:= 0;
     Inc(cc2);
     Inc(cc2);
   end;
   CloseFile(F8);
   CloseFile(F1);
   CloseFile(F6);
   {$I+}
   StringGrid2.RowCount:= cc+1;//количество строк в таблице
   cc:= 0;
   c:= 0;
   cc2:= 0;
end;


Digitman   (2005-06-27 09:47:00) [7]


> в конце алгоритма


> "говорю" проге


т.е. алгоритм сам по себе, а "прога" сама по себе ?
так что ли ?


john_mag   (2005-06-27 09:45:00) [8]

evvcom ©   (27.06.05 09:38) [8]

Количество RowCount и ColCount в программе определяются динамически и количество ...Count-ов становится известно в конце алгоритма после чего я и "говорю" проге сколько нужно Count-ов.


Digitman   (2005-06-27 09:45:00) [9]


> Когда в таблицу посылаешь данные, то старые данные перезаписываются
> новыми- так?


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


> если в Count не посылается новое значение


НЕт у класса TCustomGrig свойства с именем Count !


john_mag   (2005-06-27 09:40:00) [10]

Когда в таблицу посылаешь данные, то старые данные перезаписываются новыми- так? а если в Count не посылается новое значение, то остается старое- так? это и есть накладка...

>Digitman ©   (27.06.05 09:13) [1]
К сожалению не помогло...


evvcom   (2005-06-27 09:38:00) [11]


> А чему вы удивляетесь? Зачем мне объявлять ненужные Count-ы?
> Сначала я их заполняю, а потом "говорю", что мне надо столько-то
> Count-ов!

Какие такие Count-ы Вы объявляете? И какие-такие заполняете? Сначала заполняете то, чего нет, а потом "говорите", что Вам их столько-то надо? Интересный алгоритм...


Digitman   (2005-06-27 09:32:00) [12]


> у меня RowCount определяется в конце всего этого безобразия


какого "безобразия" ?!


> два BitBtn на форме


да хоть косой десяток !
никакого отношения к сути вопроса ни BitBtn ни иные компоненты не имеют

ты спросил как "не используя циклов" очистить от значений StringGrid

строки грида как раз и содержат эти самые значения (в списках TStringList)

установка св-ва RowCount в 0 приводит к уничтожению стринг-листов, содержавших значения полей для каждой из строк грида


> накладка


какая такая "накладка" ?!


john_mag   (2005-06-27 09:31:00) [13]

evvcom ©   (27.06.05 09:26) [5]
>А что? Ты пишешь в строку, которой нет? Даже если в текущий момент времени у тебя всего 1 строка, [1] очистит ее.

А чему вы удивляетесь? Зачем мне объявлять ненужные Count-ы? Сначала я их заполняю, а потом "говорю", что мне надо столько-то Count-ов!

>Digitman ©   (27.06.05 09:13) [1]
К сожалению не помогло...


evvcom   (2005-06-27 09:26:00) [14]


> А если у меня RowCount определяется в конце всего этого
> безобразия

А что? Ты пишешь в строку, которой нет? Даже если в текущий момент времени у тебя всего 1 строка, [1] очистит ее.


cheloveck   (2005-06-27 09:21:00) [15]

john_mag ©   (27.06.05 09:06)  
Пытался использовать tSringGrid.Free???, но выдает ошибку...

А в справке посмотреть, что делает FREE не судьба?


john_mag   (2005-06-27 09:20:00) [16]

А если у меня RowCount определяется в конце всего этого безобразия? У меня два BitBtn на форме. При нажатии на них в StringGrid выводятся данные и в некоторых Count-ах идет накладка.


evvcom   (2005-06-27 09:20:00) [17]

StringGrid.Free не должен выдывать ошибку, если перед этим явно или неявно был вызван конструктор StringGrid := TStringGrid.Create(...); Ошибка должна была проявиться позже при последующем обращении к StringGrid.


Digitman   (2005-06-27 09:13:00) [18]

var
 rc: Integer;
..
 rc := StringGrid.RowCount;
 StringGrid.RowCount := 0;
 StringGrid.RowCount := rc;


Наверх

Титульная страница Поиск, карта сайта Написать письмо