![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы со StringGrid [D2005]
Magister Crazy © (2006-11-15 22:53:00)Есть кусок кода (обработчик кнопки):
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) НЕ ПЕРЕРИСОВЫВАЕТСЯ. Но значение в нем МЕНЯЕТСЯ. Как его перерисовать вручную или как сделать так, чтобы само перерисовалось?
MsGuns (2006-11-18 00:22:00) [1]Magister Crazy ©
Попробуйте сначала проставить отступы в коде, чтобы он стал, наконец, читабельным. Потом нарисуйте блок-схему. Потом подумайте. Как минимум, пару несуразностей Вы должны найти.
RASkov (2006-11-17 23:37:00) [2]> [15] Magister Crazy © (17.11.06 23:18)
Ну включи их обратно на время, проверь... Кстати, как ты отключаешь редактирование строк... По умолчанию goEditing=False.
Magister Crazy (2006-11-17 23:18:00) [3]Ситуация правильная... К сожалению нет рабочей версии 7 Дельфи. Проверялась на 8 и 2005 и на обоих такая фигня... Может это как-то связано с отключением редактирования ячеек... Хотя не верится в это...
RASkov (2006-11-16 23:55:00) [4]Попробывал, все обновляется, правда у меня 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;
Но может быть я не правильно воссоздал ситуацию...
RASkov (2006-11-16 23:18:00) [5]> sg_a.
?
Так вроде все нормально. Что есть NumFields, k?
Сейчас попробую воспроизвести твою ситуацию.....
Magister Crazy (2006-11-16 22:58:00) [6]Лехко ;)
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 22:57:00) [7]> [0] Magister Crazy © (15.11.06 22:53)
Попробуй показать полный код "Кнопки".
Magister Crazy (2006-11-16 22:44:00) [8]Еще нашел забавный факт: при клике на ячейку, отличную от проблемной, проблемная волшебным образом перерисовывается!!! Ничерта не понимаю :(
Magister Crazy (2006-11-16 22:39:00) [9]Кстати говоря, последний элемент столбца sg_b так же не перерисовывается, но считается правильно.
Magister Crazy (2006-11-16 22:35:00) [10]
> Интересно, а как ты узнаешь, что значение меняется?
Просто вывожу ShowMessage() для соответствующей ячейки после цикла. Правильно, зараза, выводит. Пробовал и Repaint и Update+ProcessMessages - результат один. :((
> MikePetrichenko © (16.11.06 03:09) [7]
> > if i<>k then
> А к чему равно?
можно написать if i=k then continue;
смысл не изменится %)
MikePetrichenko (2006-11-16 03:09:00) [11]> if i<>k then
А к чему равно?
RASkov (2006-11-16 02:59:00) [12]Интересно, а как ты узнаешь, что значение меняется?
И Update, помоему, не перерисовывает контрол, а дает команду что нужно его перерисовать. Поетому может следует после Update вызвать Invalidate или вместо них обоих - Repaint.
Хотя если после Update делать application.procesmessage вроде бы должен был перерисоваться.
А может и нет в очереди сообщений - перерисовка - стоит только один раз и после Update могло что нибудь.....
Magister Crazy (2006-11-15 23:21:00) [13]втыкал уже, после цикла есть Inc(k), но я не верю, что это мешает...
KilkennyCat (2006-11-15 23:13:00) [14]вероятно, после этого цикла есть еще что-то, что не дает перерисоваться... может, стоит воткнуть application.procesmessage и посмотреть?
Magister Crazy (2006-11-15 23:01:00) [15]например, случай sg_a.visible:=false; sg.visible:=true; РАБОТАЕТ ИНОГДА.
Magister Crazy (2006-11-15 23:00:00) [16]не работает :(
KilkennyCat (2006-11-15 22:57:00) [17]sg_a.update?