savespanz.csc

 複数のオブジェクトの位置情報を変えずにズームをします。
 倍率はパーセント値とし、縦横連動/非連動を選択可能です。
 選択したオブジェクトのみを作業対象にするために、作業用のレイヤーを作成し、対象オブジェクトを移動させ、選択レイヤーのみ編集できるようにモードを設定しています。通常「全レイヤの編集」モードで操作をしている方は、スクリプトの終わりに「.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

<<戻る