Страница 2 из 3

Добавлено: 07 июн 2005, 11:07
LAngel
Да, забыл... MyT нужно объявить где-нить...

Код: Выделить всё

  TForm1 = class(TForm)
    ...
  private
    { Private declarations }
    MyT: TMyThread;
  end;

Добавлено: 07 июн 2005, 11:17
ChPuK
я так и понял :)

Добавлено: 07 июн 2005, 13:59
ChPuK
все классно работает...
НО
странная вещь

у меня идел логирование в обычном TListBox и в зависимости от значений второго списка ячейки 1 списка окрашиваються 2 цветами - ошибки и просто логи
ну так вот, после того как я применил TThread у меня прорисовка списков погнала...

почему это может быть?

Добавлено: 07 июн 2005, 14:13
LAngel
Добавление в список идет из потока?
Может быть вызывать перерисовку вручную...

Добавлено: 07 июн 2005, 14:20
ChPuK
добавление в список идет из запускаемой процедуры :(

перерисовка идет при обычном событии onDrawItem

что делать...
цвета обязательны :(

и перерисовку тогда тоже в процедуру вносить?
как же нехотелось этим грузить....

Добавлено: 07 июн 2005, 15:06
LAngel
попробуй заключить добавление в "скобки" update

Код: Выделить всё

   ListBox1.Items.BeginUpdate;
   ListBox1.Items.Add('');
   ListBox1.Items.EndUpdate;
Если не получится, то все-таки, после добаления нужно будет делать ListBox1.Refresh

Добавлено: 07 июн 2005, 15:09
ChPuK
попробовал сделать с Update
тоже самое....

рефрешь... вот думаю....

вставлять рейшерь после вставки строки?

Добавлено: 07 июн 2005, 19:00
Eugie
ну так вот, после того как я применил TThread у меня прорисовка списков погнала...
почему это может быть?
Когда работаешь с формой из вторичного потока, нужно применять синхронизацию. Например:

Код: Выделить всё

procedure TMyThread.Execute;
begin
  ...
  Synchronize(ListBox1.Items.Add(str));
  ...
end;
Почитай также топик Using the main VCL/CLX thread в Delphi Help.

Добавлено: 08 июн 2005, 07:57
ChPuK
да, но если это добавление идет в потоке кнутри исполняемой процедуры, которую уже использует Thread
тогда что делать

Добавлено: 08 июн 2005, 08:02
LAngel
почти тоже самое :) забыл я про неё совсем
MyT.Synchronize();