Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синхронизация, вывода текста и графики 
:(
    Опции темы
kindDevil
Дата 8.2.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 10.10.2005

Репутация: нет
Всего: нет



есть поцедура

Код

 procedure Count_Koefficients;
  var i,j:integer;
    ks1,ks2,ks3:string;
  begin
      k1 := 0;
      k2 := 0;
      k3 := 0;

          for i := Border1.Min to Border1.Max do
               k1 := k1 + F_Massive[i];

          for i := Border2.Min to Border2.Max do
               k2 := k2 + F_Massive[i];

          for i := border1.Min to Border2.Max do
               k3 := k3 + F_Massive[i];

      k1 := k1/((N+Mass_Osnast)*(Border1.Max - Border1.Min)*(U/Mass_Tar_gr));
      k2 := k2/((N+Mass_Osnast)*(Border2.Max - Border2.Min)*(U/Mass_Tar_gr));
      k3 := k3/((N+Mass_Osnast)*(Border2.Max - Border1.Min)*(U/Mass_Tar_gr));

      writeln (File_lst,inttostr(Cur_H_Period div 2)+' '+floattostr(k1)+' '+floattostr(k2)+' '+floattostr(k3));
      ks1 := floattostr(k1);
      ks2 := floattostr(k2);
      ks3 := floattostr(k3);
        for j := 3 to length (ks1) do
          delete(ks1,j,1);
        for j := 3 to length (ks2) do
          delete(ks2,j,1);
        for j := 3 to length (ks3) do
          delete(ks3,j,1);
      pole.Lines.Add(' ¹ '+inttostr(Cur_H_Period div 2)+' | '+ks1+' | '+ks2+' | '+ks3);
      
      inc(x_point);
      y_point := trunc(k3*100);
      field.canvas.moveto (x_point,0);  
      field.canvas.lineto(x_point,y_point);

      if (Cur_H_Period div 2)  mod Per_meter = 0 then begin
                                                   assignfile (File_grf,filename+'.grf');
                                                   reset(File_grf);
                                                   seek(file_grf,filesize(file_grf));
                                                   write (file_grf,F_Massive);
                                                   closefile(file_grf);
                                                  end;
  end;



она выполняется в цикле:

Код


REPEAT
    if End_of_Full_Period then
        begin
           for i:= 306 to 611 do
                F_Massive[i] := work;
        Count_Koefficients;
         end;
UNTIL End_of_cycle;
 


так вот почему-то кусок кода из процедуры Count_Koefficients

Код

      inc(x_point);
      y_point := trunc(k3*100);
      field.canvas.moveto (x_point,0);  
      field.canvas.lineto(x_point,y_point);


подчистую игнорируется.
т.е. во время работы цикла выводится только текст в memo с именем pole,
а на канву картинки field графика выводится только когда цикл заканчивается, а требуется чтобы все происхоило синхронно.
в чем причина такой задержки? как это можно исправить?  smile уже 3 часа мучаюсь...

PM MAIL ICQ   Вверх
Rennigth
Дата 8.2.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Код

REPEAT
    if End_of_Full_Period then
        begin
           for i:= 306 to 611 do
                F_Massive[i] := work;
        Count_Koefficients;
        Application.ProcessMessages;
         end;
UNTIL End_of_cycle;


Memo просто умеет сама себя обновлять, а канву надо ручками. Самое простое это  воткнуть Application.ProcessMessages

Добавлено @ 15:12 
или field.Invalidate 
PS: незнаю кто такой field у тебя.

Это сообщение отредактировал(а) Rennigth - 8.2.2007, 15:10


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
kindDevil
Дата 8.2.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 10.10.2005

Репутация: нет
Всего: нет



у меня. 
field : TImage
и самое странное, что вся картинка, которая должна была рисоваться постепенно, отображается сразу.
это и связано с тем, что нужно обновление? 
не совсем понимаю, но спасибо
PM MAIL ICQ   Вверх
aktuba
Дата 10.2.2007, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Цитата

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


А что именно не понятно? Канва обновляется, когда обновляется форма, т.е. при поступлении сообщения WM_Paint. Если ты что-то отрисовываешь на канве, то все изменения будут происходить во время перерисовки формы. Для этого тебе и предложили использовать Application.ProcessMessages;


--------------------
user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0449 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.