NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# C# .NET Core 매크로 프로그램 만들기. (속성 설정 만들기)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 매크로 프로그램의 기본 기능중에 마지막인 속성창 만들기를 해보도록 하겠습니다. 여기까지 완료하면 매크로 프로그램의 큰 기능은 모두 완성됩니다. 이후부터는 완성된 뼈대에 하나씩 살을 붙여나가면 됩니다. 아직 해야할 일들이 많이 남아있지만, 기본 골격이 완성되면 그 다음부터는 속도가 빠르게 진행될거예요. 원래 집을 지을때도 설계와 기초 공사가 오래 걸리는 법이니까요. 프로그래밍도 집을 짓는것과 비슷하기 때문에 처음 설계와 기초가 튼튼해야합니다.

     

    속성창의 디자인은 간단합니다. 닷넷에서 제공해주는 PropertyGrid 컨트롤을 UserControl로 만들면 됩니다.

    FGhNXpr.jpeg

     

     

    디자인에서 프로퍼티 그리드 컨트롤을 추가한 후 코드뷰(F7)로 이동하세요. 코드는 아래와 같이 단순합니다. DataBind 메소드 하나만 추가했는데요. 모델을 넘겨주면 프로퍼티 그리드가 자동으로 모델의 특성(Attribute)를 분석해서 제목과 설명을 표시 해줍니다. 그래서 딱히 뭔가 추가할 내용은 없습니다.

    namespace Ai.Common.Client.Dock
    {
        public partial class Property : UserControl
        {
            public Property()
            {
                InitializeComponent();
            }
    
            public void DataBind(object model)
            {
                if (model is Ai.Model.Action.ActionModel)
                    this.propertyGrid.SelectedObject = model;
            }
        }
    }

     

    나중에는 다른 모듈에서 DataBind를 호출하여 프로퍼티 그리드를 갱신할 수 있도록 해야 합니다. 이 때 인터페이스가 하나 필요할 수 있습니다. 이 부분은 나중에 알아보기로 하고, 여기에서는 간단하게 기능만 구현하도록 하겠습니다. 

     

    그렇다면, 프로퍼티 그리드에 언제 데이타를 바인딩해야 할까요? 도구 상자에서 스크립트로 액션을 추가할 때 프로퍼티 그리드에 해당 모델의 속성을 바인딩해야 합니다. 아래는 기존 스크립트 뷰의 DragDrop 이벤트를 수정한 내용입니다. 참고로, _client가 에디터인 경우에만 동작해야 하므로 타입 체크안에 내용을 추가했습니다.

            private void TreeView_DragDrop(object? sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(typeof(TreeNode)))
                {
                    TreeNode extNode = (TreeNode)e.Data.GetData(typeof(TreeNode));
                    TreeNode node = (TreeNode)extNode.Clone();
                    treeView.Nodes.Add(node);
                    treeView.SelectedNode = node;
                    
                    if (_client is Ai.Interface.IEditor)
                    {
                        var editor = (Ai.Interface.IEditor)_client;
                        ((Dock.Property)editor.Property).DataBind(node.Tag);
                    }
                }
            }

     

    기본적으로 도구 상자와 스크립트 뷰는 TreeView로 구성되어 있습니다. 그 안에 항목은 TreeNode인데요. 이 안에 데이타를 전달하기 위해 Tag 속성에 모델(Model)을 담아서 전달합니다. 그렇기 때문에 DataBind 메소드의 인자로 TreeNode의 Tag를 넘겨줘야 합니다.

     

    한가지 더 기존 인터페이스를 변경해야 하는데요. 매인뷰에 붙어있는 프로퍼티 속성창을 가져와야 합니다. 그렇기 때문에 매인뷰의 IEditor에서 Property Dock을 가져올 수 있게 해야 합니다. 아래와 같이 IEditor 인터페이스의 마지막에 Property 속성을 추가했습니다.

    using ComponentFactory.Krypton.Docking;
    using ComponentFactory.Krypton.Ribbon;
    using System.Windows.Forms;
    
    namespace Ai.Interface
    {
        public interface IEditor
        {
            int NewScriptCount { get; set; }
    
            KryptonDockingManager DockingManager { get; }
    
            KryptonRibbon Ribbon { get; }
    
            Control Property { get; }
        }
    }

     

    스크립트뷰의 코드에서 아래 내용이 핵심입니다. 인터페이스를 잘 사용하는게 얼마나 중요한지 알 수 있는 부분입니다.

                    if (_client is Ai.Interface.IEditor)
                    {
                        var editor = (Ai.Interface.IEditor)_client;
                        ((Dock.Property)editor.Property).DataBind(node.Tag);
                    }

     

    이제 매크로를 실행하고, 도구 상자에서 마우스 클릭 액션을 스크립트에 추가 해보세요. 아래 그림과 같이 속성창이 자동으로 만들어지는걸 확인할 수 있습니다.

    4qCFcTY.jpeg

     

     

    이제 프로젝트를 실행하고, 마우스 좌표를 설정 해보세요. 그리고, 매크로를 실행하면 설정한 마우스 좌표를 클릭하게 됩니다.

     

     

    이렇게해서 매크로 프로그램의 기본 골격은 모두 만들었습니다. 각각의 컨트롤과 모듈에 하나씩 살을 붙여나가야 합니다. 매크로를 제작하는 사용자의 편의를 위한 기능들과 매크로가 제공해야 할 액션들을 추가하면 엔지엠 6과 같은 매크로 프로그램이 완성될겁니다. 해야할 일이 정말 많지만, 약 1년정도 하나씩 꾸준히 만들다면 언젠가는 완성이 되겠죠? 엔지엠 6의 구조적인 문제와 닷넷 프레임워크의 한계를 뛰어넘기 위해 새로운 프레임워크를 도입하고, 인공지능 기술의 양대산맥인 Deep Learning과 Generative를 모두 적용해야 합니다.

     

    Deep Learning이란?

    딥 러닝은 인간의 두뇌에서 영감을 얻은 방식으로 데이터를 처리하도록 컴퓨터를 가르치는 인공 지능(AI) 방식입니다. 
    딥 러닝 모델은 그림, 텍스트, 사운드 및 기타 데이터의 복잡한 패턴을 인식하여 정확한 인사이트와 예측을 생성할 수 있습니다. 
    이미지를 설명하거나 사운드 파일을 텍스트로 변환하는 등 일반적으로 인간의 지능이 필요한 작업을 자동화하는 데 딥 러닝 방법을 사용할 수 있습니다.

     

    Generative AI란?

    생성형 인공 지능(생성형 AI)은 대화, 이야기, 이미지, 동영상, 음악 등 새로운 콘텐츠와 아이디어를 만들 수 있는 AI의 일종입니다. 
    AI 기술은 이미지 인식, 자연어 처리(NLP), 번역과 같이 새로운 컴퓨팅 작업에서 인간 지능을 모방하려고 시도합니다. 
    생성형 AI는 인공 지능의 다음 단계입니다. 
    인간 언어, 프로그래밍 언어, 예술, 화학, 생물학 또는 복잡한 주제를 학습하도록 AI를 학습시킬 수 있습니다. 
    AI는 학습 데이터를 재사용하여 새로운 문제를 해결합니다. 
    엔지엠 매크로에서는 생성형 AI를 이용해 사용자와 대화형식으로 업무를 자동화 할 수 있습니다.
    AI가 사용자의 요청을 이해하고, 스크립트를 자동으로 생성해줍니다.

     

    엔지엠 매크로에는 이미 딥러닝 기술이 포함되어 있습니다. 하지만, 앞으로 발전될 새로운 기술을 담기에는 너무 오래된 기술입니다. 따라서, 새로운 시대의 기술을 담을 수 있도록 그릇(프레임워크)을 업그레이드하고 생성형 AI를 지원할 수 있도록 다양한 기능을 추가 개발해야 합니다. 그래서, 프레임워크 교체 작업을 먼저 10개월정도 진행하고 생성형 AI를 약 2개월정도 도입해야 합니다. 

     

    1년후에는 새로운 제품을 선보일 수 있을듯 한데요. 기술적으로 공부해야 할 내용들이 정말 많습니다. 틈틈히 밴치마킹하고 있는 몇몇 기술들에 대해서 충분히 검증하고 테스트 프로젝트도 병행하면서 어떻게 도입할지 취사선택해야 합니다. 지금까지 엔지엠 매크로를 개발하면서 힘들었던 부분들이 몇가지 있었습니다. 어떠한 솔루션을 도입함에 있어서 신중하지 못한 결정인데요. 도입한 솔루션이 더이상 업그레이드나 개선이 이루어지지 않아서 엔지엠 매크로도 점점 노후화되고 늙어간다는 점입니다. 그렇다보니 지속 가능한 유료 솔루션을 도입하는게 더 좋다는 생각입니다. 지금도 몇몇 유료 솔루션을 사서 이용중이지만 확실히 무료와 다른점은 AS입니다.

     

    아직 결정하지 못한 스크립트 에디터 디자인은 일단 뒤로 밀어두고, 새로운 프레임워크에서 엔지엠 6과 같은 성능을 낼 수 있도록 만들어야 합니다. 그 이후에 딥러닝과 생성형 AI 그리고, 스크립트 에디터의 디자인을 어떻게 가져가야 할지 고민해야겠네요. 이제 본격적으로 GUI 기능과 Macro 액션을 하나씩 만들어 나가도록 하겠습니다^^

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.