PROCEDURE SelectT_ChangeF; LABEL 99,999; CONST tTEXT=10; {文字列} tGROUP=11; {グループ} tDIMENSION=63; {寸法線} tPLUGINOBJECT=86; {プラグインオブジェクト} tViewPort=122; {ビューポート} vLayerType=154; {レイヤの種類} ltDesign=1; ltSheet=2; lvDesign=1; {LVP_sw} lvSheet=2; lvViewPort=3; GT_Annotation=2; {ビューポート注釈} vVPScale=1003; {ビューポートの縮尺} vFontID=28; {寸法文字のフォント番号} vFontSize=17; {寸法値のフォントサイズ(mm)} in_pt=72; in_mm=25.4; PT_max=30; {大きく取るとエラー} G_max=100; OK_Button = 1; Cancel_Button = 2; VAR AL_name :STRING; VPG_hd,Root_hd,TO_hd :HANDLE; ST_num,P_num,G_num, T_num,D_num,PT_num, i,j,g, t,d,pt :INTEGER; ST_hd :DYNARRAY[] OF HANDLE; G_sw :DYNARRAY[] OF INTEGER; G_hd :DYNARRAY[] OF HANDLE; G_name :DYNARRAY[] OF STRING; PT_name :DYNARRAY[] OF STRING; ST_scale :DYNARRAY[] OF REAL; DfontID :DYNARRAY[] OF INTEGER; Dsize :DYNARRAY[] OF REAL; LVP_sw :INTEGER; V_scale :REAL; FUNCTION Sort_Array(before:DYNARRAY[] OF STRING; num:INTEGER; VAR after:DYNARRAY[] OF STRING):INTEGER; VAR i,j :INTEGER; BEGIN SortArray(before,num,0); j:=1; after[j]:=before[1]; IF num>=2 THEN FOR i:=2 TO num DO IF before[i]<>after[j] THEN BEGIN j:=j+1; after[j]:=before[i]; END; Sort_Array:=j; END; PROCEDURE Set_FontSet(F_sw,S_sw:BOOLEAN; fontName:STRING; Ssize:STRING); VAR i :INTEGER; BEGIN FOR i:=1 TO ST_num DO IF Selected(ST_hd[i]) THEN BEGIN IF F_sw THEN SetObjectVariableInt(ST_hd[i],vFontID,GetFontID(fontName)) ELSE SetObjectVariableInt(ST_hd[i],vFontID,DfontID[i]); IF S_sw THEN SetObjectVariableReal(ST_hd[i],vFontSize,Str2Num(Ssize)/in_pt*in_mm*ST_scale[i]) ELSE SetObjectVariableReal(ST_hd[i],vFontSize,Dsize[i]); ResetObject(ST_hd[i]); END; END; FUNCTION DIALOG_SAC(ST_num,T_num,D_num,PT_num,G_num,LVP_sw:INTEGER):LONGINT; CONST TC_ID=40; {−−−アクティブレイヤ上の文字系オブジェクト−−−} i1ST_Gb=41; i1T_Gb=3; i1T_Cb=10; i1TG_St=11; i1TV_St=12; i1D_Gb=4; i1D_Cb=50; {+5} i1DG_St=60; {+5} i1DV_St=70; {+5} i1PT_Gb=5; i1PT_Cb=100; {+PT_max} i1PTG_St=150; {+PT_max} i1PTV_St=200; {+PT_max} i1G_Gb=6; i1G_Cb=250; {+G_max} i1G_s=16; i1C_Gb=7; i1C_Lbn=17; G_str='InGroup'; V_str='InViewPort'; St1_width=-1; {auto} Lbn1_width=12; Lbn1_height=6; {−−−フォントチェック−−−} i2CF_Gb=42; i2S_Rb=21; i2F_Rb=22; i2M_s=20; i2F_St=25; i2S_Cb=26; i2P_Pb=27; i2N_Pb=28; St2_width=30; mSelected=1; {MODE_sw} mFull=2; {−−−文字設定−−−} i3SO_Gb=8; i3SO_St=30; i3FS_Gb=9; i3F_Cb=31; i3S_Cb=32; i3F_Pdm=33; i3S_Pdm=34; i3FS_St=35; i3ST_Pb=36; i3RT_Pb=37; St3_width=27; Pdm3_width=13; iLength=1; {適当で位置揃え} AE_Right=1; {Alignment Options} AE_Bottom=2; AE_Left=3; AM_Resize=0; AM_Shift=1; vDimensionType=26; {寸法の種類} VAR {keep} D_ID :LONGINT; PTN_num,CN_num, i2,MODE_sw :INTEGER; N_hd :HANDLE; {once} i,j :INTEGER; PROCEDURE Count_G; VAR so,sg, gt,gd,gpt, i,st,sd,spt :INTEGER; PROCEDURE Count_T(SG_sw:INTEGER; VAR st,sd,spt:INTEGER); VAR i :INTEGER; BEGIN FOR i:=1 TO ST_num DO IF ( G_sw[i]=SG_sw ) & ( Selected(ST_hd[i]) ) THEN CASE GetType(ST_hd[i]) OF tTEXT: st:=st+1; tDIMENSION: sd:=sd+1; tPLUGINOBJECT: spt:=spt+1; END; END; BEGIN sg:=0; gt:=0; gt:=0; gpt:=0; st:=0; sd:=0; spt:=0; Count_T(0,st,sd,spt); so:=st+sd+spt; FOR i:=1 TO G_num DO BEGIN st:=0; sd:=0; spt:=0; Count_T(i,st,sd,spt); IF st+sd+spt>0 THEN BEGIN SetSelect(G_hd[i]); sg:=sg+1; END ELSE SetDSelect(G_hd[i]); gt:=gt+st; gd:=gd+sd; gpt:=gpt+spt; END; so:=so+sg; SetField(i3SO_St,Concat( '選択数=',so,' (選択グループ=',sg,'/',G_num,')',Chr(13),Chr(13), '処理対象=',so-sg+gt+gd+gpt,'/',ST_num,' (グループ内=',gt+gd+gpt,')',Chr(13),Chr(13), '文字列=',Count(( INVIEWPORT & (L=AL_name) & (T=Text) & (SEL=TRUE) )),'/',T_num,' (',gt,')',Chr(13), '寸法線=',Count(( INVIEWPORT & (L=AL_name) & (T=DIMENSION) & (SEL=TRUE) )),'/',D_num,' (',gd,')',Chr(13), 'プラグインオブジェクト=',Count(( INVIEWPORT & (L=AL_name) & (T=PLUGINOBJECT) & (SEL=TRUE) )),'/',PT_num,' (',gpt,')' )); END; PROCEDURE ReChoice_T; VAR i :INTEGER; PROCEDURE Select_T(i:INTEGER); VAR j :INTEGER; BEGIN CASE GetType(ST_hd[i]) OF tTEXT: IF ItemSel(i1T_Cb) THEN SetSelect(ST_hd[i]); tDIMENSION: FOR j:=0 TO 5 DO IF ( GetObjectVariableInt(ST_hd[i],vDimensionType)=j ) & ItemSel(i1D_Cb+j) THEN SetSelect(ST_hd[i]); tPLUGINOBJECT: FOR j:=1 TO PTN_num DO IF ( GetName(GetRecord(ST_hd[i],1))=PT_name[j] ) & ItemSel(i1PT_Cb+j) THEN SetSelect(ST_hd[i]); END; END; PROCEDURE Choice_C(i:INTEGER); VAR j,CN :INTEGER; CS :STRING; BEGIN CN:=-1; FOR j:=1 TO CN_num DO BEGIN GetSelChoice(i1C_Lbn,CN+1,CN,CS); IF CN<>-1 THEN {-1=選択なし} BEGIN IF GetClass(ST_hd[i])=CS THEN Select_T(i); END ELSE j:=CN_num; END; END; PROCEDURE Choice_G(i:INTEGER); BEGIN IF ItemSel(i1G_Cb+G_sw[i]) THEN Choice_C(i); END; BEGIN DSelectAll; {シートレイヤ上からビューポート注釈内を解除できない、グループを解除} FOR i:=1 TO ST_num DO BEGIN SetDSelect(ST_hd[i]); Choice_G(i); END; END; PROCEDURE HandleEvents( VAR item : LONGINT; data : LONGINT); VAR {once} F_CN,S_CN :INTEGER; fontName,Ssize :STRING; size :REAL; FUNCTION Sort_List(L_ID:INTEGER):INTEGER; VAR L_str :DYNARRAY[] OF STRING; i,j, L_num :INTEGER; BEGIN L_num:=NumChoices(L_ID); IF L_num>1 THEN BEGIN ALLOCATE L_str[1..L_num]; FOR i:=1 TO L_num DO BEGIN GetChoiceStr(L_ID,0,L_str[i]); DelChoice(L_ID,0); END; SortArray(L_str,L_num,0); j:=0; InsertChoice(L_ID,j,L_str[1]); FOR i:=2 TO L_num DO IF L_str[i]<>L_str[i-1] THEN BEGIN j:=j+1; InsertChoice(L_ID,j,L_str[i]); END; END; Sort_List:=NumChoices(L_ID); END; PROCEDURE Insert_Font; VAR i,num :INTEGER; BEGIN DeleteAllItems(D_ID,i3F_Pdm); DeleteAllItems(D_ID,i3S_Pdm); FOR i:=1 TO ST_num DO IF Selected(ST_hd[i]) THEN BEGIN InsertChoice(i3F_Pdm,0,GetFontName(DfontID[i])); InsertChoice(i3S_Pdm,0,Num2Str(0,Dsize[i]/(in_mm)*in_pt/ST_scale[i])); END; num:=Sort_List(i3F_Pdm); num:=Sort_List(i3S_Pdm); END; FUNCTION Prev_i2(i2:INTEGER):INTEGER; LABEL 99; VAR i :INTEGER; BEGIN Prev_i2:=0; IF i2=1 THEN GOTO 99; FOR i:=i2-1 DOWNTO 1 DO IF Selected(ST_hd[i]) THEN BEGIN Prev_i2:=i; GOTO 99; END; 99:END; FUNCTION Next_i2(i2:INTEGER):INTEGER; LABEL 99; VAR i :INTEGER; BEGIN Next_i2:=0; IF i2=ST_num THEN GOTO 99; FOR i:=i2+1 TO ST_num DO IF Selected(ST_hd[i]) THEN BEGIN Next_i2:=i; GOTO 99; END; 99:END; PROCEDURE GetFont_Info(i2:INTEGER); CONST vFontID=28; {寸法文字のフォント番号} vFontSize=17; {寸法値のフォントサイズ(mm)} VAR G_info,OT_name :STRING; p1,p2 :POINT; BEGIN IF N_hd<>NIL THEN BEGIN DelObject(N_hd); {グループ内オブジェクトとして扱われないように} N_hd:=NIL; END; IF G_sw[i2]=0 THEN G_info:='' ELSE G_info:=G_name[G_sw[i2]]; CASE GetType(ST_hd[i2]) OF tTEXT: OT_name:='文字列'; tDIMENSION: OT_name:='寸法線'; tPLUGINOBJECT: OT_name:=Concat('プラグインオブジェクト ',GetName(GetRecord(ST_hd[i2],1))); tGroup: OT_name:='グループ'; tViewPort: OT_name:='ビューポート'; OTHERWISE OT_name:=Concat('オブジェクトタイプ ',GetType(ST_hd[i2])); END; SetField(i2F_St,Concat(G_info,Chr(13), ' ',OT_name,Chr(13), ' フォント ',GetFontName(GetObjectVariableInt(ST_hd[i2], vFontID)),' サイズ ',GetObjectVariableReal(ST_hd[i2],vFontSize)/in_mm*in_pt/ST_scale[i2])); GetBBox(ST_hd[i2],p1.x,p1.y,p2.x,p2.y); CASE LVP_sw OF lvDesign: Rect(p1.x,p1.y,p2.x,p2.y); lvSheet: Rect(p1.x/ST_scale[i2],p1.y/ST_scale[i2],p2.x/ST_scale[i2],p2.y/ST_scale[i2]); lvViewPort: Rect(p1.x,p1.y,p2.x,p2.y); END; N_hd:=LNewObj; SetPenFore(N_hd,65535,0,0); SetFPat(N_hd,0); SetDSelect(N_hd); IF Selected(ST_hd[i2]) THEN SetItem(i2S_Cb,TRUE) ELSE SetItem(i2S_Cb,FALSE); CASE MODE_sw OF mSelected: BEGIN IF Prev_i2(i2)=0 THEN SetItemEnable(i2P_Pb,FALSE) ELSE SetItemEnable(i2P_Pb,TRUE); IF Next_i2(i2)=0 THEN SetItemEnable(i2N_Pb,FALSE) ELSE SetItemEnable(i2N_Pb,TRUE); END; mFull: BEGIN IF i2=1 THEN SetItemEnable(i2P_Pb,FALSE) ELSE SetItemEnable(i2P_Pb,TRUE); IF i2=ST_num THEN SetItemEnable(i2N_Pb,FALSE) ELSE SetItemEnable(i2N_Pb,TRUE); END; END; END; PROCEDURE Get_Match; VAR F_CS,S_CS :STRING; i, CfontID,TfontID, mFS,nFS :INTEGER; Csize,Tsize :REAL; BEGIN GetSelChoice(i3F_Pdm,0,F_CN,F_CS); GetSelChoice(i3S_Pdm,0,S_CN,S_CS); CfontID:=GetFontID(F_CS); IF S_CS<>'' THEN Csize:=Str2Num(S_CS); FOR i:=1 TO ST_num DO BEGIN IF Selected(ST_hd[i]) THEN BEGIN TfontID:=GetObjectVariableInt(ST_hd[i],vFontID); Tsize:=GetObjectVariableReal(ST_hd[i],vFontSize)/in_mm*in_pt/ST_scale[i]; IF ItemSel(i3F_Cb) & ItemSel(i3S_Cb) THEN BEGIN IF ( TfontID=CfontID ) & ( Tsize=Csize ) THEN mFS:=mFS+1 ELSE nFS:=nFS+1; END ELSE BEGIN IF ItemSel(i3F_Cb) THEN IF TfontID=CfontID THEN mFS:=mFS+1 ELSE nFS:=nFS+1; IF ItemSel(i3S_Cb) THEN IF Tsize=Csize THEN mFS:=mFS+1 ELSE nFS:=nFS+1; END; END; END; SetField(i3FS_St,Concat('一致=',mFS,' 不一致=',nFS)); END; BEGIN CASE item OF SetupDialogC: {=2255:} BEGIN DisplayTabPane(D_ID,TC_ID,i1ST_Gb-TC_ID); {−−−アクティブレイヤ上の文字系オブジェクト−−−} IF T_num=0 THEN SetItemEnable(i1T_Gb,FALSE); IF D_num=0 THEN SetItemEnable(i1D_Gb,FALSE); IF PT_num=0 THEN SetItemEnable(i1PT_Gb,FALSE); SetItemEnable(i1TG_St,FALSE); SetItemEnable(i1TV_St,FALSE); FOR i:=0 TO 5 DO BEGIN SetItemEnable(i1D_Cb+i,FALSE); SetItemEnable(i1DG_St+i,FALSE); SetItemEnable(i1DV_St+i,FALSE); END; FOR j:=1 TO PTN_num DO BEGIN SetItemEnable(i1PTG_St+j,FALSE); SetItemEnable(i1PTV_St+j,FALSE); END; FOR i:=1 TO ST_num DO BEGIN IF GetType(ST_hd[i])=tDIMENSION THEN FOR j:=0 TO 5 DO IF GetObjectVariableInt(ST_hd[i],vDimensionType)=j THEN SetItemEnable(i1D_Cb+j,TRUE); IF G_sw[i]>0 THEN CASE GetType(ST_hd[i]) OF tTEXT: CASE GetType(G_hd[G_sw[i]]) OF tGROUP: SetItemEnable(i1TG_St,TRUE); tViewPort: SetItemEnable(i1TV_St,TRUE); END; tDIMENSION: FOR j:=0 TO 5 DO IF GetObjectVariableInt(ST_hd[i],vDimensionType)=j THEN CASE GetType(G_hd[G_sw[i]]) OF tGROUP: SetItemEnable(i1DG_St+j,TRUE); tViewPort: SetItemEnable(i1DV_St+j,TRUE); END; tPLUGINOBJECT: FOR j:=1 TO PTN_num DO BEGIN IF GetName(GetRecord(ST_hd[i],1))=PT_name[j] THEN CASE GetType(G_hd[G_sw[i]]) OF tGROUP: SetItemEnable(i1PTG_St+j,TRUE); tViewPort: SetItemEnable(i1PTV_St+j,TRUE); END; END; END; END; SetItem(i1G_Cb,TRUE); IF G_num=0 THEN SetItemEnable(i1G_Gb,FALSE); FOR i:=1 TO ST_num DO InsertChoice(i1C_Lbn,i-1,GetClass(ST_hd[i])); CN_num:=Sort_List(i1C_Lbn); FOR i:=1 TO CN_num DO SelChoice(i1C_Lbn,i-1,TRUE); {−−−文字設定−−−} SetItemEnable(i3F_Pdm,ItemSel(i3F_Cb)); SetItemEnable(i3S_Pdm,ItemSel(i3S_Cb)); END; TC_ID: BEGIN CASE GetActivePane(D_ID,TC_ID) OF {−−−アクティブレイヤ上の文字系オブジェクト−−−} i1ST_Gb-TC_ID: BEGIN DelObject(N_hd); N_hd:=NIL; ReChoice_T; Count_G; Insert_Font; ReDrawAll; END; {−−−フォントチェック−−−} i2CF_Gb-TC_ID: BEGIN IF Count(( INVIEWPORT & (L=AL_name) & (T IN [TEXT,DIMENSION,PLUGINOBJECT]) & (SEL=TRUE) ))=0 THEN BEGIN MODE_sw:=MFull; SetItem(i2F_Rb,TRUE); SetItemEnable(i2S_Rb,FALSE); END ELSE BEGIN MODE_sw:=mSelected; SetItem(i2S_Rb,TRUE); SetItemEnable(i2S_Rb,TRUE); END; i2:=1; IF MODE_sw=mSelected THEN IF NOT Selected(ST_hd[i2]) THEN i2:=Next_i2(i2); GetFont_Info(i2); ReDrawAll; END; END; END; {−−−アクティブレイヤ上の文字系オブジェクト−−−} { i1C_Lbn: BEGIN GetChoiceStr(i1C_Lbn,data,SPT_name); AlrtDialog(SPT_name); END;} i1T_Cb, i1D_Cb..i1D_Cb+5, i1C_Lbn, i1PT_Cb+1..i1PT_Cb+PT_max, i1G_Cb..i1G_Cb+G_max: BEGIN ReChoice_T; Count_G; Insert_Font; Get_Match; ReDrawAll; END; {−−−フォントチェック−−−} i2S_Rb,i2F_Rb: BEGIN IF ItemSel(i2S_Rb) THEN BEGIN MODE_sw:=mSelected; i2:=1; IF NOT Selected(ST_hd[i2]) THEN i2:=Next_i2(i2); END; IF ItemSel(i2F_Rb) THEN BEGIN MODE_sw:=mFull; i2:=1; END; GetFont_Info(i2); ReDrawAll; END; i2S_Cb: BEGIN IF ItemSel(i2S_Cb) THEN SetSelect(ST_hd[i2]) ELSE SetDSelect(ST_hd[i2]); { IF data=1 THEN SetSelect(ST_hd[i2]) ELSE SetDSelect(ST_hd[i2]);} Count_G; Insert_Font; Get_Match; ReDrawAll; END; i2P_Pb: BEGIN CASE MODE_sw OF mSelected: i2:=Prev_i2(i2); mFull: i2:=i2-1; END; GetFont_Info(i2); ReDrawAll; END; i2N_Pb: BEGIN CASE Mode_sw OF mSelected: i2:=Next_i2(i2); mFull: i2:=i2+1; END; GetFont_Info(i2); ReDrawAll; END; {−−−文字設定−−−} i3F_Cb,i3S_Cb,i3F_Pdm,i3S_Pdm: BEGIN SetItemEnable(i3F_Pdm,ItemSel(i3F_Cb)); SetItemEnable(i3S_Pdm,ItemSel(i3S_Cb)); Get_Match; END; i3ST_Pb: BEGIN GetSelChoice(i3F_Pdm,0,F_CN,fontName); GetSelChoice(i3S_Pdm,0,S_CN,Ssize); Set_FontSet(ItemSel(i3F_Cb),ItemSel(i3S_Cb),fontName,Ssize); Get_Match; ReDrawAll; END; i3RT_Pb: BEGIN Set_FontSet(FALSE,FALSE,fontName,Ssize); Get_Match; ReDrawAll; END; 2256: {=OK_Button,Cancel_Button:} IF GetActivePane(D_ID,TC_ID)=i2CF_Gb-TC_ID THEN BEGIN DelObject(N_hd); N_hd:=NIL; END; END; END; BEGIN D_ID := CreateLayout('文字を統一',TRUE,'OK','キャンセル'); {−−−アクティブレイヤ上の文字系オブジェクト−−−} CreateGroupBox (D_ID,i1ST_Gb,'選択',TRUE); {SetFirstLayoutItem (D_ID,i1ST_Gb);} CreateGroupBox (D_ID,i1T_Gb,'文字列',TRUE); SetFirstGroupItem (D_ID,i1ST_Gb,i1T_Gb); AlignItemEdge (D_ID,i1T_Gb,AE_Right,i1ST_Gb,AM_Resize); CreateGroupBox (D_ID,i1D_Gb,'寸法線',TRUE); SetBelowItem (D_ID,i1T_Gb,i1D_Gb,0,0); AlignItemEdge (D_ID,i1D_Gb,AE_Right,i1ST_Gb,AM_Resize); CreateGroupBox (D_ID,i1PT_Gb,'文字系プラグインオブジェクト',TRUE); SetBelowItem (D_ID,i1D_Gb,i1PT_Gb,0,0); AlignItemEdge (D_ID,i1PT_Gb,AE_Right,i1ST_Gb,AM_Resize); CreateGroupBox (D_ID,i1G_Gb,'グループごと',TRUE); SetBelowItem (D_ID,i1PT_Gb,i1G_Gb,0,0); AlignItemEdge (D_ID,i1G_Gb,AE_Bottom,i1G_Gb,AM_Resize); CreateGroupBox (D_ID,i1C_Gb,'クラスごと',TRUE); SetRightItem (D_ID,i1G_Gb,i1C_Gb,0,0); AlignItemEdge (D_ID,i1C_Gb,AE_Bottom,i1G_Gb,AM_Resize); CreateCheckBox (D_ID,i1T_Cb,''); SetFirstGroupItem (D_ID,i1T_Gb,i1T_Cb); CreateStaticText (D_ID,i1TG_St,G_str,St1_width); SetRightItem (D_ID,i1T_Cb,i1TG_St,0,0); AlignItemEdge (D_ID,i1TG_St,AE_Right,i1TG_St,AM_Shift); CreateStaticText (D_ID,i1TV_St,V_str,St1_width); SetRightItem (D_ID,i1TG_St,i1TV_St,0,0); AlignItemEdge (D_ID,i1TV_St,AE_Right,i1TV_St,AM_Shift); CreateCheckBox (D_ID,i1D_Cb,'縦横寸法'); SetFirstGroupItem (D_ID,i1D_Gb,i1D_Cb); CreateStaticText (D_ID,i1DG_St,G_str,St1_width); SetRightItem (D_ID,i1D_Cb,i1DG_St,0,0); AlignItemEdge (D_ID,i1DG_St,AE_Right,i1TG_St,AM_Shift); CreateStaticText (D_ID,i1DV_St,V_str,St1_width); SetRightItem (D_ID,i1DG_St,i1DV_St,0,0); AlignItemEdge (D_ID,i1DV_St,AE_Right,i1TV_St,AM_Shift); CreateCheckBox (D_ID,i1D_Cb+1,'斜め寸法'); SetBelowItem (D_ID,i1D_Cb,i1D_Cb+1,0,0); CreateStaticText (D_ID,i1DG_St+1,G_str,St1_width); SetRightItem (D_ID,i1D_Cb+1,i1DG_St+1,0,0); AlignItemEdge (D_ID,i1DG_St+1,AE_Right,i1TG_St,AM_Shift); CreateStaticText (D_ID,i1DV_St+1,V_str,St1_width); SetRightItem (D_ID,i1DG_St+1,i1DV_St+1,0,0); AlignItemEdge (D_ID,i1DV_St+1,AE_Right,i1TV_St,AM_Shift); CreateCheckBox (D_ID,i1D_Cb+2,'累進寸法'); SetBelowItem (D_ID,i1D_Cb+1,i1D_Cb+2,0,0); CreateStaticText (D_ID,i1DG_St+2,G_str,St1_width); SetRightItem (D_ID,i1D_Cb+2,i1DG_St+2,0,0); AlignItemEdge (D_ID,i1DG_St+2,AE_Right,i1TG_St,AM_Shift); CreateStaticText (D_ID,i1DV_St+2,V_str,St1_width); SetRightItem (D_ID,i1DG_St+2,i1DV_St+2,0,0); AlignItemEdge (D_ID,i1DV_St+2,AE_Right,i1TV_St,AM_Shift); CreateCheckBox (D_ID,i1D_Cb+3,'半径寸法'); SetBelowItem (D_ID,i1D_Cb+2,i1D_Cb+3,0,0); CreateStaticText (D_ID,i1DG_St+3,G_str,St1_width); SetRightItem (D_ID,i1D_Cb+3,i1DG_St+3,0,0); AlignItemEdge (D_ID,i1DG_St+3,AE_Right,i1TG_St,AM_Shift); CreateStaticText (D_ID,i1DV_St+3,V_str,St1_width); SetRightItem (D_ID,i1DG_St+3,i1DV_St+3,0,0); AlignItemEdge (D_ID,i1DV_St+3,AE_Right,i1TV_St,AM_Shift); CreateCheckBox (D_ID,i1D_Cb+4,'直径寸法'); SetBelowItem (D_ID,i1D_Cb+3,i1D_Cb+4,0,0); CreateStaticText (D_ID,i1DG_St+4,G_str,St1_width); SetRightItem (D_ID,i1D_Cb+4,i1DG_St+4,0,0); AlignItemEdge (D_ID,i1DG_St+4,AE_Right,i1TG_St,AM_Shift); CreateStaticText (D_ID,i1DV_St+4,V_str,St1_width); SetRightItem (D_ID,i1DG_St+4,i1DV_St+4,0,0); AlignItemEdge (D_ID,i1DV_St+4,AE_Right,i1TV_St,AM_Shift); CreateCheckBox (D_ID,i1D_Cb+5,'角度寸法'); SetBelowItem (D_ID,i1D_Cb+4,i1D_Cb+5,0,0); CreateStaticText (D_ID,i1DG_St+5,G_str,St1_width); SetRightItem (D_ID,i1D_Cb+5,i1DG_St+5,0,0); AlignItemEdge (D_ID,i1DG_St+5,AE_Right,i1TG_St,AM_Shift); CreateStaticText (D_ID,i1DV_St+5,V_str,St1_width); SetRightItem (D_ID,i1DG_St+5,i1DV_St+5,0,0); AlignItemEdge (D_ID,i1DV_St+5,AE_Right,i1TV_St,AM_Shift); IF PT_num<>0 THEN BEGIN PTN_num:=Sort_Array(PT_name,PT_num,PT_name); FOR i:=1 TO PTN_num DO BEGIN CreateCheckBox (D_ID,i1PT_Cb+i,PT_name[i]); IF i=1 THEN SetFirstGroupItem (D_ID,i1PT_Gb,i1PT_Cb+i) ELSE SetBelowItem (D_ID,i1PT_Cb+i-1,i1PT_Cb+i,0,0); CreateStaticText (D_ID,i1PTG_St+i,G_str,St1_width); SetRightItem (D_ID,i1PT_Cb+i,i1PTG_St+i,0,0); AlignItemEdge (D_ID,i1PTG_St+i,AE_Right,i1TG_St,AM_Shift); CreateStaticText (D_ID,i1PTV_St+i,V_str,St1_width); SetRightItem (D_ID,i1PTG_St+i,i1PTV_St+i,0,0); AlignItemEdge (D_ID,i1PTV_St+i,AE_Right,i1TV_St,AM_Shift); END; END; CreateCheckBox (D_ID,i1G_Cb,'グループ外'); SetFirstGroupItem (D_ID,i1G_Gb,i1G_Cb); AlignItemEdge (D_ID,i1G_Cb,AE_right,i1G_Gb,AM_Resize); CreateSeparator (D_ID,i1G_s,iLength); SetBelowItem (D_ID,i1G_Cb,i1G_s,0,0); AlignItemEdge (D_ID,i1G_s,AE_right,i1G_Gb,AM_Resize); IF G_num<>0 THEN BEGIN FOR i:=1 TO G_num DO BEGIN CreateCheckBox (D_ID,i1G_Cb+i,G_name[i]); IF i=1 THEN SetBelowItem (D_ID,i1G_s,i1G_Cb+i,0,0) ELSE SetBelowItem (D_ID,i1G_Cb+i-1,i1G_Cb+i,0,0); SetHelpString(i1G_Cb+i,'グループ内のオブジェクトは選別されます'); END; END; CreateListBoxN (D_ID,i1C_Lbn,Lbn1_width,Lbn1_height,TRUE); SetFirstGroupItem (D_ID,i1C_Gb,i1C_Lbn); SetHelpString(i1C_Lbn,'クラスを選択 複数選択可能'); {−−−フォントチェック−−−} CreateGroupBox (D_ID,i2CF_Gb,'確認',TRUE); {SetFirstLayoutItem (D_ID,i2CF_Gb);} CreateRadioButton (D_ID,i2S_Rb,'Selected'); CreateRadioButton (D_ID,i2F_Rb,'Full_Target'); CreateSeparator (D_ID,i2M_s,iLength); CreateStaticText (D_ID,i2F_St,Concat(Chr(13),Chr(13),Chr(13)),St2_width); CreateCheckBox (D_ID,i2S_Cb,'Select'); CreatePushButton (D_ID,i2P_Pb,'Prev'); CreatePushButton (D_ID,i2N_Pb,'Next'); SetFirstGroupItem (D_ID,i2CF_Gb,i2S_Rb); SetRightItem (D_ID,i2S_Rb,i2F_Rb,0,0); SetBelowItem (D_ID,i2S_Rb,i2M_s,0,0); AlignItemEdge (D_ID,i2M_s,AE_right,i2CF_Gb,AM_Resize); SetBelowItem (D_ID,i2M_s,i2F_St,0,0); SetRightItem (D_ID,i2F_St,i2S_Cb,0,0); AlignItemEdge (D_ID,i2S_Cb,AE_right,i2CF_Gb,AM_Resize); SetBelowItem (D_ID,i2F_St,i2P_Pb,0,0); SetRightItem (D_ID,i2P_Pb,i2N_Pb,0,0); {−−−タブコントロール−−−} CreateTabControl (D_ID,TC_ID); SetFirstLayoutItem (D_ID,TC_ID); CreateTabPane (D_ID,TC_ID,i1ST_Gb); CreateTabPane (D_ID,TC_ID,i2CF_Gb); {−−−文字設定−−−} CreateGroupBox (D_ID,i3SO_Gb,'選択中の対象オブジェクト',TRUE); CreateStaticText (D_ID,i3SO_St,Concat( '選択数=',0,' (選択グループ=',0,'/',G_num,')',Chr(13),Chr(13), '処理対象=',0,'/',ST_num,' (グループ内=',0,')',Chr(13),Chr(13), '文字列=',0,'/',T_num,' (',0,')',Chr(13), '寸法線=',0,'/',D_num,' (',0,')',Chr(13), 'プラグインオブジェクト=',0,'/',PT_num,' (',0,')' ),St3_width); CreateGroupBox (D_ID,i3FS_Gb,'変更する項目を選択',TRUE); CreateCheckBox (D_ID,i3F_Cb,'フォント'); CreateCheckBox (D_ID,i3S_Cb,'サイズ(ポイント)'); CreatePullDownMenu (D_ID,i3F_Pdm,Pdm3_width); CreatePullDownMenu (D_ID,i3S_Pdm,Pdm3_width); CreateStaticText (D_ID,i3FS_St,'',Pdm3_width*2); CreatePushButton (D_ID,i3ST_Pb,'適用'); CreatePushButton (D_ID,i3RT_Pb,'元に戻す'); SetRightItem (D_ID,TC_ID,i3SO_Gb,0,0); SetFirstGroupItem (D_ID,i3SO_Gb,i3SO_St); SetBelowItem (D_ID,i3SO_Gb,i3FS_Gb,0,0); SetFirstGroupItem (D_ID,i3FS_Gb,i3F_Cb); SetRightItem (D_ID,i3F_Cb,i3S_Cb,0,0); AlignItemEdge (D_ID,i3S_Cb,AE_Left,i3FS_Gb,AM_Shift); SetBelowItem (D_ID,i3F_Cb,i3F_Pdm,0,0); SetRightItem (D_ID,i3F_Pdm,i3S_Pdm,0,0); AlignItemEdge (D_ID,i3S_Pdm,AE_Left,i3FS_Gb,AM_Shift); SetBelowItem (D_ID,i3F_Pdm,i3FS_St,0,0); SetBelowItem (D_ID,i3FS_Gb,i3ST_Pb,0,0); SetRightItem (D_ID,i3ST_Pb,i3RT_Pb,0,0); SetHelpString(i3ST_Pb,'プラグインオブジェクトは更新されないので注意してください'); IF VerifyLayout(D_ID) THEN Dialog_SAC:=RunLayoutDialog(D_ID,HandleEvents); END; PROCEDURE Get_TextObject(O_hd:HANDLE; V_scale:REAL; G_sta:INTEGER; VAR t,d,pt:INTEGER); CONST vFontStyleEnabled=800; {フォントメニューの設定を利用する} PROCEDURE Get_FontSet(O_hd:HANDLE; V_scale:REAL; G_sta:INTEGER); LABEL 99; BEGIN i:=i+1; IF i>ST_num THEN GOTO 99; ST_hd[i]:=O_hd; G_sw[i]:=G_sta; ST_scale[i]:=V_scale; DfontID[i]:=GetObjectVariableInt(O_hd,vFontID); Dsize[i]:=GetObjectVariableReal(O_hd,vFontSize); { IF i<>0 THEN BEGIN Message(ST_num,'=',i,' OT=',GetType(ST_hd[i]),' ',GetClass(O_hd),' ',G_sw[i]); Wait(1); END;} 99:END; BEGIN CASE GetType(O_hd) OF tTEXT: BEGIN Get_FontSet(O_hd,V_scale,G_sta); t:=t+1; END; tDIMENSION: BEGIN Get_FontSet(O_hd,V_scale,G_sta); d:=d+1; END; tPLUGINOBJECT: BEGIN IF GetObjectVariableBoolean(O_hd,vFontStyleEnabled)=TRUE THEN BEGIN Get_FontSet(O_hd,V_scale,G_sta); pt:=pt+1; PT_name[pt]:=GetName(GetRecord(O_hd,1)); END; END; END; END; PROCEDURE Get_GroupObject(G_hd:HANDLE; V_scale:REAL; G_sta:INTEGER; VAR t,d,pt:INTEGER); VAR GO_hd :HANDLE; BEGIN GO_hd:=FInGroup(G_hd); WHILE GO_hd<>NIL DO BEGIN IF Selected(GO_hd) THEN CASE GetType(GO_hd) OF tGROUP: Get_GroupObject(GO_hd,V_scale,G_sta,t,d,pt); OTHERWISE Get_TextObject(GO_hd,V_scale,G_sta,t,d,pt); END; GO_hd:=NextSObj(GO_hd); END; END; PROCEDURE Select_RootHandle(R_hd:HANDLE); LABEL 99; BEGIN 99: SetSelect(R_hd); R_hd:=GetParent(R_hd); { AlrtDIALOG(Num2Str(0,GetType(R_hd)));} IF ( R_hd<>NIL ) & ( GetType(R_hd)=tGROUP ) THEN GOTO 99; END; FUNCTION Get_RootHandle(P_hd:HANDLE):HANDLE; LABEL 99; VAR O_hd :HANDLE; BEGIN CASE GetType(P_hd) OF tViewPort: O_hd:=GetVPGroup(P_hd,GT_Annotation); tGROUP: O_hd:=P_hd; OTHERWISE ; END; Get_RootHandle:=O_hd; IF GetType(O_hd)=tGROUP THEN O_hd:=FInGroup(O_hd); 99:WHILE O_hd<>NIL DO BEGIN IF Selected(O_hd) THEN BEGIN Get_RootHandle:=O_hd; O_hd:=FInGroup(O_hd); GOTO 99; END; O_hd:=NextSObj(O_hd); END; END; BEGIN AL_name:=GetLName(ActLayer); ST_num:=Count( INVIEWPORT & (L=AL_name) & (T IN [TEXT,DIMENSION,PLUGINOBJECT]) ); IF ST_num>0 THEN BEGIN ALLOCATE ST_hd[1..ST_num]; ALLOCATE G_sw[1..ST_num]; ALLOCATE ST_scale[1..ST_num]; ALLOCATE DfontID[1..ST_num]; ALLOCATE Dsize[1..ST_num]; END; P_num:=Count( INVIEWPORT & (L=AL_name) & (T=PLUGINOBJECT) ); IF P_num>0 THEN ALLOCATE PT_name[1..P_num]; G_num:=Count( INVIEWPORT & (L=AL_name) & ( (T=GROUP) | (ST=REGVIEWPORT) ) ); IF G_num>0 THEN BEGIN ALLOCATE G_hd[1..G_num]; ALLOCATE G_name[1..G_num]; END; DSelectAll; IF FSActLayer<>NIL THEN BEGIN VPG_hd:=FSActLayer; Root_hd:=Get_RootHandle(VPG_hd); END; SelectObj( INVIEWPORT & (L=AL_name) & ( (T IN [TEXT,DIMENSION,PLUGINOBJECT,GROUP]) | (ST=REGVIEWPORT) ) ); IF Root_hd=NIL THEN TO_hd:=FSActLayer ELSE TO_hd:=FInGroup(Root_hd); { AlrtDialog(Concat(GetType(Root_hd),',',GetType(TO_hd)));} IF GetObjectVariableInt(ActLayer,vLayerType)=ltSheet THEN LVP_sw:=lvSheet; IF GetObjectVariableInt(ActLayer,vLayerType)=ltDesign THEN LVP_sw:=lvDesign; IF IsVPGroupContainedObject(TO_hd,GT_Annotation) THEN BEGIN LVP_sw:=lvViewPort; V_scale:=GetObjectVariableReal(VPG_hd,vVPScale); END ELSE V_scale:=GetLScale(ActLayer); i:=0; j:=0; g:=0; t:=0; d:=0; pt:=0; WHILE TO_hd<>NIL DO BEGIN IF Selected(TO_hd) THEN {グループ1つ目対策} CASE GetType(TO_hd) OF tViewPort: BEGIN g:=g+1; G_hd[g]:=TO_hd; {FOR FEOIL} G_name[g]:=GetName(TO_hd); Get_GroupObject(GetVPGroup(TO_hd,GT_Annotation),GetObjectVariableReal(TO_hd,vVPScale),g,t,d,pt); END; tGROUP: BEGIN g:=g+1; j:=j+1; G_hd[g]:=TO_hd; {FOR FEOIL} G_name[g]:=Concat('グループ-',j); Get_GroupObject(TO_hd,V_scale,g,t,d,pt); END; OTHERWISE Get_TextObject(TO_hd,V_scale,0,t,d,pt); END; TO_hd:=NextSObj(TO_hd); END; { DSelectAll; グループをこえて働かない} DSelectObj(INVIEWPORT & ALL); IF VPG_hd<>NIL THEN SetSelect(VPG_hd); {2回連続使用対策} IF Root_hd<>NIL THEN Select_RootHandle(Root_hd); ReDrawAll; { AlrtDialog(Concat(ST_num,',',G_num,',',T_num,',',D_num,',',P_num)); AlrtDialog(Concat(i,',',g,',',t,',',d,',',pt));} ST_num:=i; G_num:=g; T_num:=t; D_num:=d; PT_num:=pt; {グループが数に影響} IF ST_num=0 THEN BEGIN AlrtDialog('対象となるオブジェクトがありません'); GOTO 999; END; IF PT_num>PT_max THEN BEGIN AlertCritical('スクリプトを修正する必要があります','設定値を超えるプラグインオブジェクトが見つかりました'); GOTO 999; END; IF G_num>G_max THEN BEGIN AlertCritical('スクリプトを修正する必要があります','設定値を超えるグループが見つかりました'); GOTO 999; END; IF DIALOG_SAC(ST_num,T_num,D_num,PT_num,G_num,LVP_sw)=Cancel_Button THEN BEGIN DSelectAll; {シートレイヤ上からビューポート注釈内を解除できない、グループを解除} FOR i:=1 TO ST_num DO BEGIN SetDSelect(ST_hd[i]); SetObjectVariableInt(ST_hd[i],vFontID,DfontID[i]); SetObjectVariableReal(ST_hd[i],vFontSize,Dsize[i]); ResetObject(ST_hd[i]); END; END; 999:END; Run(SelectT_ChangeF);