검색결과 리스트
분류 전체보기 에 해당되는 글 656건
- 2010.02.08 First Look Silverlight 4] Local File Access [16/15]
- 2010.01.29 First Look Silverlight 4] Notification API [16/14] (1)
- 2010.01.28 First Look Silverlight 4] BiDi and Right to Left Support [16/13]
- 2010.01.27 First Look Silverlight 4] Asynchronous Data Validation[16/12]
- 2010.01.26 First Look Silverlight 4] ViewBox Control[16/11]
- 2010.01.25 First Look Silverlight 4] Accessing the Global Clipboard Programmatically[16/10] (1)
- 2010.01.23 이명박 대통령과 한나라당의 세종시 정책에 대한 반대. (2)
- 2010.01.21 First Look Silverlight 4] Hosting HTML Content [16/9]
- 2010.01.20 Silverlight for Mobile에 관한 연기가 모락 모락 나고 있습니다. (2)
- 2010.01.20 First Look Silverlight 4] Printing API Basics [16/8] (4)
1.RichTextArea Part 1
2.RichTextArea Part 2
3.Accessing Web Camera and Microphone
4.Right Click Mouse Events
5.MouseWheel API
6.Using Silverlight Controls As Drip Targets
7.DataGrid Enhancements
8.Printing API Basics
9.Hosting HTML Content
10.Accessing the Global Clipboard Programmatically
11.Using the ViewBox Control
12.Asynchronous Data Validation
13.BiDi and Right-to-Left Support
14.Notification API
15.Local File Access
16.RIA Services support in Visual Studio 2010
| 김영욱 차장 Microsoft Korea .NET Evangelist Enterprise UX 를 위한 UI 기술과 SOA, Cloud Computing, NUI등 다양한 분야의 접목과 응용을 통해 최적의 IT 인프라 구축을 위해서 노력하고 있다. Email: iwinkey@hotmail.com Blog: http://winkey.tistory.com |
거듭 강조하는 이야기 중에 하나가 바로 Silverlight 4에서 강화된 부분이 바로 OOB(Out of browser)에 관한 내용이다. OOB를 통해서 Silverlight 4는 단순한 웹 플랫폼이 아니라 Microsoft의 클라이언트 플랫폼으로 정확하게 자리 매김 할 수 있게 되었습니다
Visual Studio 2008에서는 OOB를 사용하기 위해서는 AppManifest.xml 파일을 직접 편집해 주어야 하지만 Visual Studio 2010을 사용하게 되면 AppManifest.xml을 툴에서 관리하게 되면서 훨씬 작업이 편리해 졌습니다.
<그림1>에서 보면 알 수 있듯이 프로젝트 속성에서 바로 OOB 기능을 선택할 수 있으며 옆에 있는 Out of browser setting 버튼을 누르면 <그림2>와 같이 세세한 세팅을 할 수 있는 창이 나타나게 되어 있다.
<그림2>Out of browser setting
그런데 <그림2>에서 보면 못 보던 옵션이 하나 생긴 것을 볼 수 있는데 Require elevated trust when running outside the browser라는 체크 박스가 그것입니다. 단순한 체크 박스 하나로 보기에는 너무 막강하기 때문에 주의해서 사용해야 하는데 이 이유는 이 체크 박스를 선택하는 순간 실행시에 사용자에게 권한 상승을 요구하게 됩니다.
사용자가 권한 상승을 허가해 주게 되면 그 때 부터는 Silverlight 응용프로그램이지만 로컬의 파일과 API에 접근이 가능하게 된다. Silverlight가 그냥 웹 응용 프로그램을 개발하기 위한 툴이 아니라 Microsoft의 클라이언트 플랫폼이라고 이야기 할 수 있는 근거가 바로 이 체크 박스로 하나로 생길 수 있습니다
이 글에서 설명하려고 하는 로컬 파일 접근도 이와 같이 권한 상승을 통해서 충분한 권한이 있어야 사용가능 한 기능입니다. 아무튼 이렇게 권한 상승을 하게 되면 로컬 파일에 대한 접근 권한이 생기기 때문에 유의해서 사용하셔야 합니다. 아무리 사용자에게 권한을 요청한다고 해도 좀비와 같은 성향을 보이는 우리네 고객들은 아무생각없이 마구 권한을 승일 해줄 일들이 분명하기 때문입니다.
우선 OOB상태로 실행시키기 위해서 해당 응용프로그램을 로컬에 설치하는 기능을 다음과 같이 한 줄로 추가해야 합니다.
<소스1>Silverlight 응용 프로그램을 로컬에 설치하기 위한 파일
일단 로컬에 설치되고 충분한 권한이 주어진 상태라면 파일을 핸들링 하는 과정은 일반적인 로컬 파일을 다루는 과정과 다를 바 없습니다. 한 가지 재미있는 점은 Enviroment 객체를 추가적으로 사용 할 수 있게 된 점인데 이를 통해서 로컬의 각종 경로들을 확인 할 수 있게 되었습니다.
OOB 상태에서 좋은 점이 바로 Cross domain과 관련된 제약이 없어진다는 것이다. OOB를 하게 되면 실행이 로컬 기준으로 바뀌게 되므로 일반적인 Cross domain 제약이 없어지게 된다. 따라서 상당히 편리하게 여러 주소에서 데이터를 모아 오는 것이 가능하게 된다.
<소스3>에서 볼 수 있듯이 특정한 주소의 RSS를 다운 받는 등의 행위가 자연스럽게 가능하게 되었다. 또 주석으로 처리 된 부분을 보면 mp3 파일을 다운로드 받는 소스도 함께 포함되어 있다.
설명을 길게 한 듯 하지만 핵심 키워드는 '권한상승'에 있다. ^^
1.RichTextArea Part 1
2.RichTextArea Part 2
3.Accessing Web Camera and Microphone
4.Right Click Mouse Events
5.MouseWheel API
6.Using Silverlight Controls As Drip Targets
7.DataGrid Enhancements
8.Printing API Basics
9.Hosting HTML Content
10.Accessing the Global Clipboard Programmatically
11.Using the ViewBox Control
12.Asynchronous Data Validation
13.BiDi and Right-to-Left Support
14.Notification API
15.Local File Access
16.RIA Services support in Visual Studio 2010
| 김영욱 차장 Microsoft Korea .NET Evangelist Enterprise UX 를 위한 UI 기술과 SOA, Cloud Computing, NUI등 다양한 분야의 접목과 응용을 통해 최적의 IT 인프라 구축을 위해서 노력하고 있다. Email: iwinkey@hotmail.com Blog: http://winkey.tistory.com |
경고창을 띄울 수 있는 방법을 물으면 혹자는 자바스크립트의 Alert()을 이야기 할 것 이고 또 다른 분은 MessageBox.Show()를 이야기 할 것 입니다. 하지만 두 가지 방법 모두다 웹 브라우저 기반의 방법으로 시스템 기반의 경고창을 띄우지는 못합니다. 시스템 기반의 경고창은 Silverlight를 사용해서 모니터링 시스템을 만든다든지 할 경우에 꼭 필요한 기술 입니다. 시스템 기반의 경고창을 이용하면 다른 창들에 의해서 경고창이 가려져서 인지하지 못하는 경우가 없어지기 때문입니다.
<그림1>Notification API 샘플
이미 눈치를 채신 분들이 계실지 모르겠습니다만 시스템 차원에서 경고창을 띄우는 것은 시스템 API에 대한 접근이 필요로 합니다. 그래서 이 기능은 OOB에서만 사용 가능합니다. 앞서서 설명한 적이 있는 방법으로 로컬에 설치를 해줘야 실행이 가능합니다.
Silverlight 4에서는 Notification을 위한 방법을 제공해 주고 있습니다. 기본적으로는 Window만 제공해주고 있는 방법으로 아주 심플하게 사용할 수 있는 방법입니다.
<그림2> NotificationWindow 사용 예
시스템 차원의 경고창을 지원하는 객체로 NotificationWindow라는 객체가 제공 됩니다.
<소스1>NotificationWindow의 사용 예
사용하는 방법은 NotificationWindows 객체를 하나 만들고 거기에 화면에 보여줄 객체를 넣고 Show()를 호출하면 됩니다. 여기서는 Show(3000)이라고 되어 있는데 이는 3초를 의미합니다.
그런데 보기 싫기도 하고 사용자가 원하는 타입이 아닐 확률이 대단히 대단히 높습니다. 그래서 사용자가 좀 더 예쁜 레이아웃을 정의해서 사용할 수 있는 방법을 <소스2>에서 볼 수 있습니다.
<소스2>Custom 디자인을 보여주는 NotificationWindows
<소스2>에서 보면 중간에 CustomNotification이라는 객체가 나오는데 이는 기본으로 제공 해주는 객체는 아니고 예쁜 디자인을 위해서 사용자가 추가한 커스텀 컨트롤입니다. 첨부된 샘플을 보시면 디자인 소스를 보실 수 있습니다.
1.RichTextArea Part 1
2.RichTextArea Part 2
3.Accessing Web Camera and Microphone
4.Right Click Mouse Events
5.MouseWheel API
6.Using Silverlight Controls As Drop Targets
7.DataGrid Enhancements
8.Printing API Basics
9.Hosting HTML Content
10.Accessing the Global Clipboard Programmatically
11.Using the ViewBox Control
12.Asynchronous Data Validation
13.BiDi and Right-to-Left Support
14.Notification API
15.Local File Access
16.RIA Services support in Visual Studio 2010
| 김영욱 차장 Microsoft Korea .NET Evangelist Enterprise UX 를 위한 UI 기술과 SOA, Cloud Computing, NUI등 다양한 분야의 접목과 응용을 통해 최적의 IT 인프라 구축을 위해서 노력하고 있다. Email: iwinkey@hotmail.com Blog: http://winkey.tistory.com |
이번에 설명할 기능은 RTL(Right To Left)라고 불리는 기능이다. <그림1>에서 볼 수 있듯이 아랍권 언어들은 글자의 방향이 우리와는 반대 반향으로 흘러간다. 우리가 보기에는 이해하기 힘든 방식이기도 하고 글씨를 쓰다 보면 이미 쓴 글씨가 손에 묻거나 할 텐데 그래도 아랍권의 많은 사람들은 RTL 방식으로 글을 쓰고 읽는다.
이번에는 RTL을 별도로 지원하는 방법이 없어서 전용 컨트롤을 사용하거나 혹은 온갖 꼼수를 동원하기도 했다. 하지만 Silverlight 4에서는 드디어 RTL이 기본으로 지원되기 시작했다.
하나 하나의 컨트롤 상에서 글씨의 흐름을 제어하기 위해서는 다음과 같이 사용할 수 있다.
<TextBlock FlowDirection="RightToLeft" Text="BiDi and RTL Sample" FontSize="20" />
하지만 모든 컨트롤에 일일이 이렇게 지정할 수는 없기에 상위 레벨에서 지정하면 페이지 전체에 영향이 가게끔 할 수 있다.
<UserControl x:Class="BiDiRTL.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400" FlowDirection="RightToLeft">
위와 같이 UserControl Level에서 RTL을 지정하게 되면 이 페이지에 포함된 모든 객체들이 RTL방식으로 출력되게 된다.
댓글을 달아 주세요
1.RichTextArea Part 1
2.RichTextArea Part 2
3.Accessing Web Camera and Microphone
4.Right Click Mouse Events
5.MouseWheel API
6.Using Silverlight Controls As Drip Targets
7.DataGrid Enhancements
8.Printing API Basics
9.Hosting HTML Content
10.Accessing the Global Clipboard Programmatically
11.Using the ViewBox Control
12.Asynchronous Data Validation
13.BiDi and Right-to-Left Support
14.Notification API
15.Local File Access
16.RIA Services support in Visual Studio 2010
| 김영욱 차장 Microsoft Korea .NET Evangelist Enterprise UX 를 위한 UI 기술과 SOA, Cloud Computing, NUI등 다양한 분야의 접목과 응용을 통해 최적의 IT 인프라 구축을 위해서 노력하고 있다. Email: iwinkey@hotmail.com Blog: http://winkey.tistory.com |
이번 시간에 설명해 드리는 내용은 Silverlight에서 비동기적으로 데이터의 내용을 검증하는 것에 대한 내용입니다.
ASP.NET 등에서는 데이터의 내용을 검증하는 컨트롤들이 제공되고 있어서 비교적 쉽게 데이터의 내용을 검증하는 작업이 가능하지만 Silverlight에서는 아직 검증(Validation)과 관련된 컨트롤이 따로 제공되지 않고 있습니다.
<그림1> 비동기 검증에 대한 기법을 보여주는 샘플
검증 작업을 자동으로 처리해주는 컨트롤이 없으면 일일이 코딩으로 처리해 주어야 하기 때문에 이번에 설명할 내용은 꽤 코드 위주로 진행 될 예정입니다. 또 대부분은 Silverlight 4가 아니더라도 적용 가능하기 때문에 본 내용은 Silverlight를 사용하는 대부분의 개발자들에게 도움이 되는 내용입니다.
1. 왜 비동기 적인 검증을 하는가?
비동적인 검증을 하는 이유는 여러 가지 이유가 있을 수 있지만 가장 중요한 이유는 사용자들의 작업을 최대한 방해하지 않는다는 것입니다. 사용자의 작업을 최대한 방해 하지 않으면서 자연스럽게 잘못된 입력을 알려는 방법으로 비동기 검증을 이야기 하고 있습니다.
물론 경고 창이 별도로 팝업되고 사용자들의 확인을 요구하는 것은 부적절하고 쓸데 없는 클릭을 유발합니다.
<그림2>자연스러운 입력 오류의 안내
<그림2>를 보면 팝업이 발생하지 않는 방법으로 사용자들에게 입력 오류가 발생한 컨트롤의 위치와 오류의 내용을 설명하고 있는 것을 볼 수 있습니다. 이런 작업을 가장 적절하게 해결 할 수 있는 방법은 바로 사용자 정의 컨트롤을 제작하는 것입니다. 여기서는 EditCustomer라는 사용자 정의 컨트롤을 제작하겠습니다.
2. 사용자 정의 컨트롤을 만들어 보자.
사용자 정의 컨트롤을 만들 때는 반복적으로 사용되거나 혹은 동적으로 변화하는 UI영역, 혹은 이벤트 핸들링이 필요한 경우 등 다양한 목적으로 인해서 만들게 됩니다. 여기서는 이벤트 핸들링을 목적으로 EditCustomer라는 사용자 정의 컨트롤을 만들어 보려고 합니다.
<그림1>에서 볼 수 있는 영역 자체가 지금 만들려고 하는 EditCustomer 컨트롤 입니다. 메인 페이지에서 해당 폼을 불러서 사용하기 위해서 아래와 같이 코드를 이용할 수 있습니다.
EditCustomer wind = new EditCustomer();
wind.VerticalAlignment = System.Windows.VerticalAlignment.Top;
wind.Margin = new Thickness(0, 50, 0, 0);
wind.Show();
본격적으로 코딩에서 들어가기 전에 EditCustomer는 System.Windows.Controls.ChildWindow로 부터 상속을 받게 합니다. ChildWindow는 Silverlight 안에서 하나의 팝업 창의 역할을 할 수 있게 해주는 컨트롤로 앞으로 많이 활용 될 것으로 기대되는 컨트롤 중 하나 입니다.
<소스1>ChildWindow로 부터 상속
EditCustomer 사용자 컨트롤이 Load되고 나면 기본적인 이벤트 핸들러 들을 붙이기 시작하는데 그 이전에 보면 theWindow, theCustomer에 각 각 값을 대입하고 있는 것을 볼 수 있습니다.
<소스2>theWindow와 theCustomer의 사용
그런데 자세히 보면 theWindow에는 자기 자신을 집어 놓고 있고 theCustomer에는 CCustomer.RandomCustomer를 대입하고 있는 것을 볼 수 있는데 여기서 theWindow는 정적인 맴버 변수로 외부에서 자기 스스로를 잘 참조할 수 있게 추가한 구문입니다.
<소스3>맴버 변수인 theWindow
이와는 상관없이 theCustomer는 LayoutRoot.DataContext에 설정하는 것을 볼 수 있는데 이는 해당 되는 Entity Class를 해당 폼에 바인딩 시키기 위함입니다. 하지만 그냥 Entity class가 아닌 게 데이터만 가지고 있지 않고 이벤트도 가지고 있기 때문입니다. 해당 되는 Customer의 값이 바뀌면 발생되는 이벤트로 ChangeStatus를 가지고 있습니다.
<소스4>theCustomer_ChangeStatus 이벤트 핸들러
폼에 해당 Entity class가 바인딩 되어 있는 상태에서 사용자의 폼의 내용을 수정할 경우 Entity class도 변경되고 이와 관련된 이벤트가 발생되게 되는데 이는 그냥 되지는 않고 Customer class에서 해당 이벤트를 정의해 주었기 때문에 가능한 것입니다.
어찌되었던 변경이 감지되면 해당 상태에 맞추어서 메시지를 출력할 수 있게 해주는 코드가 <소스4>에 나와있습니다.
메시지를 내보는 메소드인 WriteToLog( )는 Log라는 ListBox에 아이템을 추가하는 방식으로 구현되어 있습니다.
<소스5>WriteToLog ( )
이제 Customer Class의 내용을 살펴보면 아까 사용했던 이벤트를 정의하는 부분이 있습니다.
<소스6>Customer class의 이벤트 델리게이트
이제 검증과 관련된 작업이 거의 끝났습니다.
정리해 보면 다음과 같이 요약 할 수 있습니다.
검증이 필요한 컨트롤을 사용자 정의 컨트롤로 만들고 Entity class를 설계하고 이때 이벤트 델리게이트를 사용해서 이벤트를 추가하고 해당 이벤트가 비동기적으로 발생할 때 마다 검증과 동시에 사용자에게 검증 결과를 알려주는 것입니다.
사소 소스가 불편하고 어려운 점들이 있어 보이는데 후에 좀 더 사용하기 쉬운 소스를 만들어볼까 합니다.
역시 나머지 내용은 첨부된 소스를 참조해 주시기 바랍니다.
댓글을 달아 주세요
1.RichTextArea Part 1
2.RichTextArea Part 2
3.Accessing Web Camera and Microphone
4.Right Click Mouse Events
5.MouseWheel API
6.Using Silverlight Controls As Drip Targets
7.DataGrid Enhancements
8.Printing API Basics
9.Hosting HTML Content
10.Accessing the Global Clipboard Programmatically
11.Using the ViewBox Control
12.Asynchronous Data Validation
13.BiDi and Right-to-Left Support
14.Notification API
15.Local File Access
16.RIA Services support in Visual Studio 2010
| 김영욱 차장 Microsoft Korea .NET Evangelist Enterprise UX 를 위한 UI 기술과 SOA, Cloud Computing, NUI등 다양한 분야의 접목과 응용을 통해 최적의 IT 인프라 구축을 위해서 노력하고 있다. Email: iwinkey@hotmail.com Blog: http://winkey.tistory.com |
이번에 설명 해 드릴 내용은 매우 짧은 내용입니다. ViewBox 는 자기 자신 위에 다른 컨트롤을 올려 놓을 수 있는 일종의 컨테이너 역할을 하는 레이아웃과 관련된 컨트롤입니다. 한 가지 특이한 점은 ViewBox는 자기 자신의 크기가 바뀔 때 자기 위에 있는 컨트롤의 크기도 함께 변화시키는 특징이 있습니다.
그래서 크기를 자연스럽게 변화시키거나 할 때 유용하게 사용할 수 있는 컨트롤입니다.
<그림1> ViewBox 샘플
ViewBox를 사용할 경우에 잘 지정해야 하는 속성이 두 가지가 있는데 StretchDirection과 Stretch 입니다.
StretchDirection의 경우 크기가 변화 될 때 어느 정도까지 변화되는가에 대한 상한 혹은 하한선을 결정할 때 사용하는 속성인데 여기에서 설정할 수 있는 옵션은 다음과 같습니다.
UpOnly : 내용이 부모보다 작은 경우에만 크기가 커집니다. 내용이 부모보다 크면 크기가 줄어들지 않습니다.
DownOnly : 내용이 부모보다 큰 경우에만 크기가 줄어듭니다. 내용이 부모보다 작으면 크기가 커지지 않습니다.
Both : Stretch 모드에 따라 내용이 부모에 맞게 늘어납니다.
또 Stretch 속성은 ViewBox안에 있는 컨트롤이 ViewBox내에 채워지는 형태를 지정할 수 있게 되었는데 아래와 같이 4가지 방식으로 채워 질 수 있게 되어 있습니다.
None : 내용의 원래 크기가 유지됩니다.
Fill : 내용의 크기가 조정되어 대상 크기를 채웁니다. 가로 세로 비율은 유지되지 않습니다.
Uniform : 원래 가로 세로 비율을 유지하면서 대상 크기에 맞게 콘텐츠의 크기가 조정됩니다.
UniformToFill : 원래 가로 세로 비율을 유지하면서 대상 크기를 채우도록 콘텐츠의 크기가 조정됩니다. 대상 사각형의 가로 세로 비율이 소스와 다른 경우에는 소스 내용이 대상 크기에 맞게 클리핑됩니다.
.jpg)
<그림2>Stretch의 4가지 형태
첨부된 파일을 실행시켜서 여러 가지 옵션을 잘 실행시켜 보시기 바랍니다.
댓글을 달아 주세요
First Look Silverlight 4] Accessing the Global Clipboard Programmatically[16/10]
Silverlight 2010. 1. 25. 09:001.RichTextArea Part 1
2.RichTextArea Part 2
3.Accessing Web Camera and Microphone
4.Right Click Mouse Events
5.MouseWheel API
6.Using Silverlight Controls As Drip Targets
7.DataGrid Enhancements
8.Printing API Basics
9.Hosting HTML Content
10.Accessing the Global Clipboard Programmatically
11.Using the ViewBox Control
12.Asynchronous Data Validation
13.BiDi and Right-to-Left Support
14.Notification API
15.Local File Access
16.RIA Services support in Visual Studio 2010
| 김영욱 차장 Microsoft Korea .NET Evangelist Enterprise UX 를 위한 UI 기술과 SOA, Cloud Computing, NUI등 다양한 분야의 접목과 응용을 통해 최적의 IT 인프라 구축을 위해서 노력하고 있다. Email: iwinkey@hotmail.com Blog: http://winkey.tistory.com |
일시적으로 어떤 데이터를 잠시 보관해 두는 영역을 클립보드라고 부릅니다. 사용자의 의지에 따라서 다른 곳의 내용을 복사해서 붙여 넣기 등의 작업을 할 때 임시로 보관해 두는 메모리 영역도 역시 클립보드 입니다.
사용자의 의지라고 제가 명시한 이유는 클립보드의 내용을 접근할 때 일반적으로는 사용자들이 Ctrl + C, V 등을 사용해서 클립보드의 작업을 하지만 그렇지 않은 경우도 있을 수 있기 때문입니다. 우리가 만들려고 하는 응용프로그램에서 클립보드의 내용에 직접 접근해야 할 필요가 있을 수도 있습니다.
Silverlight 3까지는 코드 상에서 클립보드에 접근할 수 있는 방법을 제공해 주지 않고 있었지만 Silverlight 4에서는 방법을 제공하고 있습니다.
<그림1>클립보드 샘플 프로그램
<그림1>에 나오는 샘플에서 첫 번째 RichTextArea 안에 포함되어 있는 내용을 Ctrl + C를 통해서 Copy 하고 두 번째 RichTextArea에 Ctrl + V를 통해서 붙여 넣기 했을 경우에는 아무런 메시지 없이 잘 실행됩니다.
하지만 하단에 있는 Copy 혹은 Paste를 사용할 경우 다음과 같은 경고 메시지가 나타나게 됩니다.
<그림2> 클립보드 접근시 나오는 메시지
이렇게 코드에서 클립보드에 접근할 경우에 메시지가 뜨는 이유는 클립보드 역시 로컬의 자원이기 때문에 보안 모델을 위반할 수 있기 때문에 사용자에게 적절하게 메세지를 주는 것 입니다.
클립보드에 실제로 접근하기 위해서 사용할 수 있는 객체는 System.Windows.Clipboard 입니다.
클립보드에 선택된 텍스트를 저장하기 위해서는
Clipboard.SetText( LeftTextBox.Selection.Text );
와 같이 사용할 수 있으며 반대로 클립보드에 있는 내용을 가져오기 위해서는
RightTextBox.Selection.Text = Clipboard.GetText();
와 같이 사용할 수 있습니다.
여기서 한 가지 더 알아두면 좋은 메소드는 현재 클립보드에 내용이 있는지 없는지 확인하는 Clipboard.ContainsText() 입니다. Clipboard.ContainsText()의 경우 내용 유무를 bool 형태로 돌려주게 되어 있습니다.
시작하기 전에 이 의견은 절대(!) 제 개인적인 의견임을 밝혀 둡니다.
세종시가 도데체 뭘까요? 이름도 참 여러 가지였지만 지금의 모습은 이름만 바뀌는 것이 아니라는 것 정도는 누구라도 알고 있습니다. 한나라당과 청와대에서는 홍보 부족이라고 이야기 하지만 홍보는 이미 충분한 것 같습니다. 홍보가 부족하다기 보다는 본인들의 이야기가 잘 먹히지 않는다는 이야기를 그렇게 하는 것일지도 모른다는 생각이 듭니다.
이름이 바뀌는 것도 자주 있는 일은 아니겠지만 이제는 원래 그 일이 시작된 동기마저 바뀌어가고 있는 것 같습니다.
우리나라의 수도권 과밀화는 큰 사회적인 문제 입니다. 과밀화는 지속적이고 과다한 사회적 자원의 투입이 반복되는 악순환을 부르게 됩니다. 그리고 해당 과밀화 지역을 제외한 나머지 지역의 사회적 인프라의 빈곤을 필 수적으로 부르게 됩니다. 부산만 가보더라도 해운대 신도시를 제외하면 대부분 집값은 무척 저렴합니다. 서울에서 전세 살 비용이면 부산에서는 집을 사고도 남습니다. 단순히 집값을 잣대 삼는 것은 아닙니다. 하지만 서울 경계만 벗어나도 인프라가 떨어집니다. 산업/교육/교통/서비스/공공 모든 분야에서 제대로 된 곳이 손에 꼽을 정도 입니다.
안 그래도 작은 나라에서 모든 인프라를 한 곳에 모아두니 당연히 문제가 많을 수 밖에 없습니다. 균형 발전이라는 용어를 굳이 사용하지 않더라도 수도권 이외의 지역에서도 온 국민이 같이 열심히 노력하고 잘 살 수 있도록 하는 사회적인 합의가 정책에 반영 될 수 있어야 합니다. 그리고 그런 시대적인 합의에 의해서 균형 발전 정책이 나오게 되었고 지방 혁신 도시라는 청사진이 나오게 된 것입니다.
지방 혁신 도시라고 땅만 개간해 놓으면 기업과 학교들이 몰려들어서 열심히 그 위에 공장도 짓고 학교도 짓고 아파트도 지을까요? 지방 혁신 도시 이전에도 지방 자치 단체 혹은 중앙 정부에서 진행했던 실패한 신도시의 사례는 쉽게 찾아 낼 수 있습니다. 그래서 가장 효과적인 방법으로 정부에서 먼저 움직이고 이를 통해서 기본 사회적 인프라를 확보하면 기업도 학교도 서비스 산업도 함께 움직여야 하기 때문에 행정 중심의 도시를 설계 했던 것입니다.
인구가 분산되고 핵심 인프라가 골고루 분배되면서 작은 나라지만 크게 쓸 수 있게 하는 그것이 바로 균형발전이라고 생각합니다.
<그림1>인구밀도에 대한 수도권 비수도권의 비교 2007년 거의 50%가 되어가고 있다. (출처 통계청)
산업에 흘러 들어가고 재투자되어야 하는 비용이 수도권에 집중되면서 부동산 자산 가치만 올라가고 있습니다. 수도권 부동산 불패 신화에는 산업자금을 원활하게 사용하지 못하고 사라져간 중소기업들의 애환이 함께 하고 있다고 생각됩니다. 하지만 이런 애환은 반도체/자동차/조선/석유화학과 같은 대표적인 산업에 가려져서 잘 보이지 않게 되어 있습니다.
중소기업은 고용효과가 매우 큽니다. 일반적으로 대기업은 고용효과도 매우 크다고 생각할 수도 있지만 사실과는 거리가 있습니다.
<표1>을 보면 알겠지만 2004년부터 꾸준히 취업자 숫자는 줄어오고 있습니다.
취업률의 저하와 함께 살펴봐야 하는 게 중소기업 신설법인 숫자 입니다.
<표2>신설법인 및 부도 법인 수 (출처 중소기업청 신설법인 현황)
신설법인 수가 꾸준히 줄고 있습니다. 한 가지 다행인 것은 부도 법인 수도 함께 줄고 있다는 점입니다. 하지만 그와는 상관없이 꾸준히 중소기업들 시장이 약해지고 있다는 지표로 삼을 수 있습니다. 이쯤 되면 부동산 가치의 상승과 중소기업과는 어떤 연관이 있는지 증명하라고 하실 분이 있을지 모르겠습니다. 사실 제가 무슨 경제/사회 전문가는 아니기 때문에 딱히 연결해서 보여드릴 수 있는 자신은 없습니다. 하지만 확실한 것은 주택담보 대출의 증가치가 사회적 물가 상승률을 과도하게 뛰어 넘고 있다는 사실이고 그 돈은 은행에서 빌린 거라는 것입니다.
<차트1> 주택담보 대출의 증가 추세
출처 매일경제 “늘어나는 주택대출 문제없나?”
http://news.mk.co.kr/outside/view.php?year=2010&no=35033
작지만 큰 한국을 위해서는 사회적 자원이 골고루 분산될 수 있어야 합니다.
하지만 지금 한나라당과 정운찬 총리를 포함한 정부의 정책은 균형 발전보다는 충청도 퍼주기라는 컨셉을 잡은 것 같습니다.
‘사실상 이건 충청도의 특혜다!’
‘가기 싫어하는 서울대와 대기업들도 유치했다’
하지만 수도권에 있는 기업을 제외하고 우선 유치하라는 이명박 대통령의 지시는 왠지 씁쓸합니다. 좋게 생각하면 기존에 잘하고 있는 기업이 옮겨가게 하지 말고 신규 산업을 육성하라 정도의 의미일 것으로 생각됩니다만 신규산업이 그렇게 램프의 요정에게 빌면 나오는 것도 아니고 시간과 비용의 투자가 일정 시간이상 필요한 것이데 그럼 방법은 수도권 이외의 지방에 있는 기업이거나 혹은 수도권 이외의 지역에 들어갈 투자가 세종시에 투입되게 되는 것입니다.
결국 수도권은 그대로 경쟁은 지방끼리라는 모양세가 될 수도 있다는 말이겠지요.
단언코 저는 경제/정치 이런거 잘 모른 사람입니다. 하지만 이 두서없는 글을 쓰는 이유는 ‘정치’라는 단어는 알고 있기 때문입니다.
‘정치’란 한정된 사회적 자원을 효율적으로 사용하기 위해서 하는 사회적 활동 입니다.
특정 계층에게 혜택이 일방적으로 돌아가거나 비효율적으로 사회적인 비용과 노력이 낭비되는 것을 우리는 일반적으로 ‘삽질한다’고 표현합니다.
세종시는 원안대로 진행되어야 합니다. 그것이 이 시대의 사회적 합의 입니다.
지난번 미디어법 통과가 되었을 때 나이든 택시 기사님과 이야기 한 적이 있었습니다. 기사님은 민주당을 비판하고 있었는데 국회에서 몸 싸움하고 소리지르고 툭하면 국회 뛰쳐나오는 것이 못내 마음에 안 들었는지 비판의 말을 아끼지 않고 계셨습니다.
“그래도 방법이 없으면 몸 싸움이라도 해야지 않나요?”
라는 제 가벼운 말투에 기사님은
“그게 더 국민을 무시하는 처사야 국민들을 바보로 안다고 국민들도 다 보고 있는데 말이지 국회에서 법을 안 지키면 누가 지키냐는 말이지… “
기사님의 정곡을 찌르는 한 마디에 저는 살짝 민망해져서
“그래도 행여나 잘 못된 법안이라면 그로 인한 사회적 비용이 상당하지 않을까요?”
라고 대답하자….
“민주주의가 공짜인줄 알어? 민주주의를 위해서는 많은 비용을 지불하고 지켜봐야 하는 거야”
저는 나이든 택시 기사님의 한 마디에 더 이상 말을 잇지 못했습니다.
세종시 원안이 잘못된 것일 수도 있습니다. 하지만 그것은 우리나라 사회가 합의한 잠재적인 리스크이고 사회적 합의를 위해서 지불 할 수도 있는 비용이라고 생각합니다.
노무현 대통령은 지금 이 상황을 미리 보기라도 했을까요?
마지막으로 유튜브에 올라온 동영상을 링크합니다. 서귀포 혁신도시 기공식 연설인데 보고 나면 더 씁쓸해져서 소주 한잔이 생각나실지도 모르겠습니다. ---(*)---
1.RichTextArea Part 1
2.RichTextArea Part 2
3.Accessing Web Camera and Microphone
4.Right Click Mouse Events
5.MouseWheel API
6.Using Silverlight Controls As Drop Targets
7.DataGrid Enhancements
8.Printing API Basics
9.Hosting HTML Content
10.Accessing the Global Clipboard Programmatically
11.Using the ViewBox Control
12.Asynchronous Data Validation
13.BiDi and Right-to-Left Support
14.Notification API
15.Local File Access
16.RIA Services support in Visual Studio 2010
| 김영욱 차장 Microsoft Korea .NET Evangelist Enterprise UX 를 위한 UI 기술과 SOA, Cloud Computing, NUI등 다양한 분야의 접목과 응용을 통해 최적의 IT 인프라 구축을 위해서 노력하고 있다. Email: iwinkey@hotmail.com Blog: http://winkey.tistory.com |
<그림1> Web browser 컨트롤을 사용해서 RSS를 읽어 들인 예
HTML을 Silverlight에서 바로 보여줄 수 있다면…. 할 수 있는 게 엄청 많아 질 것입니다. Silverlight 4 부터는 HTML을 Silverlight에서 바로 보여줄 수 있는 컨트롤이 추가 되어서 Silverlight에서 할 수 있는 게 엄청 많아 졌습니다.
HTML을 불러올 수 있는 방법은 html 파일을 직접 읽어오는 방법 혹은 html 문자열을 이해하는 방법 그리고 타 사이트에 있는 HTML을 직접 읽어오는 방법 등 여러 가지 방법이 있을 수 있는데 HTML 컨트롤의 치명적인 한 가지 제약 사항이 있습니다. 그것은 바로 OOB(Out of browser) 상태에서만 지원되는 점입니다.
웹 브라우저 컨트롤을 사용하기 위해서는 다음과 같이 한 줄만 입력하면 됩니다.
<WebBrowser x:Name="HtmlContent" Height="600" Width="800” />
하지만 웹 브라우저 컨트롤은 기본적으로 OOB에서만 실행되기 때문에 다음과 같은 코드를 사용해서 OOB 상태에서만 실행되는 것을 확인해야 합니다.
if (!App.Current.IsRunningOutOfBrowser)
{
WarningText.Visibility = Visibility.Visible;
}
두 번째로 현재 실행되고 있는 Silverlight 애플리케이션이 이미 해당 컴퓨터의 로컬에 설치되었는지를 확인하고 설치가 되지 않았으면 설치 버튼을 노출 시켜주기 위해서 다음과 같은 코드가 필요합니다.
if (App.Current.InstallState == InstallState.Installed)
{
InstallButton.Visibility = Visibility.Collapsed;
}
else
{
return;
}
위의 두 가지 소스에서 보면 알 수 있지만 App 객체는 현재 실행되고 있는 애플리케이션의 정보를 알 수 있게 해준다.
그럼 해당 컴퓨터에서 자기 자신을 설치하기 위한 코드는 어떤 것일까? 놀랍게도 딱 한 줄만 사용하면 됩니다.
App.Current.Install();
Web Browser 컨트롤에서 특정한 페이지로 이동하기 위해서는 다음과 같이 Navigate 메소드를 사용하면 됩니다.
HtmlContent.Navigate(new Uri(“http://winkey.tistory.com”));
하지만 Silverlight는 좀 더 재미있는 방법도 제공되고 있는데 로컬에 있는 HTML 파일을 읽어드릴 수도 있습니다. 이럴 경우에는 아래와 같은 방법으로 접근 할 수 있습니다.
HtmlContent.Navigate(new Uri(App.Current.Host.Source, “./test.html”));
재미있는 사실은 Web Browser 컨트롤에서는 그냥 메모리상에서 문자열로 조합되어 있는 html도 역시 출력할 수 있습니다.
HtmlContent.NavigateToString(“<P>Hello World<P>”);
이럴 경우에는 Navigate 메소드가 아니라 NavigateToString을 사용하셔야 합니다.
<그림2> NavigateToString을 사용해서 HTML 문자열을 읽어드린 경우.
이미 이 글을 읽으시는 분들의 머리 속에는 이것을 활용할 아이디어가 무궁무진하게 흘러 나오기 시작하는 느낌이 들 것입니다. 첨부된 샘플을 보시면 XML 타입으로 되어 있는 RSS를 파싱하는 방법도 함께 포함되어 있으니 꼭 참조하시기 바랍니다.
댓글을 달아 주세요
Silverlight Mobile에 대한 연기가 모락 모락 올라 옵니다. 조만간 뭔가 나오긴 하려나 봅니다.
자세한 내용은 아래의 주소에서 보실 수 있습니다.
http://silverlight.net/learn/mobile/
1.RichTextArea Part 1
2.RichTextArea Part 2
3.Accessing Web Camera and Microphone
4.Right Click Mouse Events
5.MouseWheel API
6.Using Silverlight Controls As Drop Targets
7.DataGrid Enhancements
8.Printing API Basics
9.Hosting HTML Content
10.Accessing the Global Clipboard Programmatically
11.Using the ViewBox Control
12.Asynchronous Data Validation
13.BiDi and Right-to-Left Support
14.Notification API
15.Local File Access
16.RIA Services support in Visual Studio 2010
| 김영욱 차장 Microsoft Korea .NET Evangelist Enterprise UX 를 위한 UI 기술과 SOA, Cloud Computing, NUI등 다양한 분야의 접목과 응용을 통해 최적의 IT 인프라 구축을 위해서 노력하고 있다. Email: iwinkey@hotmail.com Blog: http://winkey.tistory.com |
웹에서 프린트를 마음 것 할 수 있다면 어떨까? 여러 가지로 편리한 점 들이 많이 있을 것이다. 일반적인 웹 페이지의 경우 레이아웃 자체가 가변적이기 때문에 기본적으로 정해져 있는 모양대로 프린트 되지 못합니다. 그래서 미리 보기를 적절히 사용해 가면서 결과물을 미리 확인하지 않았다가는 엄청난 양의 종이를 낭비하게 됩니다.
Silverlight 4에서는 드디어 프린트 기능이 지원됩니다. 시스템에 설치되어 있는 프린트의 목록을 가져오고 가져온 목록을 기반으로 해서 프린트를 선택해서 프린트 할 수 있습니다.
<그림1> 프린트 기능을 보여주는 샘플 프로그램
프린트 기능을 사용하는 방법은 의외로 심플합니다. 프린트를 사용하는 방법은
System.Windows.Printing.PrintDocument 클래스를 사용하면 됩니다.
PrintDocument docToPrint = new PrintDocument();
docToPrint.DocumentName = "Entire Screen Sample";
docToPrint.PrintPage += (s, args) =>
{
args.PageVisual = this.StackOfStuff;
};
docToPrint.Print();
<소스1>프린트 기능의 사용 예
ProntDoucment 클래스의 PrintPage에서 PageVisual 속성에 출력하려고 하는 객체를 지정하고 Print( );를 호출하는 것으로 바로 프린트가 이루어 집니다.
<그림2>프린터 선택 화면
약간의 기교를 부린다면 프린팅을 시작할 때 혹은 프린팅이 종료 되었을 때 무언가 사용자에게 보여주는 방식으로 코딩하고 싶으면 다음과 같이 StartPrint와 EndPrint 두 개를 잘 활용 할 수 있습니다.
PrintDocument docToPrint = new PrintDocument();
docToPrint.DocumentName = "Entire Screen Sample";
docToPrint.StartPrint += (s, args) =>
{
ActivityDisplay.IsActive = true;
};
docToPrint.PrintPage += (s, args) =>
{
args.PageVisual = this.StackOfStuff;
};
docToPrint.EndPrint += (s, args) =>
{
ActivityDisplay.IsActive = false;
};
docToPrint.Print();
<소스2> 시작과 종료를 활용하는 예
이외에도 동적으로 객체들을 쌓아서 출력하는 방식도 사용할 수 있는데 이는 첨부된 샘플을 잘 살펴보시면 될 것 같습니다.
First Look Silverlight 4 19-15 Local File Access.zip.zip
댓글을 달아 주세요