Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.49 MB
Время: 0.043 c
2-1163345377
Cr3at0r
2006-11-12 18:29
2006.12.03
FindFirst


4-1153208832
anton1209
2006-07-18 11:47
2006.12.03
Flow control в BCD


2-1163715808
DoktorX
2006-11-17 01:23
2006.12.03
Как в масив добавить результат полученный с анализа изображения?


2-1163690295
Svoja4ok
2006-11-16 18:18
2006.12.03
Просто в XLS... сбился с ног...


15-1163508842
Андрей Сенченко
2006-11-14 15:54
2006.12.03
DOC. Память для EXEC





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский