PROCEDURE Check_Font; LABEL 999; CONST mSelected=1; {MODE_sw} mFull=2; vLayerType=154; {レイヤの種類} ltDesign=1; ltSheet=2; lvDesign=1; {LVP_sw} lvSheet=2; lvViewPort=3; objOptions_fs=2;{Selected} objOptions_f=0; {All} travOptions=0; {Shallow} layerOptions=0; {Current} GT_Annotation=2; {ビューポート注釈} vVPScale=1003; {ビューポートの縮尺} D_ID=32; End_Button=1; {Enter対策} iS_Rb=11; iF_Rb=12; iF_Gb=3; iF_St=4; iS_Cb=5; iP_Sb=6; iN_Sb=7; iGI_Sb=8; iGO_Sb=9; FT_Static=1; BT_Standard=1; BT_AutoCheck=4; BT_AutoRadio=5; tTEXT=10; {文字列} tGroup=11; {グループ} tDIMENSION=63; {寸法線} tPLUGINOBJECT=86; {プラグインオブジェクト} tViewPort=122; {ビューポート} vFontStyleEnabled=800; {フォントメニューの設定を利用する} VAR LVP_sw,MODE_sw :INTEGER; FSO_hd,FO_hd :HANDLE; V_scale :REAL; Item :INTEGER; Done :BOOLEAN; { P_pX,P_pY :REAL;} TO_hd,N_hd :HANDLE; G_num :INTEGER; FUNCTION Prev_Full(TO_hd:HANDLE):HANDLE; LABEL 99,999; BEGIN 99:CASE GetType(TO_hd) OF tTEXT,tDIMENSION,tGroup,tViewPort: BEGIN PREV_Full:=TO_hd; GOTO 999; END; tPLUGINOBJECT: IF GetObjectVariableBoolean(TO_hd,vFontStyleEnabled)=TRUE THEN BEGIN PREV_Full:=TO_hd; GOTO 999; END; OTHERWISE IF TO_hd=NIL THEN GOTO 999; END; TO_hd:=PrevObj(TO_hd); GOTO 99; 999:END; FUNCTION Next_Full(TO_hd:HANDLE):HANDLE; LABEL 99,999; BEGIN 99:CASE GetType(TO_hd) OF tTEXT,tDIMENSION,tGroup,tViewPort: BEGIN Next_Full:=TO_hd; GOTO 999; END; tPLUGINOBJECT: IF GetObjectVariableBoolean(TO_hd,vFontStyleEnabled)=TRUE THEN BEGIN Next_Full:=TO_hd; GOTO 999; END; OTHERWISE IF TO_hd=NIL THEN GOTO 999; END; TO_hd:=NextObj(TO_hd); GOTO 99; 999:END; PROCEDURE GetFont_Info(TO_hd:HANDLE; VAR N_hd:HANDLE); CONST pTextFontName=100; {アクティブドキュメントのフォントの名前} vFontID=28; {寸法文字のフォント番号} vFontSize=17; {寸法値のフォントサイズ(mm)} in_pt=72; in_mm=25.4; VAR OT_name :STRING; { pX,pY :REAL;} p1X,p1Y,p2X,p2Y :REAL; BEGIN IF N_hd<>NIL THEN BEGIN DelObject(N_hd); {グループ内オブジェクトとして扱われないように} N_hd:=NIL; END; IF TO_hd=NIL THEN BEGIN SetField(iF_St,Concat('デフォルトフォント ',GetPrefString(pTextFontName),' サイズ ',GetDefaultTextSize)); SetItemEnable(iS_Cb,FALSE); SysBeep; END ELSE BEGIN CASE GetType(TO_hd) OF tTEXT: OT_name:='文字列'; tDIMENSION: OT_name:='寸法線'; tPLUGINOBJECT: OT_name:=Concat('プラグインオブジェクト ',GetName(GetRecord(TO_hd,1))); tGroup: OT_name:='グループ'; tViewPort: OT_name:='ビューポート'; OTHERWISE OT_name:=Concat('オブジェクトタイプ ',GetType(TO_hd)); END; IF ( GetObjectVariableInt(TO_hd,vFontID)=0 ) & ( GetObjectVariableReal(TO_hd,vFontSize)=0 ) THEN SetField(iF_St,Concat('グループの階層 ',G_num,Chr(13), ' ',OT_name,Chr(13), ' N/A')) ELSE SetField(iF_St,Concat('グループの階層 ',G_num,Chr(13), ' ',OT_name,Chr(13), ' フォント ',GetFontName(GetObjectVariableInt(TO_hd, vFontID)),' サイズ ',GetObjectVariableReal(TO_hd,vFontSize)/in_mm*in_pt/V_scale)); SetItemEnable(iS_Cb,TRUE); { HCenter(TO_hd,pX,pY); SetVCenter(pX,pY);} GetBBox(TO_hd,p1X,p1Y,p2X,p2Y); CASE LVP_sw OF lvDesign: Rect(p1X,p1Y,p2X,p2Y); lvSheet: Rect(p1X/V_scale,p1Y/V_scale,p2X/V_scale,p2Y/V_scale); lvViewPort: Rect(p1X,p1Y,p2X,p2Y); END; N_hd:=LNewObj; SetPenFore(N_hd,65535,0,0); SetFPat(N_hd,0); SetDSelect(N_hd); END; ReDrawAll; IF Selected(TO_hd) THEN SetItem(iS_Cb,TRUE) ELSE SetItem(iS_Cb,FALSE); CASE MODE_sw OF mSelected: BEGIN IF G_num=0 THEN BEGIN IF PrevSObj(TO_hd)=NIL THEN SetItemEnable(iP_Sb,FALSE) ELSE SetItemEnable(iP_Sb,TRUE); IF NextSObj(TO_hd)=NIL THEN SetItemEnable(iN_Sb,FALSE) ELSE SetItemEnable(iN_Sb,TRUE); END ELSE BEGIN IF PrevObj(TO_hd)=NIL THEN SetItemEnable(iP_Sb,FALSE) ELSE SetItemEnable(iP_Sb,TRUE); IF NextObj(TO_hd)=NIL THEN SetItemEnable(iN_Sb,FALSE) ELSE SetItemEnable(iN_Sb,TRUE); END; CASE GetType(TO_hd) OF tGROUP: IF FInGroup(TO_hd)=NIL THEN SetItemEnable(iGI_Sb,FALSE) ELSE SetItemEnable(iGI_Sb,TRUE); tViewPort: IF FInGroup(GetVPGroup(TO_hd,GT_Annotation))=NIL THEN SetItemEnable(iGI_Sb,FALSE) ELSE SetItemEnable(iGI_Sb,TRUE); OTHERWISE SetItemEnable(iGI_Sb,FALSE); END; END; mFull: BEGIN IF Prev_Full(PrevObj(TO_hd))=NIL THEN SetItemEnable(iP_Sb,FALSE) ELSE SetItemEnable(iP_Sb,TRUE); IF Next_Full(NextObj(TO_hd))=NIL THEN SetItemEnable(iN_Sb,FALSE) ELSE SetItemEnable(iN_Sb,TRUE); CASE GetType(TO_hd) OF tGROUP: IF Next_Full(FInGroup(TO_hd))=NIL THEN SetItemEnable(iGI_Sb,FALSE) ELSE SetItemEnable(iGI_Sb,TRUE); tViewPort: IF Next_Full(FInGroup(GetVPGroup(TO_hd,GT_Annotation)))=NIL THEN SetItemEnable(iGI_Sb,FALSE) ELSE SetItemEnable(iGI_Sb,TRUE); OTHERWISE SetItemEnable(iGI_Sb,FALSE); END; END; END; IF G_num=0 THEN SetItemEnable(iGO_Sb,FALSE) ELSE IF GetType(GetParent(TO_hd))=tGROUP THEN SetItemEnable(iGO_Sb,TRUE) ELSE SetItemEnable(iGO_Sb,FALSE); END; FUNCTION GetFO_Handle(O_hd:HANDLE):BOOLEAN; {O_hd=NILでは実行されない} BEGIN FO_hd:=O_hd; GetFO_Handle:=TRUE; END; FUNCTION GetFSO_Handle(O_hd:HANDLE):BOOLEAN; {O_hd=NILでは実行されない} BEGIN FSO_hd:=O_hd; GetFSO_Handle:=TRUE; END; BEGIN MODE_sw:=mSelected; ForEachObjectInLayer(GetFSO_Handle,objOptions_fs,travOptions,layerOptions); ForEachObjectInLayer(GetFO_Handle,objOptions_f,travOptions,layerOptions); IF GetObjectVariableInt(ActLayer,vLayerType)=ltSheet THEN LVP_sw:=lvSheet; IF GetObjectVariableInt(ActLayer,vLayerType)=ltDesign THEN LVP_sw:=lvDesign; IF IsVPGroupContainedObject(FO_hd,GT_Annotation) THEN BEGIN LVP_sw:=lvViewPort; V_scale:=GetObjectVariableReal(FSActLayer,vVPScale); END ELSE V_scale:=GetLScale(ActLayer); BeginDialog(D_ID,1, 0, 0,390,205); SetTitle('フォントチェック'); AddButton('Selected',iS_Rb,BT_AutoRadio, 10, 10, 90, 25); AddButton('Full_Target',iF_Rb,BT_AutoRadio, 100, 10,180, 25); AddGroupBox('',iF_Gb, 10, 30,380,165); AddField('',iF_St,FT_Static, 20, 50,310, 95); AddButton('Select',iS_Cb,BT_AutoCheck, 320, 50,370, 65); AddButton('Prev',iP_Sb,BT_Standard, 65,105,145,125); AddButton('Next',iN_Sb,BT_Standard, 245,105,325,125); AddButton('In Group',iGI_Sb,BT_Standard, 155,105,235,125); AddButton('Out Group',iGO_Sb,BT_Standard, 155,135,235,155); AddButton('終了',End_Button,BT_Standard, 300,175,380,195); EndDialog; Done:=FALSE; GetDialog(D_ID); { GetVCenter(P_pX,P_pY);} CASE MODE_sw OF mSelected: BEGIN SetItem(iS_Rb,TRUE); TO_hd:=FSO_hd; END; mFull: BEGIN SetItem(iF_Rb,TRUE); TO_hd:=Next_Full(FO_hd); END; END; G_num:=0; GetFont_Info(TO_hd,N_hd); REPEAT DialogEvent(Item); CASE Item OF 1,2: {Enter、閉じる対策} BEGIN Done:=TRUE; { SetVCenter(P_pX,P_pY);} DelObject(N_hd); N_hd:=NIL; END; iS_Rb,iF_Rb: BEGIN IF LVP_sw=lvSheet THEN V_scale:=1; IF ItemSel(iS_Rb) THEN BEGIN MODE_sw:=mSelected; TO_hd:=NIL; IF Selected(FO_hd) THEN TO_hd:=FO_hd ELSE TO_hd:=NextSObj(FO_hd); END; IF ItemSel(iF_Rb) THEN BEGIN MODE_sw:=mFull; TO_hd:=Next_Full(FO_hd); END; G_num:=0; GetFont_Info(TO_hd,N_hd); END; iS_Cb: BEGIN IF ItemSel(iS_Cb) THEN SetSelect(TO_hd) ELSE SetDSelect(TO_hd); ReDraw; END; iP_Sb: BEGIN CASE MODE_sw OF {子孫グループは選択されていない、グループ内は全処理} mSelected: IF G_num=0 THEN TO_hd:=PrevSObj(TO_hd) ELSE TO_hd:=PrevObj(TO_hd); mFull: TO_hd:=Prev_Full(PrevObj(TO_hd)); END; GetFont_Info(TO_hd,N_hd); END; iN_Sb: BEGIN CASE Mode_sw OF {子孫グループは選択されていない、グループ内は全処理} mSelected: IF G_num=0 THEN TO_hd:=NextSObj(TO_hd) ELSE TO_hd:=NextObj(TO_hd); mFull: TO_hd:=Next_Full(NextObj(TO_hd)); END; GetFont_Info(TO_hd,N_hd); END; iGI_Sb: BEGIN CASE GetType(TO_hd) OF tViewPort: BEGIN V_scale:=GetObjectVariableReal(TO_hd,vVPScale); TO_hd:=FInGroup(GetVPGroup(TO_hd,GT_Annotation)); END; tGROUP: TO_hd:=FInGroup(TO_hd); END; IF Mode_sw=mFull THEN TO_hd:=Next_Full(TO_hd); G_num:=G_num+1; GetFont_Info(TO_hd,N_hd); END; iGO_Sb: BEGIN IF GetType(GetVPGroupParent(GetParent(TO_hd)))=tViewPort THEN BEGIN V_scale:=1; TO_hd:=GetVPGroupParent(GetParent(TO_hd)); END ELSE TO_hd:=GetParent(TO_hd); G_num:=G_num-1; GetFont_Info(TO_hd,N_hd); END; END; UNTIL Done; ClrDialog; END; Run(Check_Font);