본문 바로가기

Dev::DotNet/WinForm

(9)
Spread 에서 이미지 Attach 시 Memory Leak Spread 의 Annotation 기능을 제공하는데 그 중에 이미지를 Attach 할 수 있는 기능이 있다. [FarPoint.Win.Resouce Portal] 이미지를 Attach 하면 그 이미지에 대한 위치 / 크기 / 회전 에 대한 다양한 기능을 지원하는데..문제는 여기서 발생한다. 아래는 Spread 에서 기본 제공하는 Resouce Portal 에서 이미지를 Attach 했을 때 작업관리자에 표시된 정보이다. 사용 중인 메모리는 135메가 이다. 이제 그 이미지를 선택해서 아래와 같이 좌우로 한 10번 쯤 이동시켰다. 그리고 작업관리자에 메모리 사용량을 보면 약 70메가 정도가 급 상승한 것을 볼 수 있다. 별 다른 작업없이 그냥 그냥 올라간 이미지를 잡고 움직이는 것 만으로 사용하는 메모리..
Spread 의 Annotation 시 속도 문제 FarPoint Spread 에 Annotation 기능이 있다. [Spread Sample] Pen 이나 각종 Shape, 이미지 를 올려서 편집이 가능하고 엑셀 파일을 저장/로드했을 때 바로 연동도 가능하다.굉장히 편하고 유용한 기능이다. 일반적으로 사용했을 경우에는 말이다. Spread Sheet 에 셀 Merge 좀 해주고 이미지 좀 넣어주고 그러면 그럴수록..(화면으로 표시되고 그려야할 부분이 넓고 복잡한 하고 다양한 셀 구조를 가지면)Pen 으로 Drawing 시 속도는 눈에 뛰게 떨어진다. 원인을 이야기 해보자면..우선 Spread 는 컨트롤을 화면에 그릴 때 극악의 포퍼먼스를 자랑한다.특히 여러 Cell 을 Merge 했을 때, 더군다나 그 Merge 된 Cell 안에 멀티라인으로 텍스트를..
TabControl - Button / Tab Move TabControl 의 각 TabPage 에 버튼이 필요할 때가 있다. 각 TabPage 에 버튼을 넣을려면 TabControl 의 OnDrawItem 메소드를 override 하여 일일이 헤더 문자열 하고 버튼을 위치 간격 다 계산해서 우리의 Graphics g 로 다 그려줘야 한다. 그리고 찾아보면 은근 소스도 쉽게 찾을 수 있다. 하지만 만약 TabPage 마다 버튼 갯수도 다르고 버튼마다 아이콘도 맘대로 넣고 헤더 문자열도 변경할 수 있고 덤으로 Drag&Drop 으로 순서까지 변경하게 해달라고 하면 약간 골치 아퍼진다. 그래서 이 소스 저 소스를 버무려봤다. 우선 쉽게 버튼에 대한 정보를 저장하고 넘길 때 사용할 아이가 필요하다. using System.Drawing; public class B..
FarPoint Spread 출력화면 이미지 추출 Spread 출력(미리보기)를 하기 위해서는 자체 기능을 이용해서 출력이 가능하지만... FarPoint.Win.Spread.PrintInfo info = new FarPoint.Win.Spread.PrintInfo();info.PrintType = FarPoint.Win.Spread.PrintType.All;info.Orientation = FarPoint.Win.Spread.PrintOrientation.Portrait;info.ZoomFactor = 2f;info.Opacity = 100;info.ShowPrintDialog = true;info.Preview = true;…SpWork.ActiveSheet.PrintInfo = info; SpWork.PrintSheet(SpWork.ActiveSh..
ProeprtyGrid 에서 사용자 Editor 생성 ProeprtyGrid 를 사용하다보면 특정 타입의 값에 대해서 사용자가 별도의 Editor 화면을 구성해서 제공해야 할 경우가 있다. ProeprtyGrid 에서 Bitmap, string[] 등 기본 타입에 대해서는 자체 Editor 화면을 제공하지만 그 타입에 값을 넣는 아주 기본적인 기능만을 제공한다. 그래서 System.Drawing.Design.UITypeEditor 를 상속받아 몇몇 메소드를 재정의 후 사용하면 되며(frmMyEditer 폼은 용도에 맞게 적당히....) Property 생성시 이런식으로 넣어주면 PropertyGrid 에서 해당 프로퍼티 항목 우측에 자그마한 버튼이 생기게 되고 버튼을 누르면 내가 생성한 Editor 화면이 뜨게 된다.
Property 속성 변경 PropertyGrid Control 를 사용할때 보통 [Category("위치")] [Description("현재 X 좌표입니다. 읽기 전용 입니다.")] [DisplayName("X")] [ReadOnly(true)] public int X{.....} 이런 방법으로 Property에 별도의 속성을 적용하여 PropertyGrid 에 적용되게 한다. 하다보면 각종 속성에 대해서 Dynamic 하게 속성값을 변경해야 하는 경우가 있다. >> Browsable PropertyDescriptor descriptor = TypeDescriptor.GetProperties(this.GetType())["PropertyName"];BrowsableAttribute attribute = (BrowsableAttr..
FarPoint.Win.TextRenderer.TextRenderer.DrawText 의 formatflags 속성 FarPoint.Win.TextRenderer.dll 에 TextRenderer.DrawText 라는 말그대로 DrawText 메소드가 있다. void TextRenderer.DrawText(Graphics g, string text, Font font, Rectangle bounds, Color foreColor, int formatFlags); 중요한건 저 formatFlags 라는 파라매터인데... 문자열을 그릴때 정렬에 대한 속성이 들어간다. 아직 명확한 정의를 찾지를 못해서... 그냥 노가다를 좀 해본 결과 0 -> Top/Left 1 -> Top/Center 2 -> Top/Right 3 -> Top/Center----------------------- 4 -> Center/Left 5 -> ..
Spread 의 AllowCellOverflow 에 대해서.... Farpoint Spread 에 보면 AllowCellOverflow 라는 속성이 있다. AllowCellOverflow 는 셀의 내용이 길때 뒤쪽 셀의 내용이 없으면 뒤쪽까지 보여주는 아주 좋은 기능이다. ▶ fpSpread1.AllowCellOverflow = false; (기본) ▶ fpSpread1.AllowCellOverflow = true; 해당 기능은 Spread ActiveX Component 에서도 있는 기능이고 닷넷 윈폼 버전인 GrapeCity Spread for Windows Forms 에서도 당연히 동일하게 존재한다. 보통 AllowCellOverflow 속성을 디자이너에서 변경하고 작업하는 경우가 있다. 닷넷용 Spread 에서는 아실 분은 아시겠지만 화면에 Draw 하는 것이 ..