Страница 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();