실버라이트 개발시에 공식사이트인 http://www.silverlight.net/getstarted 에 있는 내용 많이 참고 하실 텐데요. 각각 해당하는 링크들이 한글판이 설치되신 분들은 경우는 따로 선택을 하셔야 되는 번거로움도 있는 것 같고 해서 실버라이트2 설치 프로그램의 한글과 관련된 링크를 모아 보았습니다.

기존의 영문판이 편하신 분들도 있겠지만, 실버라이트를 처음 시작하시는 분이라면 조금 더 친절한 한글판을 사용하시는 것도 좋을 것 같다는 생각이 들고, 게다가 현재 실버라이트 2 개발문서까지 모두 한글화 된 시점이라...
아래의 1, 2, 3 번 까지 하시면 본인의 PC를 실버라이트 2 개발 환경으로 만드실 수 있습니다.

Silverlight 배너


1. 개발툴 설치(Profession를 설치하시려면 처음 두 개, Express를 설치하시려면 세 번째 링크만)

한글 Visual Studio 2008 Professional Edition 평가판(90일) 다운로드 (ISO형태라서 가상 이미지 툴 필요)

한글 Visual Studio 2008 서비스팩1(설치 관리자)

한글 Visual Web Developer 2008 Express Edition with SP1 다운로드 및 설치(서비스 팩이 합쳐진 버전)


2. 실버라이트 툴 설치(실버라이트 개발자용 Runtime, SDK, VS Tool 합쳐짐)


한글 Visual Studio 2008 SP1용 Microsoft® Silverlight™ Tools(Runtime, SDK, VS용 Tool 포함)


3. 디자인 툴 설치(Visual Studio와 연동할 수 있는 Expression Blend)

한글 Microsoft Expression Blend™ 2 평가판(30일)

한글 Microsoft Expression Blend™ 2 서비스 팩 1(Blend 2와 합쳐진 것은 없음)


4. 추가 다운로드

Deep Zoom Composer(영문) - 버전업이 되면 링크가 달라질 수 도 있음.

Silverlight Toolkit(영문) - 추가 컨트롤(차트, 그래프, 자동완성 등)

Microsoft Silverlight 2 개발자용 런타임 - SL2 런타임만 지웠다가 다시 깔때 필요(공도님 링크참고)

한글 Microsoft® Silverlight™ 2 소프트웨어 개발 키트 - 실버라이트 2 한글 도움말 파일

Silverlight - MSDN Library(한글문서) - 온라인으로 실버라이트 한글 도움말을 보시려면...


출처 : UXCommando! :: Silverlight blog

Posted by 맨날맑음
,


어플레케이션을 개발 하다 보면 종종 멀티키(Ctrl + c , Ctrl + v등) 입력을 지원해야 하는 경우가 있다''

실버라이트에서는 기본적으로 두가지 키보드관련 이벤트가 지원 되는데
KeyDown과 KeyUp이다''

void KeyDown(object sender, KeyEventArgs e);
이벤트처리기에서 두번째 매개변수의 KeyEventArgs ee.Key를 이용하면 사용자가 누른 키
알아낼수 있고 object sender는 어떤 컨트롤에서 일어난 키보드 이벤트인지 알아낼수 있다''

☞ Ctrl + C 조합 판별하는 로직!

void KeyDown(object sender, KeyEventArgs e)
{
       if (e.Key == Key.C && Keyboard.Modifiers == ModifierKeys.Control)
       {
               //to do..
       }
}


 

Posted by 맨날맑음
,
명령줄 작업

일부 Microsoft Expression Encoder 기능은 명령줄 인터페이스를 사용하여 시작할 수 있습니다. 응용 프로그램의 기본 기능에 익숙하다면 전체 비디오 인코딩 프로세스를 포함하는 명령을 실행할 수도 있습니다.

  1. 명령 프롬프트 창을 엽니다.

  2. Microsoft Expression Encoder 설치 디렉터리로 이동합니다.

  3. 명령 프롬프트에 encoder/?를 입력합니다. 그러면 창에 다음 명령 구문과 함께 사용자가 입력할 수 있는 변수가 나타납니다.

    Encoder.exe /Source <FileName> /Target <FileName> [/OptionName <Value>] [/Preset <PresetFile>] [/LogOn|Off][/Time][/DefaultMarkerThumbnailsOn]

  4. 명령을 입력한 후 다음 단원의 지침에 따라 옵션을 입력합니다.

[/OptionName <Value>] 명령에 다음 옵션 중 하나를 입력합니다.

  • Source <FileName>   원본 비디오 파일의 파일 경로를 지정합니다.

  • Target <FileName>   인코딩된 최종 비디오의 파일 경로를 지정합니다.

  • [/Preset<PresetFile>]   특정 작업(job) 파일의 항목에 적용할 기본 설정을 지정합니다. 기본 설정을 추가할 작업 파일의 파일 이름을 입력합니다.

  • [/Log On|Off]   작업 기본 설정에 대해 로그 파일을 출력합니다.

  • [/Time]   파일 StdOut에 대한 프로세스를 실행하는 데 걸린 시간을 출력합니다.

  • [/DefaultMarkerThumbnailsOn]   입력 파일의 각 마커에 대해 미리 보기를 생성합니다.

  • OverlayFileName:<some string>   비디오의 오버레이로 사용할 이미지 파일의 경로를 지정합니다. Expression Encoder에서는 .jpg, .bmp, .png 및 .jpg 이미지 파일을 지원합니다.

  • OverlayRect:<X,Y,W,H>   오버레이 파일에 대해 지정할 위치 좌표(X [왼쪽],Y [위쪽]) 및 크기(W,H)를 지정합니다. 이 좌표는 출력 비디오 크기를 기준으로 합니다.

  • OverlayOpacity:<X>   오버레이 파일의 투명성 수준을 지정합니다. 이 값은 백분율을 나타내는 소수여야 합니다. 예를 들어 45%의 불투명도로 파일을 표시하려면 .45 값을 입력해야 합니다.

  • OverlayTransparentBackground:<true|false>   Expression Encoder에서 단색 배경을 투명으로 처리할지 여부를 지정합니다.

  • OverlayLoop:<true|false> 오버레이를 반복할지 여부를 지정합니다.

  • OverlayLoopingGap:<HH:MM:SS> 오버레이가 반복되기 전 지속 시간을 지정합니다.

  • OverlayFadeInDuration:< HH:MM:SS> 오버레이의 페이드 인이 지속되는 시간을 지정합니다.

  • OverlayFadeOutDuration:< HH:MM:SS> 오버레이의 페이드 아웃이 지속되는 시간을 지정합니다.

  • OverlayLayoutMode:< MainVideo|WholeSequence|Custom> 비디오에서 오버레이가 나타날 부분을 지정합니다.

  • OverlayStartTime:< HH:MM:SS> 오버레이를 시작할 시간을 지정합니다.

  • OverlayEndTime:<HH:MM:SS> 오버레이를 종료할 시간을 지정합니다.

  • VideoProfile:<Name of Profile>   이전에 프로필을 저장한 경우 저장된 프로필의 이름을 지정합니다.

  • AudioProfile:<Name of Profile>   저장된 프로필의 이름을 지정합니다. 이전에 저장해 둔 프로필이 있어야 합니다.

  • TwoPassEncoding:<true|false>   인코딩 프로세스에 2 패스를 적용할 것인지 여부를 지정합니다.

  • VideoComplexity: <Fastest|Fast|Good|Normal|Better|Best>   비디오 스트림의 인코딩 복잡도를 지정합니다.

  • DeinterlaceMode:<Off|AutoBob|ForceBob|AutoPixelAdaptive|ForcePixelAdaptiveTopFieldFirst> 디인터레이스 모드를 지정합니다.

  • ResizeQuality:<NearestNeighbor|Bilinear|Bicubic|Super|Lanczos> 비디오 크기를 조정하는 데 사용할 알고리즘을 지정합니다.

  • NormalizeAudio:<true|false> 인코딩하는 동안 오디오를 정규화할지 여부를 지정합니다.

  • AudioGainLevel:<X> 오디오 게인 수준을 지정합니다.

  • MaxPacketSize:<X> 패킷의 최대 크기(바이트)를 지정합니다.

  • MinPacketSize:<X> 패킷의 최소 크기(바이트)를 지정합니다.

  • CropRect<X,Y,W,H>   자르기 사각형에 대해 지정할 위치 좌표(X [왼쪽],Y [위쪽]) 및 크기(W,H)를 지정합니다. 이 좌표는 원본 비디오 크기를 기준으로 합니다.

  • VideoSize:<X,Y>   비디오의 최종 크기를 지정합니다.

  • VideoResizeMode:<Stretch|Letterbox>   대상 비디오의 가로 세로 비율이 다를 때 Expression Encoder에서 원본 비디오를 늘일지 아니면 레터박스 형식으로 표시할지 지정하며, 이는 VideoSizeMode를 대신합니다.

  • FileType:<None|Audio|Video> 항목의 파일 형식을 지정합니다. 오디오 또는 비디오 스트림만 출력하도록 설정할 수 있습니다.

  • AspectRatioMode:<SquarePixels|FourThree|SixteenNine|Source|Custom> 가로 세로 비율을 지정합니다.

  • CustomAspectRatio:<X,Y> 사용자 지정 가로 세로 비율을 지정합니다.

  • VideoSizeMode:<ProfileAdaptive|Profile|Source|Custom> 비디오 크기 모드를 지정하며, 이는 VideoPixelSizeMode를 대신합니다.

  • ScriptCommandOutput:<Header|Stream> 스크립트 명령을 헤더에 기록할지, 아니면 스트림에 기록할지를 나타내는 값을 지정합니다.

  • ThumbnailMode:<None|BestFrame|FirstFrame|Custom>   다음 설명에 따라 미리 보기 옵션을 지정합니다.

    • 미리 보기를 비디오와 연결하지 않으려면 없음을 선택합니다.

    • 검정색이나 단색이 아닌, 영상이 시작되는 첫 번째 컬러 프레임을 미리 보기로 사용하려면 최상의 프레임을 선택합니다.

    • 비디오의 첫 번째 프레임을 미리 보기로 사용하려면 첫 번째 프레임을 선택합니다.

    • 비디오에서 나만의 미리 보기를 선택하려면 사용자 지정을 선택합니다.

  • ThumbnailTime :<HH:MM:SS>   미리 보기로 사용할 프레임의 위치를 지정합니다. 이 옵션에 대해 변수를 입력하면 미리 보기 모드가 사용자 지정으로 지정됩니다.

  • ThumbnailCodec:<Jpeg|Bmp|Png|Gif>   미리 보기를 압축하는 방법을 지정합니다.

  • ThumbnailJpegCompression:<X>   파일 이름 옆에 표시될 미리 보기의 JPG 압축 품질을 지정합니다. 1에서 100 사이의 값을 입력할 수 있습니다. 값을 입력하지 않으면 Expression Encoder에서는 기본값인 75를 사용합니다. 압축률이 높으면 품질이 좋아지지만 파일 크기는 커집니다.

  • ThumbnailSize:<X,Y>   미리 보기의 크기를 지정합니다.

  • MarkerThumbnailCodec:<Jpeg|Bmp|Png|Gif>   마커 미리 보기를 압축하는 방법을 지정합니다.

  • MarkerThumbnailJpegCompression:<X>   마커에서 생성되는 미리 보기의 JPG 압축 품질을 지정합니다. 1에서 100 사이의 값을 입력할 수 있습니다. 값을 입력하지 않으면 Expression Encoder에서는 기본값인 75를 사용합니다. 압축률이 높으면 품질이 좋아지지만 파일 크기는 커집니다.

  • MarkerThumbnailSize:<X,Y>   마커 미리 보기의 크기를 지정합니다.

  • LeaderFileName:<some string>   선행부 비디오로 사용할 비디오의 파일 경로를 지정하며, 이는 LeadingClip을 대신합니다.

  • LeaderVideoResizeMode:<Stretch|Letterbox>   주 비디오 크기로 조정할 때 Expression Encoder에서 선행부 클립을 늘릴지 아니면 레터박스로 표시할지를 지정하며, 이는 VideoSizeModeLeadingClip을 대신합니다.

  • TrailerFileName:<some string>   후행부 비디오로 사용할 비디오의 파일 경로를 지정하며, 이는 TrailingClip을 대신합니다.

  • LeaderDuration:<HH:MM:SS> 선행부의 지속 시간을 지정하며, 선행부가 이미지 또는 XAML 파일이면 지속 시간을 변경하는 데 사용할 수 있습니다. 이는 LeadingImageDuration을 대신합니다.

  • TrailerVideoResizeMode:<Stretch|Letterbox>   주 비디오 크기로 조정할 때 Expression Encoder에서 후행부 비디오를 늘릴지 아니면 레터박스로 표시할지를 지정하며, 이는 VideoSizeModeTrailingClip을 대신합니다.

  • TrailerDuration:<HH:MM:SS> 후행부의 지속 시간을 지정하며, 후행부가 이미지 또는 XAML 파일이면 지속 시간을 변경하는 데 사용할 수 있습니다. 이는 TrailingImageDuration을 대신합니다.

  • StartTime:<HH:MM:SS>   비디오 시작 지점을 지정하며, 비디오를 트리밍하는 데 사용합니다.

  • EndTime:<HH:MM:SS>   비디오 끝 지점을 지정하며, 비디오를 트리밍하는 데 사용합니다.

  • OverlayAudioGainLevel:<X> 시각적 오버레이의 오디오 게인 수준을 지정합니다.

  • AudioOverlayFileName:<a string> 비디오에서 오디오 오버레이로 사용할 오디오의 파일 경로를 지정합니다.

  • AudioOverlayLoop:<true|false> 오디오 오버레이를 반복할지 여부를 지정합니다.

  • AudioOverlayLoopingGap:<HH:MM:SS> 오디오 오버레이가 반복되기 전 지속 시간을 지정합니다.

  • AudioOverlayLayoutMode:< MainVideo|WholeSequence|Custom> 비디오에서 오디오 오버레이가 나타날 부분을 지정합니다.

  • AudioOverlayStartTime:<HH:MM:SS> 오디오 오버레이를 시작할 시간을 지정합니다.

  • AudioOverlayEndTime:<HH:MM:SS> 오디오 오버레이를 종료할 시간을 지정합니다.

  • AudioOverlayGainLevel:<X> 오디오 오버레이의 오디오 게인 수준을 지정합니다.

encoder /<command>를 입력하면 다음 기능에 액세스할 수 있습니다.

  • Help   명령 프롬프트에 대한 도움말 파일 내용을 표시합니다.

  • ListProfiles   사용 가능한 모든 사용자 지정 프로필 및 기본 프로필을 표시합니다.

  • JobFile <XEJ file|XML file>   사용자가 지정하는 작업 파일을 엽니다. 이는 JobFile:<XML file>을 대신합니다.

  • ListTemplates    설치한 기본 템플릿 및 사용자 지정 템플릿을 표시합니다.

  • ValidateTemplate <Template Name>   사용자가 지정하는 사용자 지정 템플릿 파일을 컴파일하고 관련 오류를 보고합니다.

    출처 : MSDN Library

Posted by 맨날맑음
,

Silverlight에서 컨트롤을 드래그 하는 방법을 알아보자!
얼마전에 컨트롤을 드래그 하는것을 만들다가 Silverlight의 좌표 체계(?)인
Margin 방식이 좀 낯설어서 생각보다 오래 테스트를 하여 구현 했기 때문에
드래그하는 방법을 차근차근 알아보려한다. 

구현할 프로그램

 Grid 안에 담긴 컨트롤을 마우스로 드래그 되야함.
   유의사항
       드래그 될때 마우스로 잡은 곳이 변경 되어서는 안되며! 빠르게 움직여도  컨트롤을 놓쳐서는 안된다!

프로젝트 생성 (MyDrag)



Microsoft Expression Blend툴을 이용한 간단한 컨트롤 디자인

간단한 메모 기능이 있는 웹젯같은 형태로 만들기 위해 TextBox를 배치햇고 상단에는 Drag를 위한
DragPanel이라는 Grid 배치
여기서 컨트롤의 Margin의 right botton 부분을 0으로 고정한다;

 
비하인드 코드( page.xaml.cs)로 가서 DragPanel의 마우스 이벤트를 등록한다
Class의 멤버 변수로 이전 마우스의 좌표를 저장하기 위한 Point beforePositon; 변수를 선언한다

Point beforePositon;

void DragPanel_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
            DragPanel.MouseMove -= new MouseEventHandler(DragPanel_MouseMove);
}

void DragPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
            DragPanel.MouseMove += new MouseEventHandler(DragPanel_MouseMove);
}

void DragPanel_MouseMove(object sender, MouseEventArgs e)
{
           
}


여기서 MouseLeftButtonDown이벤트 발생후에만 Drag를 할수있으므로 MouseLeftButtonDown이벤트 처리기에
DragPanel.MouseMove += new MouseEventHandler(DragPanel_MouseMove);
이벤트를 등록하고 MouseLeftButtonUp 이벤트 처리기에서 마우스 Move 이벤트를 해지한다!


이제 마우스 MouseLeftButtonUp 이벤트 처리기부터 차근차근 코딩 해보자;
일단 마우스가 클릭되면 컨트롤 밖으로 마우스가 벗어나더라도 마우스 이벤트를 받을수 있어야
빠르게 드레그해도 드레그가 되기 때문에 DragPanel.CaptureMouse(); 를 호출한다

드레그를 시작한 마우스 좌표를 저장하기 위해 미리 선언해둔 beforePosition 변수에 현재 좌표를 저장한다
beforePositon = e.GetPosition(LayoutRoot);
void DragPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
            DragPanel.CaptureMouse();
            beforePositon = e.GetPosition(LayoutRoot);
            DragPanel.MouseMove += new MouseEventHandler(DragPanel_MouseMove);
}

MouseMove 이벤트 처리기에서 실질적인 Drag를 처리한다;
우선 마우스의 좌표가 변화를 구하여 beforePositon 변수에 저장한다;
beforePositon.X = e.GetPosition(LayoutRoot).X - beforePositon.X;
beforePositon.Y = e.GetPosition(LayoutRoot).Y - beforePositon.Y;

현재 컨트롤의 Margin정보를 temp 객체에 저장하고
위에서 구한 차이만큼을 가감한다; 이때 Right 와 Botton은 위에서 0으로 고정했으므로 신경 쓸 필요가 없다

변경된 Margin을 컨트롤에 적용한다;
this.Margin = temp;

 다음 드레그를 위해 현재 위치를 저장한다
 beforePositon = e.GetPosition(LayoutRoot);
void DragPanel_MouseMove(object sender, MouseEventArgs e)
{
            beforePositon.X = e.GetPosition(LayoutRoot).X - beforePositon.X;
            beforePositon.Y = e.GetPosition(LayoutRoot).Y - beforePositon.Y;
            Thickness temp = this.Margin;
            temp.Left += beforePositon.X;
            temp.Top += beforePositon.Y;
            this.Margin = temp;
            beforePositon = e.GetPosition(LayoutRoot);
}

MouseLeftButtonUp 이벤트 처리기에서는 CaptureMouse를 ReleaseMouseCapture 해준다
void DragPanel_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
            DragPanel.ReleaseMouseCapture();
            DragPanel.MouseMove -= new MouseEventHandler(DragPanel_MouseMove);
}

이렇게만 해주면 마우스 드레그가 아주 잘되는 것을 확인 할 수 있다!
Posted by 맨날맑음
,


Microsoft Visual Studio 2008을 이용하여 개발하는 개발자라면 거의 알고 있겠지만;

유용한 단축키 몇개를 소개 할려고 한다!


F6 (Ctrl + Shift + B)
아마도 가장 많이 쓰지 않을까 생각된다; 프로젝트를 빌드 시켜준다! 다들 아시겠지만 F5 버튼은 프로젝트를
디버깅 모드
로 실행한다;

Alt +  Enter
어느창이던지 속성창으로 바로 이동한다; 속성창을 열어 두지 않았더라도 알아서 속성창을 열어줌!


Shift + Alt + Enter
프로젝트 코드 에디터창을 Full Screen으로 전환 시켜 준다.(토글)
잘 안보이지만 전체화면으로 실행된 모습 ↓↓↓

Ctrl + K + M
함수를 만들어준다!
 만약 int result = sum(3,5);
 라고 코딩했경우 이곳에 커서를 놓코 단축키르르 누르면 알아서 함수를 만들어 준다;

Ctrl + R + R
리펙터링 기능중 이름 바꾸기 기능에 해당한다;



Ctrl + M + M
코드블럭을 열었다 감추었다 할수 있다.

Posted by 맨날맑음
,