표 캡션 추가 질문입니다.

안녕하세요.
표 캡션 관련하여 추가 질문 드립니다.

아래 코드를 실행해 보면
캡션이 없던 표에 캡션이 만들어 집니다.

function OnScriptMacro_script17()
{
	var myCtrl = HeadCtrl;
	while (myCtrl)
	{
		if (myCtrl.CtrlID == "tbl")
		{
			SetPosBySet(myCtrl.GetAnchorPos(0));
			FindCtrl();
			HAction.GetDefault("TablePropertyDialog", HParameterSet.HShapeObject.HSet);
			XHwpMessageBox.String = HParameterSet.HShapeObject.ShapeCaption.Side;
			XHwpMessageBox.DoModal();
			HAction.Execute("TablePropertyDialog", HParameterSet.HShapeObject.HSet);
		}
	myCtrl = myCtrl.Next;
	}
}

즉, HParameterSet.HShapeObject.ShapeCaption.Side값을
조회(read)만 해도

HAction.Execute("TablePropertyDialog", HParameterSet.HShapeObject.HSet);

가 실행되면서
그 값이 설정(write)되는 것 같습니다.
아래 부분(메시지 박스 부분)을 없앤 후(값을 조회하지 않고) 실행하면
표의 캡션에 변화가 없습니다.

XHwpMessageBox.String = HParameterSet.HShapeObject.ShapeCaption.Side;
XHwpMessageBox.DoModal();
  • ps.
    지난 글의 답변에서
HParameterSet.HShapeObject.ShapeCaption.Side = 0xFF;

라고 방법을 소개해 주셨는데
HParameterSet.HShapeObject.ShapeCaption.Side값이
0~3 이 아니라도

HAction.Execute("TablePropertyDialog", HParameterSet.HShapeObject.HSet);

줄이 실행되면서 표의 왼쪽에 캡션이 만들어 집니다.

1개의 좋아요

안녕하세요

조금 더 번거롭지만 아래처럼 Set을 새로 만들어서 하시면 될 것 같습니다.
확인하시고 추가 문의 사항 있으시면 다시 말씀 부탁 드립니다.
감사합니다.

var myCtrl = HeadCtrl;
	while (myCtrl)
	{
		if (myCtrl.CtrlID == "tbl")
		{
			SetPosBySet(myCtrl.GetAnchorPos(0));
			FindCtrl();
			var tblAction = CreateAction("TablePropertyDialog")
			var tblSet = tblAction.CreateSet()
			tblAction.GetDefault(tblSet)
			if(tblSet.ItemExist("ShapeCaption"))
			{
				var captionSet = tblSet.Item("ShapeCaption")
				if(captionSet.ItemExist("Side"))
				{
					switch(captionSet.Item("Side"))
					{
						case SideType("Left"):
							XHwpMessageBox.String = "left";
							XHwpMessageBox.DoModal();
							break;
						case SideType("Right"):
							XHwpMessageBox.String = "right";
							XHwpMessageBox.DoModal();
							break;
						case SideType("Top"):
							XHwpMessageBox.String = "top";
							XHwpMessageBox.DoModal();
							break;
						case SideType("Bottom"):
							XHwpMessageBox.String = "bottom";
							XHwpMessageBox.DoModal();
							break;
					}
				}
			}
		}
		myCtrl = myCtrl.Next;
	}
2개의 좋아요