Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизПроблемы со 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c