Aleksey
Зарегистрирован: 21.12.2008 Сообщения: 1
|
Добавлено: Вс Дек 21, 2008 11:51 pm Заголовок сообщения: Delphi и слой анимации |
|
|
Здравствуйте.
Программа для отрисовки трассы спутника на карте мира.
При использовании анимационного слоя отрисовка трассы во время исполнения программы не происходит. Отрисовка происходит только после изменеия окна (изменеие размеров окна выделение объектов и т.д.). Т.е. во время выполнения процедуры MapInfo не перерисовывает Объекты изменяемые в анимационном слое.
Если делать слой не анимационным , то все работает. Объект
отображается сразу и изменяется.
Если кто-нибудь использовал анимационные слои в delphi приложениях, подскажите пожалуйста как это правильно сделать.
Код программы следующий:
//подключаюсь к mapinfo plmapper - это компонент Tpanel
MI := CreateOLEObject('MapInfo.Application');
plMapper.Caption := 'MI OLE-Server running... Open table, please...';
MI.Do(Format('Set Application Window %D', [Handle]));
MI.Do(Format('Set Next Document Parent %D Style %D', [plMapper.Handle, WIN_STYLE_CHILD
//открываю карту мира
if NOT OpenDialog.Execute then Exit;
OpenDialog.InitialDir := ExtractFilePath(OpenDialog.FileName);
tab_name := ExtractFileName(ChangeFileExt(OpenDialog.FileName, ''));
try
MI.Do(Format('Open Table "%S" As %S', [OpenDialog.FileName, tab_name]));
except
Raise;
Exit;
end;
if TableNum = 0 then
begin
MI.Do(Format('Map From %S', [tab_name]));
MapperHandle := MI.Eval(Format('WindowInfo(FrontWindow(), %D)', [WIN_INFO_WND]));
MI.Do('Set Map Display Position');
end
else MI.Do(Format('Add Map Layer %S ', [tab_name]));
RepaintMapper;
Inc(TableNum);
// создаю анимационный слой для отрисовки трассы
tmpfile:='"e:\temp\temp_tbl.tab"';
MI.Do('Dim animtab As String');
MI.Do(Format('animtab=%S',[tmpfile]));
MI.Do('Create Table tmp_demo ( Name Char(10),Number SmallInt ) File animtab');
MI.Do('Create Map For tmp_demo');
MI.Do('Add MapLayer tmp_demo Animate');
//отрисовка трассы (в данном коде просто имитация - вывод функции sin)
Mi.do('Dim PointSat As Object');
Mi.do('Create Point Into Variable PointSat (-180,0)');
MI.Do('Insert Into tmp_demo (obj) Values (PointSat)');
for j:=2 to 3 do
begin
MI.Do(Format('Dim myobj%d As Object',[j]));
MI.Do('Set Style Pen MakePen ( 2, 2, 16711680)');
MI.Do(Format('Create Pline Into Variable myobj%d 0',[j]));
MI.Do(Format('Alter Object myobj%d Node Add(%d,%d)',[j,-180,0]));
mi.do(Format('Insert Into tmp_demo (obj) Values (myobj%d)',[j]));
i:=-180;
repeat
y2:=5*j*sin(i);
Mi.do(Format('Alter Object PointSat Geography 1, %d',[i]));
Mi.do(Format('Alter Object PointSat Geography 2, %f',[y2]));
MI.do(Format('Alter Object myobj%d Node Add(%d,%F)',[j,i,Y2]));
MI.Do(format('Update tmp_demo set obj=myobj%d where Rowid=%d',[j,j]));
MI.Do(format('Update tmp_demo set obj=PointSat where Rowid=1',[j]));
i:=i+1;
until i=180;
end; |
|