Could not obtain OLE control window handle TKGAX

Автор graphdark, 05.04.21, 17:00:25

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

graphdark

Пытаюсь запустить AX в новом потоке.
Процедура для потока:
procedure TStUnit.DDDview;
var
kompasAX: TKGAX;
path, name: string;
i: integer;
begin
    name:=StUnit.DBGrid1.DataSource.DataSet.FieldByName('DesignDSHP').AsString;
    i:=pos('-',name)-1;
    if i>0 then
    begin
    path:=ExtractFilePath(ParamStr(0))+copy(name,1,i)+'.m3d';
    end else
    begin
      path:=ExtractFilePath(ParamStr(0))+name+'.m3d';
    end;
//    ShowMessage(path);
StUnit.Panel1.Visible:=true;
        kompasAX:=TKGAX.Create(StUnit.Panel1);
        kompasAX.Parent:=StUnit.Panel1;
        kompasAX.Align:=alClient;
        kompasAX.AddDocument(path);
        kompasAX.DocumenFileName:=path;
end;

Процедура execute:
procedure TOneThread.execute;
begin
inherited;
StUnit.DDDView;
end;

Вызов класса потока:

              Thread:=TOneThread.create(false);
              Thread.FreeOnTerminate:=true;

Если в одном потоке вызываю процедуру dddview, все хорошо, но медленно. Запускаю второй поток для dddiew-падает с ошибкой. Так понимаю крашится на
        kompasAX.Parent:=StUnit.Panel1;
Но как иначе контрорлу родительский элемент задать?

graphdark

Сам ответ нашел. Обращение к графическим элементам с целью перерисовки возможен только в основном потоке.