Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

StringGrid   Найти похожие ветки 

 
john_mag ©   (2005-06-27 09:06) [0]

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


 
Digitman ©   (2005-06-27 09:13) [1]

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


 
evvcom ©   (2005-06-27 09:20) [2]

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


 
john_mag ©   (2005-06-27 09:20) [3]

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


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

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

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


 
evvcom ©   (2005-06-27 09:26) [5]


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

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


 
john_mag ©   (2005-06-27 09:31) [6]

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

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

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


 
Digitman ©   (2005-06-27 09:32) [7]


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


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


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


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

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

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

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


> накладка


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


 
evvcom ©   (2005-06-27 09:38) [8]


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

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


 
john_mag ©   (2005-06-27 09:40) [9]

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

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


 
john_mag ©   (2005-06-27 09:45) [10]

evvcom ©   (27.06.05 09:38) [8]

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


 
Digitman ©   (2005-06-27 09:45) [11]


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


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


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


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


 
Digitman ©   (2005-06-27 09:47) [12]


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


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


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


 
john_mag ©   (2005-06-27 09:51) [13]

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;


 
TUser ©   (2005-06-27 10:06) [14]

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


 
Digitman ©   (2005-06-27 10:07) [15]


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


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


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

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

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

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

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

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


 
Digitman ©   (2005-06-27 10:14) [16]

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


 
john_mag ©   (2005-06-27 10:21) [17]

Digitman ©   (27.06.05 10:14) [16]

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

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


 
Digitman ©   (2005-06-27 10:34) [18]


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


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



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.035 c
6-1113390100
atruhin
2005-04-13 15:01
2005.07.18
Зачем вызывается WSAStartup при каждом создании сокета.


1-1119633216
Начинающий2
2005-06-24 21:13
2005.07.18
Несколько вопросов по шрифтам и еще один.


14-1119873163
_Anton
2005-06-27 15:52
2005.07.18
Динамичаски добавить поле


3-1117962970
Гном23
2005-06-05 13:16
2005.07.18
Вопрос по TQuery


4-1116836158
MACTEP'oK
2005-05-23 12:15
2005.07.18
Как получить доступ к памяти выделеной под любое приложение.