複数のオブジェクトの位置情報を変えずにズームをします。
倍率はパーセント値とし、縦横連動/非連動を選択可能です。
選択したオブジェクトのみを作業対象にするために、作業用のレイヤーを作成し、対象オブジェクトを移動させ、選択レイヤーのみ編集できるようにモードを設定しています。通常「全レイヤの編集」モードで操作をしている方は、スクリプトの終わりに「.SetMultiLayer true」を追加してください。本当は「元に戻したい」んだけど、現在モードを取得する方法が分かりません。
もうひとつ。オブジェクトの移動にはクリップボードを介してcut&pasteでやってます。クリップボードの内容を保護したい人は、cut&pasteではなく、「movetolayer [移動先レイヤー名]」もいいかも知れません。
.StretchObjectの変形の基準点(Reference Point)の指定が、またhelpと違ってる~。
レイヤーの数とか、選択したオブジェクトを把握したりとか、オブジェクトが属しているレイヤーとか知れたらいいのにと思いながらまぁ出来たからいいや
'SaveObjectSpanZoom 'Copyright by albatross '2000/12/8 Version 1.00 dim c as long dim wln,wlbn as string dim zx,zy as long dim rp as long c=0 wlbn="SaveObjectSpanZoomProcessLayer" wln=wlbn BEGIN DIALOG object DLGC 276, 79, "Save Object's Span Zoom Process", SUB DC TEXT 5, 5, 115, 10, .TX1,"ズームの基準点を選択してください" OPTIONGROUP .RP OPTIONBUTTON 20, 50, 10, 10, .op1,"" '下左 OPTIONBUTTON 45, 50, 10, 10, .op2,"" '下中 OPTIONBUTTON 70, 50, 10, 10, .op3,"" '下右 OPTIONBUTTON 70, 35, 10, 10, .op4,"" '中右 OPTIONBUTTON 70, 20, 10, 10, .op5,"" '上右 OPTIONBUTTON 45, 20, 10, 10, .op6,"" '上中 OPTIONBUTTON 20, 20, 10, 10, .op7,"" '上左 OPTIONBUTTON 20, 35, 10, 10, .op8,"" '中左 OPTIONBUTTON 45, 35, 10, 10, .op9,"" '中中 OKBUTTON 150, 60, 40, 14, .bok CANCELBUTTON 210, 60, 40, 14, .bcsl SPINCONTROL 175, 20, 50, 12, .SX SPINCONTROL 175, 40, 50, 12, .SY CHECKBOX 235, 5, 30, 10, .CK, "等比" TEXT 145, 20, 20, 10, .TX2,"←→" TEXT 150, 40, 10, 20, .TX3,"↑↓" TEXT 135, 5, 85, 10, .TX4,"ズームの倍率を指定してください" TEXT 230, 25, 10, 10, .TX5,"%" TEXT 230, 45, 10, 10, .TX6,"%" END DIALOG sub DC(byval controlID%,byval event%) select case event% case 0 DLGC.RP.setvalue 8 dlgc.sx.setvalue 100 dlgc.sy.setvalue 100 dlgc.ck.setvalue 1 dlgc.ck.SETTHREESTATE false dlgc.sy.enable false case 1,2 if controlID=16 then if dlgc.ck.getvalue()=0 then dlgc.sy.enable true else dlgc.sy.enable false endif endif case else end select end sub WITHOBJECT "CorelDraw.Automation.9" if .isdocument()=false then stop if .isselection()=false then stop DRV%=dialog(DLGC) if DRV%>1 then stop zx= dlgc.sx.getvalue() if dlgc.ck.getvalue()=0 then zy= dlgc.sy.getvalue() else zy=zx endif rp= dlgc.rp.getvalue()+1 soc=.getobjectcount(true,true) .SuppressPainting TRUE .CutToClipboard on error goto ehl nxt: .selectlayer wln c=c+1 wln=wlbn & cstr(c) goto nxt cl: .NewLayer wln .SetMultiLayer FALSE .PasteFromClipboard .unselectall for c=1 to soc .selectnextobject false .StretchObject zX, 100, zY, 100, FALSE, FALSE, RP next c .UnSelectAll .ResumePainting stop ehl: resume at cl END WITHOBJECT