디자이너 디자이너에서 아웃풋(로그) 보는 방법.
페이지 정보
본문
안녕하세요. 엔지엠소프트웨어입니다. 리셀러가 아닌 경우 디자이너를 사용할일이 없을텐데요. 자신이 만든 스크립트를 좀 더 이쁘고 멋있게 포장하거나 기능을 확장할 때 디자이너를 사용합니다. 엔지엠이 아닌 자신만의 플레이어를 판매하고 싶은 경우에 사용하는거죠^^; 꼭 이런 이유가 아니더라도 여러가지 디자이너를 사용해야 하는 필요성이 있기도 합니다. 별도의 인증 방법이나 우회 또는 제약을 줄 수 있기 때문입니다. 오늘은 디자이너를 개발하면서 동작에 대한 문제를 파악하기 위한 아웃풋 출력에 대해 알아보도록 하겠습니다.
이전 내용들을 잘 따라오셨다면, 이 내용도 크게 어렵지는 않을겁니다. 우선, 비주얼 스튜디오를 실행하고 MyPlayer 프로젝트를 불러오세요. 불필요하게 폼이 크니 좀 줄여주도록 하겠습니다. 아래와 같이 ①폼을 클릭한 후 Alt+Enter(속성)를 누르세요. 그리고, ②사이즈를 그림과 같이 조정한 후 F5(실행)를 눌러서 실행하세요.
플레이어가 조정한 사이즈로 작아진 것을 확인할 수 있습니다. 이제 이 글의 핵심 내용인 로그를 출력하기 위한 준비를 해야겠죠? 속성창에서 NGM Output의 속성들을 모두 True로 변경합니다. 이 값들은 엔지엠 에디터의 보기 메뉴에 있는 항목과 동일합니다. 에디터를 사용해본 분들은 금방 어떤 내용인지 이해할 수 있을겁니다^^;
아웃풋 내용을 화면에 표시할 RichTextBox 콘트롤을 하나 추가한 후 위치 및 사이즈를 적절하게 조정하세요.
- 도구 상자의 검색에 "RichTextBox"를 입력하세요.
- Windows Forms 카테고리에 있는 RichTextBox를 선택한 후 폼 디자인에 드래그 앤 드롭으로 추가합니다.
- 위치와 사이즈를 적절하게 조정하세요.
F7을 눌러서 소스 보기로 이동하세요.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyPlayer
{
public partial class Form1 : Designer.ComponentDefault.MainView
{
public Form1()
{
InitializeComponent();
IsOutput = true;
}
public override void WriteOutput(string message)
{
richTextBox1.AppendText(message);
richTextBox1.AppendText(Environment.NewLine);
}
}
}
IsOutput을 true로 설정해주세요. 이 속성이 true로 되어 있어야 아웃풋(로그)을 받아볼 수 있습니다. 하단에 있는 WriteOutput 메소드는 아웃풋 메시지를 표시하는 역할을 합니다. 상속받은 MainView의 메소드를 제정의 합니다. 이제 실행(F5) 해보세요. 아래 그림과 같이 "크로스 스레드 작업이 잘못되었습니다." 에러가 발생합니다.
이 에러가 발생하는 이유는 스크립트를 실행하는 스레드에서 UI 스레드에 접근하기 때문에 발생되는 문제입니다. 아래와 같이 코드를 수정한 후 다시 해보세요. 코드에 대해 설명해야 할 부분이 많지만, 프로그래밍 강의는 아니라서 그냥 넘어가도록 하겠습니다. 디자이너로 플레이어를 제작하다가 자주 만나는 문제일텐데요. 이 때에는 해당 컨트롤의 인보크로 대리자에게 위임하면 됩니다.
public override void WriteOutput(string message)
{
richTextBox1.Invoke((Action)delegate
{
richTextBox1.AppendText(message);
richTextBox1.AppendText(Environment.NewLine);
});
}
스크립트가 실행되고, 딥러닝으로 분석한 결과를 로그에서 확인할 수 있습니다.
전체 내용은 아래와 같습니다. 아웃풋에 출력된 내용을 잘 보면, 어떻게 스크립트가 실행되었는지 결과를 확인할 수 있습니다. 이번 스크립트는 에러가 발생하지 않았기 때문에 아웃풋을 보고 무언가 파악할만한 내용은 없지만, 스크립트가 동작하다가 에러가 발생하면 여기서 확인할 수 있습니다.
[디자이너 예제 3.ngs] 스크립트가 시작되었습니다.
마우스 좌표 목록: System.Drawing.Point[]{X=522,Y=493}{X=610,Y=497}{X=712,Y=495}{X=785,Y=492}
이미지 정보 목록: System.Drawing.Rectangle[]{X=504,Y=472,Width=36,Height=44}{X=589,Y=473,Width=43,Height=48}{X=691,Y=474,Width=43,Height=43}{X=769,Y=464,Width=34,Height=58}
매치 스코어: System.Double[]0.817585766315460.881237447261810.8652175664901730.863529145717621
분류 이름: System.String[]updownleftup
배열 수: 4
매인 윈도우 정보: {X=0,Y=0,Width=0,Height=0}
콘트롤 윈도우 정보: {X=0,Y=0,Width=0,Height=0}
이미지 텍스트 결과:
마우스 좌표: {X=0,Y=0}
이미지 정보: {X=0,Y=0,Width=0,Height=0}
[디자이너 예제 3.ngs] 스크립트가 완료되었습니다.
아웃풋 내용이 추가될때마다 스크롤을 자동으로 내리고 싶다면, 아래와 같이 코드를 수정해주면 됩니다.
public override void WriteOutput(string message)
{
richTextBox1.Invoke((Action)delegate
{
richTextBox1.AppendText(message);
richTextBox1.AppendText(Environment.NewLine);
richTextBox1.ScrollToCaret();
});
}
개발자에게 후원하기
추천, 구독, 홍보 꼭~ 부탁드립니다.
여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~
감사합니다~
- 이전글디자이너로 제작한 플레이어를 관리자 권한으로 실행하는 방법. 21.01.15
- 다음글디자이너에서 딥러닝으로 이미지 분석 사용하기. 21.01.09
댓글목록
등록된 댓글이 없습니다.