Как совершенно справедливо указано, вы не можете вызывать какие-либо элементы любого визуального компонента в фоновом потоке.
Чтобы отключить кнопку изнутри кода потока, вы должны иметь ссылку на кнопку ИЛИ ссылкусобытию, которому вы можете назначить объект потока - вы можете запустить поток внутри очереди или синхронизированной процедуры, например так: -
type
test=class(tthread)
ondisablebutton:tnotifyevent;
{...}
затем, когда в процедуре, которую вы инкапсулируете с помощью tthread.synchronizeВы можете вызвать событие, не забывая проверить, назначено ли оно ....
procedure test.synchronisedprocedure;
begin
if assigned(ondisablebutton) then
ondisablebuttone(self);
end;
Когда вы создаете созданный вами объект потока, вам нужно назначить кнопку ondisable для процедуры в формесодержащий кнопку, которая выглядит следующим образом: -
procedure form1.threadwantstodisablebutton(sender:tobject);
begin
button1.enabled:=false;
end;
для создания вашего потока необходима дополнительная строка: -
mythread:=test.create;
test.ondisablebutton:=form1.threadwantstodisablebutton;
примерно так, очевидно, вы должны иметь доступ к форме1 (илиформа, содержащая кнопку), где вы определяете и создаете свою ветку, что не обязательно является хорошим дизайном, но оно работает.