Цитата(zubr @ 7:05:2008, 23:54 )

Работал с CS2 - все нормально работает.
Вот такой код в CS2 работает или будет работать?:
CODE
function GetGeometricBounds(Bound:TFRect):Olevariant;
begin
Result:=VarArrayOf([Bound.Top,Bound.Left,Bound.Bottom,Bound.Right]);
end;
function GetIndesignLibraryAsset(Indesign:OleVariant; LibraryName, AssetName:string):OleVariant;
var
lib:OleVariant;
i:integer;
AName:string;
begin
Result:=Null;
lib := GetIndesignLibrary(Indesign,LibraryName);
for i:=1 to Lib.Assets.Count do
begin
AName:=Lib.Assets[i].Name;
if ANSIUpperCase(AName)=ANSIUpperCase(AssetName)
then Result:=Lib.Assets[i];
end;
end;
function PlaceIndesignAsset(Indesign, Document, PlaceTo : OleVariant; page_n:integer; Bound:TFRect; LibraryName, AssetName:string):OleVariant;
var
Asset:OleVariant;
page:OleVariant;
p:Olevariant;
bounds:OleVariant;
begin
Asset:=GetIndesignLibraryAsset(Indesign, LibraryName, AssetName);
page:=Document.pages[page_n];
Result:=Asset.PlaceAsset(PlaceTo);
{$IFDEF CS3}
Result.Item[Result.Count].Move(page);
p:=VarArrayOf([Bound.Left, Bound.Top]);
Result.Item[Result.Count].Move(p);
bounds:=GetGeometricBounds(Bound);
Result.Item[Result.Count].GeometricBounds:=bounds;
{$ENDIF}
{$IFDEF CS1}
p:=VarArrayOf([Bound.Left, Bound.Top]);
Result.Item[Result.Count].Move(page,p);
bounds:=GetGeometricBounds(Bound);//правильно, но не работает
или
bounds:=OleVariant(VarArrayOf([Bound.Bottom,Bound.Left,Bound.Bottom+1,Bound.Righ
t]));// неправильно, но зато выставляет нижнюю границу корректно
Result.Item[Result.Count].GeometricBounds:=bounds;
{$ENDIF}
end;
Document и PlaceTo - это фактически и есть текущий документ. TFRect - тот же Rect, только поля - типа extended.
Это мой вариант функции вставки библиотечного элемента, для CS3 работает без вопросов. В CS1 как описал выше. Правда вариант кода для CS2 я тут не описал, не знаю как там правильно, но можно попробовать оба для CS1({$DEFINE CS1}) или CS3 ({$DEFINE CS3}).
Да - сама библиотека должн быть уже открыта.