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

Вниз

Проблемы со StringGrid   Найти похожие ветки 

 
Magister Crazy ©   (2006-11-15 22:53) [0]

Есть кусок кода (обработчик кнопки):

for i:=0 to NumFields-1 do
 if i<>k then
 begin
  for j:=0 to NumFields-1 do
   sg_a.Cells[j,i]:=FloatToStr(a[i,j]*a[k,k]-a[k,j]*a[i,k]);
  sg_b.Cells[0,i]:=FloatToStr(b[i]*a[k,k]-b[k]*a[i,k]);
 end;


так вот в чем проблема. Непонятным образом последний элемент таблицы (с номером NumFields-1,NumFields-1) НЕ ПЕРЕРИСОВЫВАЕТСЯ. Но значение в нем МЕНЯЕТСЯ. Как его перерисовать вручную или как сделать так, чтобы само перерисовалось?


 
KilkennyCat ©   (2006-11-15 22:57) [1]

sg_a.update?


 
Magister Crazy ©   (2006-11-15 23:00) [2]

не работает :(


 
Magister Crazy ©   (2006-11-15 23:01) [3]

например, случай sg_a.visible:=false; sg.visible:=true; РАБОТАЕТ ИНОГДА.


 
KilkennyCat ©   (2006-11-15 23:13) [4]

вероятно, после этого цикла есть еще что-то, что не дает перерисоваться... может, стоит воткнуть application.procesmessage и посмотреть?


 
Magister Crazy ©   (2006-11-15 23:21) [5]

втыкал уже, после цикла есть Inc(k), но я не верю, что это мешает...


 
RASkov   (2006-11-16 02:59) [6]

Интересно, а как ты узнаешь, что значение меняется?
И Update, помоему, не перерисовывает контрол, а дает команду что нужно его перерисовать. Поетому может следует после Update вызвать Invalidate или вместо них обоих - Repaint.
Хотя если после Update делать application.procesmessage вроде бы должен был перерисоваться.
А может и нет в очереди сообщений - перерисовка - стоит только один раз и после Update могло что нибудь.....


 
MikePetrichenko ©   (2006-11-16 03:09) [7]

> if i<>k then
А к чему равно?


 
Magister Crazy ©   (2006-11-16 22:35) [8]


> Интересно, а как ты узнаешь, что значение меняется?


Просто вывожу ShowMessage() для соответствующей ячейки после цикла. Правильно, зараза, выводит. Пробовал и Repaint и Update+ProcessMessages - результат один. :((


> MikePetrichenko ©   (16.11.06 03:09) [7]
> > if i<>k then
> А к чему равно?


можно написать if i=k then continue;

смысл не изменится %)


 
Magister Crazy ©   (2006-11-16 22:39) [9]

Кстати говоря, последний элемент столбца sg_b так же не перерисовывается, но считается правильно.


 
Magister Crazy ©   (2006-11-16 22:44) [10]

Еще нашел забавный факт: при клике на ячейку, отличную от проблемной, проблемная волшебным образом перерисовывается!!! Ничерта не понимаю :(


 
RASkov   (2006-11-16 22:57) [11]

> [0] Magister Crazy ©   (15.11.06 22:53)

Попробуй показать полный код "Кнопки".


 
Magister Crazy ©   (2006-11-16 22:58) [12]

Лехко ;)


procedure TForm1.btnStepClick(Sender: TObject);
var i,j:integer;
var a:array[0..256] of array[0..256] of double;
var b:array[0..256] of double;
begin
if k=0 then
begin
 sg_a.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
 sg_b.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
end;

for i:=0 to NumFields-1 do
begin
 for j:=0 to NumFields-1 do
  a[i,j]:=StrToFloat(sg_a.Cells[j,i]);
 b[i]:=StrToFloat(sg_b.Cells[0,i]);
end;
sg_a.
for i:=0 to NumFields-1 do
 if i<>k then
 begin
  for j:=k to NumFields-1 do
   sg_a.Cells[j,i]:=FloatToStr(a[i,j]*a[k,k]-a[k,j]*a[i,k]);
  sg_b.Cells[0,i]:=FloatToStr(b[i]*a[k,k]-b[k]*a[i,k]);
 end;
 Inc(k);
end;


 
RASkov   (2006-11-16 23:18) [13]

> sg_a.

?
Так вроде все нормально. Что есть NumFields, k?
Сейчас попробую воспроизвести твою ситуацию.....


 
RASkov   (2006-11-16 23:55) [14]

Попробывал, все обновляется, правда у меня D7, может что и не так сделал, кинул на форму два SG и описал два обработчика - один твой.
procedure TForm1.FormCreate(Sender: TObject);
var i, j: Integer;
begin
 NumFields:=5;
 for i:=0 to NumFields-1 do begin
  for j:=0 to NumFields-1 do
   sg_a.Cells[j,i]:=FloatToStr(Random);
   sg_b.Cells[0,i]:=FloatToStr(Random);
  end;
end;

procedure TForm1.btn1Click(Sender: TObject);
var i,j:integer;
var a:array[0..256] of array[0..256] of double;
var b:array[0..256] of double;
begin
if k=0 then
begin
sg_a.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
sg_b.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
end;

for i:=0 to NumFields-1 do
begin
for j:=0 to NumFields-1 do
 a[i,j]:=StrToFloat(sg_a.Cells[j,i]);
b[i]:=StrToFloat(sg_b.Cells[0,i]);
end;
//sg_a.
for i:=0 to NumFields-1 do
if i<>k then
begin
 for j:=k to NumFields-1 do
  sg_a.Cells[j,i]:=FloatToStr(a[i,j]*a[k,k]-a[k,j]*a[i,k]);
 sg_b.Cells[0,i]:=FloatToStr(b[i]*a[k,k]-b[k]*a[i,k]);
end;
Inc(k);
end;

Но может быть я не правильно воссоздал ситуацию...


 
Magister Crazy ©   (2006-11-17 23:18) [15]

Ситуация правильная... К сожалению нет рабочей версии 7 Дельфи. Проверялась на 8 и 2005 и на обоих такая фигня...  Может это как-то связано с отключением редактирования ячеек... Хотя не верится в это...


 
RASkov   (2006-11-17 23:37) [16]

> [15] Magister Crazy ©   (17.11.06 23:18)

Ну включи их обратно на время, проверь... Кстати, как ты отключаешь редактирование строк... По умолчанию goEditing=False.


 
MsGuns ©   (2006-11-18 00:22) [17]

Magister Crazy ©  

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



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

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

Наверх




Память: 0.51 MB
Время: 0.051 c
6-1152890949
_kos
2006-07-14 19:29
2006.12.03
Socket в цикле


6-1152028321
SpellCaster
2006-07-04 19:52
2006.12.03
Странности у TTcpClient и TTcpServer


15-1163535845
sgTrA2_7605
2006-11-14 23:24
2006.12.03
работа с exe-файлом проекта Делфи


15-1163086909
Ламот
2006-11-09 18:41
2006.12.03
Вопрос по 1С (и, похоже, даже не по программированию)


1-1161708596
carmen
2006-10-24 20:49
2006.12.03
Создание dbgrideh на листе tabsheet компонента pagecontrol