Mystika-old
C#으로 버블 정렬하기
개발/C# - 2013. 4. 28. 00:01 - 김똘똘



정렬에 굉장히 약한것 같아 생각나서 코딩 했는데 막상 끝내니 왜 했는지 모르겠다.


요건 github에 안올릴거 :P


소스 코드

SortingExample.zip


예전에 만들어뒀던 샘플용 프로젝트가 생각나서 다시 한번 깔끔하게 코드 정리하고 GitHub에 커밋했다.


핵심 소스는 아래에 있으며, 예제 프로젝트는 https://github.com/DevBird/Change-WebBrowser-UserAgent-Example에 커밋하여놨다.


  RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent", true);
            rk.SetValue(null, "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1");

            wb.Navigate(txtURL.Text);
            while (this.wb.Document == null)
            {
                Application.DoEvents();
            }

            rk.SetValue(null, "");



내가 현재 개발 및 수정하고 있는 프로젝트인 4Chal에서 랭크 게임 챔피언 정보 컨트롤에 마우스를 올려보면 해당 챔피언의 이미지가 밝아져 선명하게 보이는 효과가 있는데, 이 글에서는 DoubleAnimation을 이용하여 해당 기능을 어떻게 구현하는지에 대하여 쓰는 글이다.


아래 동영상은 최종적으로 완성된 샘플이다.




처음에 이 기능을 구현할때는 WPF에서 이미지 컨트롤에 이펙트를 주어서 변화를 주려고 했으나 머리를 좀 더 굴려보니 훨씬 쉬운 방법이 생각났다.


바로 이미지 컨트롤 위에 검은색의 컨트롤을 덮어씌우고 해당 컨트롤의 Opacity를 적절히 변화 시키는것.



아래와 같은 구조로 작성했다.



<Grid>
        <Border x:Name="borderRoot">
            <Border.Triggers>
                <EventTrigger RoutedEvent="Border.MouseEnter">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="grdCover" Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:0.5" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
                <EventTrigger RoutedEvent="Border.MouseLeave">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="grdCover" Storyboard.TargetProperty="Opacity" To="0.5" Duration="0:0:0.5" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Border.Triggers>
            <Grid>
                <Image x:Name="imgBackground" Source="riven.png" />
                <Grid x:Name="grdCover" Background="Black" Opacity="0.5"/>
            </Grid>
        </Border>
    </Grid>


이것이 해당 기능을 구현하는 XAML 코드이다. 상당히 간단함.

여담으로 부드러운 Opacity 변경을 위해서 DoubleAnimation에 From 속성을 쓰지 않았다.


추가적으로 해당 기능을 C# 코드로 작성하는 방법이다.




코드 샘플 다운로드

OpacityChangeAnimation.zip



개발을 하다보면, 한 프로그램에서 여러 언어를 지원해야 할 경우가 있습니다.


이것을 지역화라고 하는데 가장 단순하게 생각해보면 프로젝트 파일을 복사해 언어별로 새로 빌드하는 방법이 있지만,

이 방법은 단순한 만큼 막노동에 가까운 유지 보수를 하게 되죠. 업데이트마다 언어별로 새로 빌드를..


C#에서는 리소스 파일을 이용하여 지역화를 꽤 쉽게 할 수 있습니다.




1. 먼저 아래와 같이 프로젝트에 리소스 파일을 추가해줍니다. 저는 이 리소스 파일을 원본 리소스 파일이라고 부르겠습니다.

그리고, 이름은 StringLib이라고 지정해주었습니다.






2. 폼에 번역할 컨트롤(여기서는 Label)을 하나 놓았습니다. Text 값은 Why Hello There.




3. 원본 리소스 파일에 문자열 리소스를 하나 추가해시고, 이름은 자유롭게 설정해주세요.

값은 원본 리소스 파일이므로 영어로 해주었습니다. (원하시는 기본 언어로 설정해주시면 됩니다. 저는 영어로 하였음)





4. 아래와 같이 label1.Text ... 코드를 추가하고 빌드를 해봅니다.





5. Lable1의 Text를 Why Hello There으로 지정해주어서 바뀐게 없어 보이지만, 아래의 Text값은 StringLib.labelHello에 들어간 값입니다.





6. 이제 한국어 지역화를 해봅시다. 새로 리소스 파일을 추가합니다.

리소스 파일의 이름은 (원본 리소스 파일 이름).(지역 코드).resx 로 해주세요. 한국은 ko 와 ko-KR을 사용하므로, 저는 StringLib.ko.resx을 추가해야겠네요.







7. 한국어 리소스 파일에 아래와 같이 이름과 값을 추가하고 빌드를 해주세요. 문자열 리소스 이름은 같아야해요.





8. 아래와 같이 한국어로 표시됩니다. 한국이 아닌 지역 설정의 PC에서는 원본 리소스 파일에 설정된 Why Hello There가 나오겠죠.




지역 코드 참고 : http://msdn.microsoft.com/ko-kr/library/vstudio/system.globalization.cultureinfo(v=vs.90).aspx


TrayBin - 휴지통을 트레이로 !
개발/C# - 2011. 6. 27. 00:42 - 김똘똘

으아아... 자주 글 쓴다고 해놓고 또 일주일 넘게 방치했네요 ㅠㅠ


이번에 소개해드릴 프로그램은 'TrayBin'입니다! 심심풀이로 만들기도 하고.. 학교 공모에 낼 프로그램이지요 ㅎㅎ


만드는데 이런저런 오류가 있었는데... 얼떨결에 한방에 해결하게 되었네요 ^^;;


그렇다면, 이제 본격적으로 프로그램 소개를 시작하겠습니다.(뭐 딱히 소개라 할것도 없지만요 ㅎ)




휴지통을 트레이로! - TrayBin



▲ 먼저 프로그램의 아이콘입니다. 으어어엉 ㅠㅠ 이 프로그램의 아이콘은 자체 제작입니다.


아이콘을 넣으려고 하는데.. 이 프로그램에 맞는 딱히 좋은 아이콘도 없고.. 갑자기 `직접 해보자!`라는 욕구가 들어서 말이죠 ㅎㅎ


어떤 모양으로 만들까 생각하는데 30분 정도 걸리고... 프로그램에 사용된 아이콘 모두 만드는데 1시간 정도 걸렸네요 ㅠ









▲ TrayBin을 실행시키면 아무런 창도 뜨지 않습니다. 대신, 트레이에서 프로그램이 실행되었다는 알림이 나오죠 ㅎ


프로그램 실행 시마다 알림이 계속 뜨는데요.. 한번 실행 이후 자동적으로 안나오게 할지


또는 사용자가 직접 설정하여 그 때부터 안나오게 할지 생각중입니다. ㅠㅠ

( 여러분의 의견을 주세요 ! )







▲ 트레이에 있는 TrayBin의 아이콘에 마우스를 가져다 놓으면, 휴지통의 정보가 나타납니다.

- 제가 이 포스트 서문에서 말했던 `오류`가 이 부분입니다. ㅠㅠ ( 테스트 해준 친구에게 감사를 ㅎㅎ )


그리고 트레이에 있는 아이콘은 휴지통의 상태에 따라 변하는데요,

어떤 기준으로 변하는지는 밑에 있습니다. ^^







▲ 바로 위에서 말씀드렸듯이 TrayBin의 아이콘은 현재 휴지통의 상태에 따라 변합니다.

아마 위의 이미지를 보시고 바로 눈치새겼겠지만 휴지통 공간 사용 비율에 따라 아이콘이 변합니다.

즉 (현재 휴지통 사용량 / 휴지통 사용 최대 용량)을 기준으로 바뀌죠.

0%~ 10%까지는 비어있는 모양, 11~30%까지는 약간 차 있는 모양,
31~70%까지는 반 정도 차 있는 모양, 71%부터는 꽉 차있는 모양으로 표시됩니다.






▲ 다운로드

* 프로그램 실행에 .NET Framework 3.5가 필요합니다.

----- 수정 내역 -----

06/27 02:30 AM
사용자가 프로그램 실행 알림을 표시/비 표시 할 수 있게 수정하였습니다.
처음 프로그램 실행 이후 실행 알림이 나오지 않습니다.
[휴지통 열기] 메뉴가 추가되었습니다.

06/27 07:20 PM
실행 알림 표시/비 표시 메뉴 제거
시스템 시작시 자동 실행 기능 추가
시스템 파티션 전체의 휴지통 크기를 기준으로 비율 표시

06/27 08:10 PM
휴지통 정보 갱신 주기 단축(3초->1.5초)
Alt+Tab 다이얼로그에서 보이지 않는 TrayBin 창이 보이는 문제 해결.

FreeMmr 1.6
개발/C# - 2010. 10. 30. 21:30 - 김똘똘

FreeMmr 1.6 업데이트입니다.


Windows 7에서만 사용할 수 있는 기능이 추가되고 수정되었습니다.

먼저, 작업 표시줄에서 메모리 알림 표시가 색상별로 표시되게 바뀌었습니다.
최적화중 | 50%미만 | 70%미만 | 70% 이상





그리고 작업 표시줄 썸네일 뷰에서 바로 최적화할수 있도록 단축 버튼이 추가되었습니다.






Aero Thumbnail Customizer
개발/C# - 2010. 6. 26. 14:31 - 김똘똘
프로그램 이름 그대로 Windows 7에서 창 미리보기에 대한 설정을 하는 프로그램입니다. (죄송합니다. 심심해서 그만..)




프로그램의 구조는 아래와 같습니다. 각각 알맞게 값을 변경하신 후 '설정 적용하기'를 클릭하시면 됩니다.





임의로 설정을 적용하시면 아래처럼 창 미리보기 썸네일의 크기가 조절됩니다.