2012년 7월 26일 목요일

[게시오류] 매니페스트의 참조가 ID와 일치하지 않습니다.

ㆍ언어대상 : C#   ㆍ실행대상 : 윈도우(일반)   ㆍ작성자 : 홍석인  

 매니페스트의 참조가 다운로드한 어셈블리 [프로젝트명.exe]의 ID와 일치하지 않습니다.

1. 참조된 DLL이 추가 되었는지 확인한다.

2. 참조된 프로젝트의 FrameWork버전을 체크해본다.

3. 출력형식을 확인 해본다. [속성 - 응용프로그램 : 출력형식]

  - 라이브러리 형식의 클래스가 아닌 출력형으로 참조한 경우 위와 같은 게시 오류가 발생 할 수 있다.



해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
• 대표 전화 : 02) 2061 - 0753     • Fax : 02) 2061 - 0759
• 주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
• 기술 문의: 02) 2061-1259 김민석 (dev@devzone.co.kr)

2012년 7월 22일 일요일

PC 시간을 설정합니다.

ㆍ언어대상 : C#   ㆍ작성자 : 김민석  

PC의 시간을 동기화 할때 사용합니다.

API 함수 원형 입니다.

        [DllImport("kernel32.dll", EntryPoint = "GetSystemTime", SetLastError = true)]
        public extern static void Win32GetSystemTime(ref SYSTEMTIME lpSystemTime);
        [DllImport("kernel32.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
        public extern static bool Win32SetSystemTime(ref SYSTEMTIME lpSystemTime);

함수 입니다.

        ///


        /// 한국시간을 기준으로 합니다..(UTC는 제외)
        ///

        ///
        ///
        public bool SetLocalTime(DateTime locTime)
        {
            DateTime datatime = locTime.ToUniversalTime();

            SYSTEMTIME sTime = new SYSTEMTIME();
            Win32GetSystemTime(ref sTime);
            sTime.wYear = (ushort)datatime.Year;
            sTime.wMonth = (ushort)datatime.Month;
            sTime.wDayOfWeek = (ushort)datatime.DayOfWeek;
            sTime.wDay = (ushort)(datatime.Day);
            sTime.wHour = (ushort)(datatime.Hour);
            sTime.wMinute = (ushort)datatime.Minute;
            sTime.wSecond = (ushort)datatime.Second;
            sTime.wMilliseconds = (ushort)datatime.Millisecond;
            if (Win32SetSystemTime(ref sTime))
            {
                return true;
            }
            else
            {
                return false;
            }
        }


사용되는 구조체 원형은 다음과 같습니다.

   [StructLayout(LayoutKind.Sequential)]
    public struct SYSTEMTIME
    {
        public ushort wYear;
        public ushort wMonth;
        public ushort wDayOfWeek;
        public ushort wDay;
        public ushort wHour;
        public ushort wMinute;
        public ushort wSecond;
        public ushort wMilliseconds;
    }



해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
• 대표 전화 : 02) 2061 - 0753     • Fax : 02) 2061 - 0759
• 주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
• 기술 문의: 02) 2061-1259 김민석 (dev@devzone.co.kr)

ScriptErrorsSuppressed 기능 대안.

ㆍ언어대상 : C#   ㆍ실행대상 : 윈도우어플   ㆍ작성자 : 김민석   ㆍ간단설명 : ScriptErrorsSuppressed가 IE7/IE8에서 이상 증상이 발생합니다. 대안코드입니다.  

        webBR.ScriptErrorsSuppressed = true;

        private void webBR_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            ((WebBrowser)sender).Document.Window.Error +=
                new HtmlElementErrorEventHandler(Window_Error);

        }

        private void Window_Error(object sender, HtmlElementErrorEventArgs e)
        {
            // Ignore the error and suppress the error dialog box.
            e.Handled = true;
        }

      //IE 옵션에서 스크립트 디버거 사용 않함. 체크, 모든 스크립에 관한 알림 체크 해지



해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


[WPF] 3D 객체 등록 및 카메라 관련 소스

ㆍ언어대상 : WPF   ㆍ실행대상 : WPF   ㆍ작성자 : 홍석인  

  public partial class Ani_2 : Window
    {
        Viewport3D view3d = new Viewport3D();

        // 카메라 설정
        OrthographicCamera camera = new OrthographicCamera();

        // 각 모델들의 집합
        ModelVisual3D _ModelGroup = new ModelVisual3D();


        double x = 5;
        double y = 5;
        double z = 5;

       
        

        public Ani_2()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            // 카메라 보는 방향을 설정하는 구문
            camera.Position = new Point3D(5, 5, 5);
            camera.LookDirection = new Vector3D(-1, -1, -1);
            camera.Width = 10;

            // Pro WPF in c# 2008 page 877 설명
            view3d.ClipToBounds = false;

            // 위 지붕
            GeometryModel3D Model1 = new GeometryModel3D();
            #region 윗 지붕
            #region 그릴 객체의 색을 정의 하는 구간
            DiffuseMaterial meterial = new DiffuseMaterial(new SolidColorBrush(Colors.Pink));
            #endregion

            #region 그릴 포지션을 정의 하는 구간
            MeshGeometry3D pointer = new MeshGeometry3D();
            pointer.Positions.Add(new Point3D(-1,1,1));
            pointer.Positions.Add(new Point3D(0, 2, 1));
            pointer.Positions.Add(new Point3D(0, 2, -1));
            pointer.Positions.Add(new Point3D(-1,1,-1));
            pointer.Positions.Add(new Point3D(0, 2, 1));
            pointer.Positions.Add(new Point3D(1, 1, 1));
            pointer.Positions.Add(new Point3D(1, 1, -1));
            pointer.Positions.Add(new Point3D(0, 2, -1));
            pointer.TriangleIndices.Add(0);
            pointer.TriangleIndices.Add(1);
            pointer.TriangleIndices.Add(2);
            pointer.TriangleIndices.Add(0);
            pointer.TriangleIndices.Add(2);
            pointer.TriangleIndices.Add(3);
            pointer.TriangleIndices.Add(4);
            pointer.TriangleIndices.Add(5);
            pointer.TriangleIndices.Add(6);
            pointer.TriangleIndices.Add(4);
            pointer.TriangleIndices.Add(6);
            pointer.TriangleIndices.Add(7);
            #endregion

            Model1.Geometry = pointer;
            Model1.Material = meterial;

            #endregion
           
            // 옆면
            GeometryModel3D Model2 = new GeometryModel3D();
            #region 옆면
            DiffuseMaterial meterial2 = new DiffuseMaterial(new SolidColorBrush(Colors.Red));
            MeshGeometry3D pointer2 = new MeshGeometry3D();
            pointer2.Positions.Add(new Point3D(-1,1,1));
            pointer2.Positions.Add(new Point3D(-1,1,-1));
            pointer2.Positions.Add(new Point3D(-1,-1,-1));
            pointer2.Positions.Add(new Point3D(-1,-1,1));
            pointer2.Positions.Add(new Point3D(1,1,-1));
            pointer2.Positions.Add(new Point3D(1,1,1));
            pointer2.Positions.Add(new Point3D(1,-1,1));
            pointer2.Positions.Add(new Point3D(1,-1,-1));
            pointer2.TriangleIndices.Add(0);
            pointer2.TriangleIndices.Add(1);
            pointer2.TriangleIndices.Add(2);
            pointer2.TriangleIndices.Add(0);
            pointer2.TriangleIndices.Add(2);
            pointer2.TriangleIndices.Add(3);
            pointer2.TriangleIndices.Add(4);
            pointer2.TriangleIndices.Add(5);
            pointer2.TriangleIndices.Add(6);
            pointer2.TriangleIndices.Add(4);
            pointer2.TriangleIndices.Add(6);
            pointer2.TriangleIndices.Add(7);
            Model2.Geometry = pointer2;
            Model2.Material = meterial2;
            #endregion

            // 옆면
            GeometryModel3D Model3 = new GeometryModel3D();
            #region 옆면
            DiffuseMaterial meterial3 = new DiffuseMaterial(new SolidColorBrush(Colors.Green));
            MeshGeometry3D pointer3 = new MeshGeometry3D();
            pointer3.Positions.Add(new Point3D(-0.25,0,1));
            pointer3.Positions.Add(new Point3D(-1,1,1));
            pointer3.Positions.Add(new Point3D(-1,-1,1));
            pointer3.Positions.Add(new Point3D(-0.25,-1,1));
            pointer3.Positions.Add(new Point3D(-0.25,0,1));
            pointer3.Positions.Add(new Point3D(-1,-1,1));
            pointer3.Positions.Add(new Point3D(0.25,0,1));
            pointer3.Positions.Add(new Point3D(1,-1,1));
            pointer3.Positions.Add(new Point3D(1,1,1));
            pointer3.Positions.Add(new Point3D(0.25,0,1));
            pointer3.Positions.Add(new Point3D(0.25,-1,1));
            pointer3.Positions.Add(new Point3D(1,-1,1));
            pointer3.Positions.Add(new Point3D(1,1,1));
            pointer3.Positions.Add(new Point3D(0,2,1));
            pointer3.Positions.Add(new Point3D(-1,1,1));
            pointer3.Positions.Add(new Point3D(-1,1,1));
            pointer3.Positions.Add(new Point3D(-0.25,0,1));
            pointer3.Positions.Add(new Point3D(0.25,0,1));
            pointer3.Positions.Add(new Point3D(1,1,1));
            pointer3.Positions.Add(new Point3D(1,1,-1));
            pointer3.Positions.Add(new Point3D(1,-1,-1));
            pointer3.Positions.Add(new Point3D(-1,-1,-1));
            pointer3.Positions.Add(new Point3D(-1,1,-1));
            pointer3.Positions.Add(new Point3D(1,1,-1));
            pointer3.Positions.Add(new Point3D(-1,1,-1));
            pointer3.Positions.Add(new Point3D(0,2,-1));

            int[] data = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 15, 17, 18, 19, 20, 21, 19, 21, 22, 23, 24, 25 };

            for (int i = 0; i < data.Length; i++)
            {
                pointer3.TriangleIndices.Add(data[i]);
            }
            Model3.Geometry = pointer3;
            Model3.Material = meterial3;
            #endregion


           

            ModelVisual3D show3d = new ModelVisual3D();
            ModelVisual3D show3d2 = new ModelVisual3D();
            ModelVisual3D show3d3 = new ModelVisual3D();
            ModelVisual3D trns = new ModelVisual3D();
        

            ModelVisual3D Light = new ModelVisual3D(); // 불빛을 설정해줘야함 , 이것이 없으면 색은 검은색으로 표현

            AmbientLight ll = new AmbientLight();
            Light.Content = ll;
           
            show3d.Content = Model1;
            show3d2.Content = Model2;
            show3d3.Content = Model3;
           

            _ModelGroup.Children.Add(show3d);
            _ModelGroup.Children.Add(show3d2);
            _ModelGroup.Children.Add(show3d3);
            _ModelGroup.Children.Add(Light);


        

            // 각종 모델의 변환의 그룹
            Transform3DGroup TransGroup = new Transform3DGroup();


           
            RotateTransform3D ro3d = new RotateTransform3D();
            AxisAngleRotation3D axisro = new AxisAngleRotation3D();
            axisro.Angle = 45;
            axisro.Axis = new Vector3D(0, 1, 0);
            ro3d.Rotation = axisro;

            ScaleTransform3D scale3d = new ScaleTransform3D();

            scale3d.ScaleX = 1.5;
            scale3d.ScaleY = 1.5;
            scale3d.ScaleZ = 1.5;


            TransGroup.Children.Add(scale3d);
            TransGroup.Children.Add(ro3d);

            Model1.Transform = TransGroup;
            Model2.Transform = TransGroup;
            Model3.Transform = TransGroup;


            view3d.Children.Add(_ModelGroup);
            // 카메라 보는 값 세팅 추가
            view3d.Camera = camera;

            Page Page = new Page();
            Page.Background = Brushes.Black;

            Page.Width = 100;
            Page.Height = 100;

            Page.Content = view3d;
            this.AddChild(Page);
       
        }

     
        private void Window_MouseWheel(object sender, MouseWheelEventArgs e)
        {
            if (e.Delta / 120 > 0)
            {
                camera.Position = new Point3D(x, y, z++);
                //camera.UpDirection = new Vector3D(x, y, z++);
            }
            else
            {
                camera.Position = new Point3D(x, y, z--);
                //camera.UpDirection = new Vector3D(x, y, z--);
            }
            camera.LookDirection = new Point3D(0, 0, 0) - camera.Position;
            view3d.Camera = camera;
        }

        private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Left)
            {
                // 카메라 보는 방향을 설정하는 구문
                camera.Position = new Point3D(x++, y, z);
                camera.Width = 10;
                // 카메라 보는 값 세팅 추가
                view3d.Camera = camera;
            }
            else if (e.Key == Key.Right)
            {
                // 카메라 보는 방향을 설정하는 구문
                camera.Position = new Point3D(x--, y, z);
                camera.Width = 10;
                // 카메라 보는 값 세팅 추가
                view3d.Camera = camera;
            }
            else if (e.Key == Key.Down)
            {
                // 카메라 보는 방향을 설정하는 구문
                camera.Position = new Point3D(x, y++, z);
                camera.Width = 10;
                // 카메라 보는 값 세팅 추가
                view3d.Camera = camera;
            }
            else if (e.Key == Key.Up)
            {
                // 카메라 보는 방향을 설정하는 구문
                camera.Position = new Point3D(x, y--, z);
                camera.Width = 10;
                // 카메라 보는 값 세팅 추가
                view3d.Camera = camera;
            }

            // 특정한 좌표값을 중심으로 움직임!!
            camera.LookDirection = new Point3D(0, 0, 0) - camera.Position;
        }
    }



해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


제품 Demo

Concept of maintenance안녕하세요. (주)데브존 입니다. 해당 페이지는 서비스가 현재 준비이거나 내용을 현재 작성중 일 수 있습니다. 빠른 시일안에 변경된 내용이 게시될 예정입니다. 감사합니다.

Line

 

goto Top



해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
• 대표 전화 : 02) 2061 - 0753     • Fax : 02) 2061 - 0759
• 주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
• 기술 문의: 02) 2061-1259 김민석 (dev@devzone.co.kr)

HowTo Hide CDialog at DoModal (not using SW_HIDE)

ㆍ언어대상 : C++   ㆍ작성자 : 김민석   ㆍ간단설명 : SW_Hide 사용하지 않고 CDialog 숨기기 방법  
void CTest_deleteDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)  {     if(!visible)         lpwndpos->flags &= ~SWP_SHOWWINDOW;      CDialog::OnWindowPosChanging(lpwndpos); }


해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


Bitmap 구성(DIB)

ㆍ언어대상 : C++   ㆍ실행대상 : 윈도우어플   ㆍ작성자 : 김민석  

BITMAPFILEHEADER bf;
BITMAPINFO *bi; 

BITMAPINFO는 BITMAPINFOHEADER + (색상수)*sizeof(RGBQUAD) 입니다.

Bitmap은

bf

bi

data 구성 입니다.

http://whoim.tistory.com/entry/Windows-%EB%B9%84%ED%8A%B8%EB%A7%B5-DDB%EC%99%80-DIB%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90



해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


투명 Dialog 만들기

ㆍ언어대상 : C++   ㆍ작성자 : 김민석  
 
Layerd 속성
SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
 

//Paint
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
RECT lpClient;
GetWindowRect(&lpClient);
CBrush backBrush(RGB(36,41,47));
CBrush* pOldBrush = dc.SelectObject(&backBrush);
CRect rect;
dc.GetClipBox(&rect);
dc.PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
dc.SelectObject(pOldBrush);

 
//생성시
int OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  if (CDialog::OnCreate(lpCreateStruct) == -1)
      return -1;
  // TODO: 여기에 특수화된 작성 코드를 추가합니다.
  SetLayeredWindowAttributes(RGB(36,41,47), 255, LWA_COLORKEY);
  return 0;
}


해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


[WPF] ComboBox DB데이터 연동시키기(itemsource)

ㆍ언어대상 : WPF   ㆍ실행대상 : WPF   ㆍ작성자 : 홍석인  

일반적인 경우에는 DB를 통하여 가져온뒤 다시

List<>에 추가한 후 이것을 다시 콤보박스 아이템에 추가한다.

만일 지워야 할 경우에는 콤보박스에 있는 아이템과 List<>에 있는 아이템을 삭제해야한다.

그렇게 되면 관리시 복잡성이 증가한다.

이에 해결하는 방법은 ItemsSource를 이용하는 것이다. 이것을 이용하면 List<>에서 변경만을 통해서 콤보박스로 서로 공유된다.

예제

정의

List<itmes> ItemLarge = new List<itmes>();
class itmes
{
public string Largeitem { get; set; } // get; set;을 해줘어야 합니다.
}

string[] dd = CardList[0].Row["LargeSubSmallitem"].ToTrim().Split("&");

ItemSmall.Clear();
for (int i = 0; i < dd.Length - 1; i++)
{
itmes2 it = new itmes2();
it.Small = dd[i];
ItemSmall.Add(it);
}

listsmall.ItemsSource = ItemLarge ; // list를 추가합니다.
listsmall.DisplayMemberPath = "Largeitem "; // 연결을 해줘야 하기 때문에 리스트에 추가한 변수이름명을 기재합니다.
listsmall.Items.Refresh(); // 리플래쉬를 통해서 최신화 시킵니다. 삭제나 추가시 이 구문 써줘야함.



해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


ASSOCIATORS (WMI)

ㆍ언어대상 : C#   ㆍ작성자 : 김영재  
            foreach(ManagementObject drive in new ManagementObjectSearcher("select * from Win32_DiskDrive where InterfaceType='USB'").Get())
            {
                // associate physical disks with partitions
                foreach(ManagementObject partition in new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + drive["DeviceID"] + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition").Get())
                {
                        // Console.WriteLine("Partition=" + partition["Name"]);
                    richTextBoxEx1.AppendLine( "Partition=" + partition["Name"] + "--------");
                        // associate partitions with logical disks (drive letter volumes)
                        foreach(ManagementObject disk in new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='"+ partition["DeviceID"] + "'} WHERE AssocClass = Win32_LogicalDiskToPartition").Get())
                        {
                             //Console.WriteLine("Disk=" + disk["Name"]);
                            textBox2.Text = "Disk=" + disk["Name"];
                        }
                }
                // this may display nothing if the physical disk
                // does not have a hardware serial number
                //Console.WriteLine("Serial=" + new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] + "'")["SerialNumber"]);
                textBox3.Text = "Serial=" + new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] + "'")["SerialNumber"];
            }  


해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


많은 파일의 목록을 돌아야 하는 경우. (FileFind)

ㆍ언어대상 : C#   ㆍ작성자 : 김민석   ㆍ간단설명 : FileFind  

파일이 많은경우 System.IO.Directory.GetFile는 메모리 오류가 발생할 수 있다.

많은 파일은 전체를 받는게 아닌 그때 그때 다음파일에 대한 목록을 가져오는 방식(C++/API)으로 사용한다.

using iasmcs.Base.Extension;

 using (FileSystemEnumerator fse = new FileSystemEnumerator("경로", "*.txt", false))
{
           IEnumerator<FileInfo> ien = fse.Matches().GetEnumerator();
           ien.Dispose();

           foreach (FileInfo fi in fse.Matches())
           {
                   //파일 반복
           }
}



해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


ClickOnce 변수 값 상태 확인

ㆍ언어대상 : C#   ㆍ실행대상 : 윈도우어플   ㆍ작성자 : 김민석   ㆍ간단설명 : Click Once의 설치 상태별  

[Visual Studio에서 실행시]
IsNetworkDeployed : False


[로컬 - 웹에 아직 첫개시 않됨]
IsNetworkDeployed : True

[ApplicationDeployment]
ActivationUri : null
CurrentVersion : 1.0.0.5
DataDirectory : C:\Users\iampro\AppData\Local\Apps\2.0\Data\P2MRJ1EA.4GO\HBPQKJ3G.L80\wind..tion_d9305e0e83819c6a_0001.0000_464de0a2ec492778\Data
IsFirstRun : False
UpdatedApplicationFullName : file:///C:/Temp/ClickOnce/WindowsFormsApplication10.application#WindowsFormsApplication10.application, Version=1.0.0.5, Culture=en, PublicKeyToken=d9305e0e83819c6a, processorArchitecture=x86/WindowsFormsApplication10.exe, Version=1.0.0.5, Culture=en, PublicKeyToken=d9305e0e83819c6a, processorArchitecture=x86, type=win32
UpdatedVersion : 1.0.0.5
UpdateLocation : http://product.devzone.co.kr/Devzone/ClickOnce/WindowsFormsApplication10.application

[로컬 - 웹에 업로드 된경우]
IsNetworkDeployed : True

[ApplicationDeployment]
ActivationUri : null
CurrentVersion : 1.0.0.5
DataDirectory : C:\Users\iampro\AppData\Local\Apps\2.0\Data\P2MRJ1EA.4GO\HBPQKJ3G.L80\wind..tion_d9305e0e83819c6a_0001.0000_464de0a2ec492778\Data
IsFirstRun : False
UpdatedApplicationFullName : file:///C:/Temp/ClickOnce/WindowsFormsApplication10.application#WindowsFormsApplication10.application, Version=1.0.0.5, Culture=en, PublicKeyToken=d9305e0e83819c6a, processorArchitecture=x86/WindowsFormsApplication10.exe, Version=1.0.0.5, Culture=en, PublicKeyToken=d9305e0e83819c6a, processorArchitecture=x86, type=win32
UpdatedVersion : 1.0.0.5
UpdateLocation : http://product.devzone.co.kr/Devzone/ClickOnce/WindowsFormsApplication10.application

[UpdateCheckInfo]
AvailableVersion : 1.0.0.6
IsUpdateRequired : False
MinimumRequiredVersion : 
UpdateAvailable : True
UpdateSizeBytes : 281759


[온라인 - 업데이트 필요]

IsNetworkDeployed : True

[ApplicationDeployment]
ActivationUri : null
CurrentVersion : 1.0.0.8
DataDirectory : C:\Users\iampro\AppData\Local\Apps\2.0\Data\P2MRJ1EA.4GO\HBPQKJ3G.L80\wind..tion_d9305e0e83819c6a_0001.0000_49483f07dee27e38\Data
IsFirstRun : False
UpdatedApplicationFullName : file:///C:/Temp/ClickOnce/WindowsFormsApplication10.application#WindowsFormsApplication10.application, Version=1.0.0.8, Culture=en, PublicKeyToken=d9305e0e83819c6a, processorArchitecture=x86/WindowsFormsApplication10.exe, Version=1.0.0.8, Culture=en, PublicKeyToken=d9305e0e83819c6a, processorArchitecture=x86, type=win32
UpdatedVersion : 1.0.0.8
UpdateLocation : http://product.devzone.co.kr/Devzone/ClickOnce/WindowsFormsApplication10.application

[UpdateCheckInfo]
UpdateAvailable : True
AvailableVersion : 1.0.0.9
IsUpdateRequired : False
MinimumRequiredVersion : 
UpdateSizeBytes : 283807


[온라인 - 업데이트 미필요]
IsNetworkDeployed : True

[ApplicationDeployment]
ActivationUri : null
CurrentVersion : 1.0.0.12
DataDirectory : C:\Users\iampro\AppData\Local\Apps\2.0\Data\P2MRJ1EA.4GO\HBPQKJ3G.L80\wind..tion_d9305e0e83819c6a_0001.0000_1740e7fe450d95de\Data
IsFirstRun : True
UpdatedApplicationFullName : http://product.devzone.co.kr/Devzone/ClickOnce/WindowsFormsApplication10.application#WindowsFormsApplication10.application, Version=1.0.0.12, Culture=en, PublicKeyToken=d9305e0e83819c6a, processorArchitecture=x86/WindowsFormsApplication10.exe, Version=1.0.0.12, Culture=en, PublicKeyToken=d9305e0e83819c6a, processorArchitecture=x86, type=win32
UpdatedVersion : 1.0.0.12
UpdateLocation : http://product.devzone.co.kr/Devzone/ClickOnce/WindowsFormsApplication10.application

[UpdateCheckInfo]
UpdateAvailable : False
AvailableVersion : *오류
IsUpdateRequired : *오류
MinimumRequiredVersion : *오류
UpdateSizeBytes : *오류



해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


서버의 80 포트가 접속 가능한지 체크하는 함수 입니다.

ㆍ언어대상 : C#   ㆍ작성자 : 김민석  
       /// <summary>
        /// ServerAvailable 서버 체크
        /// </summary>
        /// <param name="strServer">서버 URL</param>
        /// <returns></returns>
        public bool ServerAvailable(string strServer)
        {
            try
            {
                HttpWebRequest reqFP = (HttpWebRequest)HttpWebRequest.Create(strServer);
                HttpWebResponse rspFP = (HttpWebResponse)reqFP.GetResponse();
                if (HttpStatusCode.OK == rspFP.StatusCode)
                {
                    // HTTP = 200 - Internet connection available, server online
                    rspFP.Close();
                    return true;
                }
                else
                {
                    // Other status - Server or connection not available
                    rspFP.Close();
                    return false;
                }
            }
            catch (WebException)
            {
                // Exception - connection not available
                return false;
            }
        }


해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


CFtpFileFind 사용법 메모.

ㆍ언어대상 : C++   ㆍ작성자 : 김민석  
CFtpFileFind ftpFind(m_pFtpConnection);
BOOL bContinue = ftpFind.FindFile(curDir);
while (bContinue)
{
  bContinue = ftpFind.FindNextFile();
  ftpFind.~~~~
}


해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


DB Trigger

ㆍ언어대상 : MsSQL   ㆍ작성자 : 김민석  

1. 트리거(Trigger)란

트리거란 특정 테이블의 데이터에 변경이 가해졌을 때 자동으로 수행되는 저장 프로시져라고 할 수 있습니다. 예전에 배웠던 저장 프로시져는 필요할 때마다 사용자가 직접 수행시켜야 했습니다.(물론 SQL Server가 시작될 때 자동으로 수행되게 하는 방법이 있기는 하지만) 하지만 트리거는 이와 달리 테이블의 데이터가 INSERT, UPDATE, DELETE문에 의해 변경 되어질 때 자동으로 수행되므로 이 기능을 이용하며 여러가지 작업을 할 수 있습니다. 이런 이유로 트리거를 사용자가 직접 수행 할 수는 없습니다.

예를 들어 [사원] 테이블에 새로운 데이터가 들어오면(즉 신입 사원이 들어오면) [급여] 테이블에 새로운 데이터(즉 신입 사원의 급여 정보)를 자동으로 생성하고 싶을 경우 [사원] 테이블에 트리거를 설정하여 구현 할 수 있습니다.

2. INSERTED, DELETED 테이블

트리거를 제대로 사용하기 위해서는 다음의 두 테이블에 대하여 이해하고 있어야 합니다.

o INSERTED 테이블
o DELETED 테이블

위 두 테이블은 물리적으로 존재하는 테이블이 아닙니다. 특정 테이블의 데이터에 변경이 가해졌을 때 트리거를 위해 자동으로 만들어지는 논리적인(실제로 존재하지 않는 가상의) 테이블입니다. 그 이름으로 추측되다시피 INSERTED 테이블은 테이블에 새로운 데이터가 INSERT될 때, DELETED 테이블은 테이블의 데이터가 DELETE될 때 만들어집니다.

그렇다면 왜 UPDATED 테이블이 없냐고요? 테이블의 데이터가 UPDATE 되는 것은 기존의 데이터가 DELETE되면서 새로운 데이터가 INSERT되는 과정으로 보아 DELETED 테이블과 INSERTED 테이블이 동시에 만들어집니다. 즉, DELETED 테이블에는 UPDATE 되기전 내용이 포함되어 있으며, INSERTED 테이블에는 변경된 새로운 내용이 포함되어 있습니다.

3. 트리거 만들기(CREATE TRIGGER)

CREATE TRIGGER문에 의해서 트리거를 만들수 있습니다. 물론 DROP TRIGGER문에 의해서 트리거를 제거 할 수 있으며, ALTER TRIGGER에 의해서 기존의 트리거를 수정 할 수 있습니다.

트리거를 만들때는 다음의 내용을 포함하게 됩니다.

o 트리거의 이름
o 어느 테이블에 대한 것인지 테이블 이름 지정
o INSERT, DELETE, UPDATE중 어느 경우에 수행될 트리거인지 지정(복수 선택 가능)
o 실제 수행될 쿼리문(이 쿼리문 안에서 INSERTED, DELETED 테이블을 이용하게됩니다)

트리거를 통하여 어떤 작업이든 할 수 있는게 아닙니다. 트리거를 통해 할 수 없는 작업을 몇가지 나열해 보도록 하겠습니다.

o 데이터베이스 변경(ALTER DATABASE)
o 데이터베이스 생성(CREATE DATABASE)
o 데이터베이스 제거(DROP DATABASE)
o 데이터베이스 복구(RESTORE DATABASE)
o 로그 복구(RESTORE LOG)
o 기타(DISK INIT, DISK RESIZE, LOAD DATABASE, LOAD LOG, RECONFIGURE)

우선 간단한 트리거의 예를 보도록 하겠습니다.

USE Pubs
GO

CREATE TRIGGER trg_Sales_Delete ON Sales
FOR DELETE
AS
IF (SELECT COUNT(*) FROM Deleted) > 1
BEGIN
RAISERROR('You cannot delete more than one row at a time',16,1)
ROLLBACK TRANSACTION
END

o 트리거의 이름은 trg_Sales_Delete 입니다.
o DELETE에 대한 트리거입니다.
o Deleted 테이블의 Row 카운트를 이용하여 몇개의 Row가 지워졌는지 확인합니다.
o Pubs 데이터베이스의 Sales 테이블이 한번에 두개이상 지워지면 오류를 발생시키도록 했습니다.
o 오류 메세지를 발생시키고 ROLLBACK TRANSACTION을 이용하여 DELETE 트랜잭션을 취소 시킵니다.

위 예처럼 트리거 안에서 ROLLBACK TRANSACTION을 수행하면 트리거를 발생시킨 이전의 INSERT, DELETE, UPDATE 자체를 완전히 취소시키게 됨을 기억하시기 바랍니다.

위 트리거가 설정된 상태에서 한번에 여러개의 Row를 지우려고 하면 다음과 같이 오류가 발생합니다.

서버: 메시지 50000, 수준 16, 상태 1, 프로시저 trg_Sales_Delete, 줄 6
You cannot delete more than one row at a time

4. 트리거의 예

몇가지 트리거의 예를 들어 보도록 하겠습니다. 기초 강좌이니만큼 복잡한 내용은 다루지 않고 단순히 어떤 원리로 작동하는지 이해하기 위한 단순한 예입니다. Books Online을 보시면 여러가지 예가 나와 있습니다. 이를 참고하시기 바랍니다.

우선 다음과 같이 두개의 테이블을 만들었습니다.

CREATE TABLE Table1
(
col1 char(05),
col2 int
)
GO

CREATE TABLE Table2
(
col1 char(05),
col2 int
)
GO

[예제1]

INSERT 트리거의 예입니다.

CREATE TRIGGER trg_tbl1_Insert ON Table1 -- 1)
FOR INSERT
AS
INSERT INTO Table2(col1, col2) SELECT col1, col2 FROM Inserted
GO

INSERT INTO Table1 VALUES('AAAAA', 10) -- 2)
INSERT INTO Table1 VALUES('BBBBB', 20) -- 3)
GO

SELECT * FROM Table2 -- 4)

o Table1에 INSERT된 데이터가 그대로 Table2에 INSERT 되도록하는 트리거입니다.
o 트리거를 만들고 2)와 3)에 의해서 두개의 Row를 Table1에 추가했습니다.
o 4)에서 Table2의 내용을 SELECT해보면 Table1과 같이 두개의 Row를 보게 됩니다.

[예제2]

DELETE 트리거의 예입니다. 현재 Table1에는 col1이 'AAAAA'인 것과 'BBBBB' 인것 두개의 Row가 있습니다.

CREATE TRIGGER trg_tbl1_Delete ON Table1
FOR DELETE
AS
DECLARE @col1 char(05)
SELECT @col1 = col1 FROM Deleted
DELETE FROM Table2 WHERE col1 = @col1
GO

DELETE FROM Table1 WHERE col1 = 'AAAAA' -- 1)
또는
DELETE FROM Table1 -- 2)
또는
DELETE FROM Table1 WHERE col1 = 'AAAAA' -- 3)
DELETE FROM Table1 WHERE col1 = 'BBBBB' -- 4)
GO

SELECT * FROM Table2 -- 5)

o Table1에서 데이터가 DELETE되면 Table2에서도 지워지게 하는 트리거입니다.
o 1) 번이 수행되면 Table2에서도 col1이 'AAAAA" 인 Row가 지워집니다.
o 2) 번이 수행되면 Table1은 다 지워지지만 Table2는 하나의 Row만 지워집니다.
o 3) 번과 4) 번이 같이 수행되어 Table1이 다 지워지지면 Table2도 다 지워집니다.

[퀴즈]

위 세 경우의 차이점을 설명해 보시기 바랍니다.

[예제3]

UPDATE 트리거의 예입니다.

CREATE TRIGGER trg_tbl1_Update ON Table1
FOR UPDATE
AS
DECLARE @col1 char(5)
DECLARE @col2 int

SELECT @col1 = col1, @col2 = col2
FROM Inserted
UPDATE Table2 SET col2 = @col2
WHERE col1 = @col1
GO

UPDATE Table1 SET col2 = 30 WHERE col1 = 'AAAAA' -- 1)
GO
SELECT * FROM Table2 -- 2)

o Table1에 UPDATE된 내용이 그대로 Table2에 UPDATE 되도록하는 트리거입니다.
o 1)에 의해서 col1 이 'AAAAA'인 Row의 col2 가 30으로 바뀌었습니다.
o 2)에서 Table2의 내용을 SELECT해보면 Table1과 같이 바뀐 내용이 보입니다.



해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


DLL 링크 방식 정리

ㆍ언어대상 : C++   ㆍ작성자 : 김민석  
 
Compile Time Linking
[제작]
#ifdef __cplusplus // C++ 컴파일러가 실행중이면 extern "C" 키워드를 사용한다.
extern "C" {
#endif
// DLL이 익스포트하는 함수를 정의한다.
__declspec(dllexport) void* MyExportFunction()
{
return new CMyCalculatorObject;
}
// 익스포트 함수를 더 추가하려면 이 부분에서 정의하면 된다.
#ifdef __cplusplus
}
#endif

**결과물은 dll, lib
[사용]
- .h include
- .lib Linking
**선언
__declspec(dllimport) void* MyExportFunction();
**사용은 포인터 받아서 사용
 
Run-Time Dynamic Linking
[사용]
- .h include
- .dll 복사
* LoadLibrary,GetProcAddress,
**선언
typedef void*(*pDllFnc)();
**사용
pDllFnc pFnc;
CMyCalculatorObject *pObject;
HINSTANCE m_h = LoadLibrary("DLL01.dll");
if (m_h!=NULL){
pFnc = (pDllFnc)GetProcAddress(m_h,"MyExportFunction");
}else{
AfxMessageBox("dll링크실패");
return;
}
pObject = (CMyCalculatorObject*)pFnc();
delete pObject;
FreeLibrary(m_h);


해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


[WPF] 에니메이션 코드로 구동시키기(Storyboard)

ㆍ언어대상 : WPF   ㆍ실행대상 : WPF   ㆍ작성자 : 홍석인  

※ 본 예제는 버튼에 투명도와 동시에 높이가 증가하는 에니메이션 증가한 소스입니다.

private Storyboard myStoryboard; // 전역변수로 선언한다.

    private void Window_Loaded(object sender, RoutedEventArgs e)
        {

            StackPanel myPanel = new StackPanel();
            myPanel.Margin = new Thickness(10);

            // 사각형을 생성합니다.
            Rectangle myRectangle = new Rectangle();
            myRectangle.Margin = new Thickness(0);
            myRectangle.Name = "myRectangle";
            myRectangle.Width = 100;
            myRectangle.Height = 100;
            myRectangle.Fill = Brushes.Red;
            this.RegisterName(myRectangle.Name, myRectangle);

            // 버튼을 생성합니다. 하지만 임의 편집기로 버튼을 생성한 경우에는 this.RegisterName(btn.Name, btn); 레지스터에 등록만해줍니다.
            Button btn = new Button();
            btn.Name = "ButtonTest";
            btn.Margin = new Thickness(0, 0, 0, 0);
            btn.Width = 50;
            btn.Height = 50;
            btn.Background = Brushes.Black;
           
            this.RegisterName(btn.Name, btn); // 레지스터에 등록 실행 할 객체의 이름을 알기 위하여

            #region 다양한 에니메이션 정의
            DoubleAnimation myDoubleAnimation = new DoubleAnimation();
            myDoubleAnimation.From = 1.0;  // 시작
            myDoubleAnimation.To = 0.0;    // 끝
            myDoubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(2)); // 실행할 에니메이션 시간
            myDoubleAnimation.AutoReverse = true; // 반복여부
            myDoubleAnimation.RepeatBehavior = RepeatBehavior.Forever; // 반복횟수

            DoubleAnimation myDoubleAnimation1 = new DoubleAnimation();
            myDoubleAnimation1.To = 0;
            myDoubleAnimation1.Duration = new Duration(TimeSpan.FromSeconds(2));
            myDoubleAnimation1.AutoReverse = true;
            myDoubleAnimation1.RepeatBehavior = RepeatBehavior.Forever;
            #endregion

            myStoryboard = new Storyboard();
            myStoryboard.Children.Add(myDoubleAnimation); // 스토리보드에 등록
            myStoryboard.Children.Add(myDoubleAnimation1);

            Storyboard.SetTargetName(myDoubleAnimation, btn.Name); // 실행할 에니메이션의 객체 설정
            Storyboard.SetTargetName(myDoubleAnimation1, btn.Name);

            // 에니메이션을 적용 할 프로퍼트 설정
            Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(Button.OpacityProperty));
            Storyboard.SetTargetProperty(myDoubleAnimation1, new PropertyPath(Button.HeightProperty));

            myPanel.Children.Add(myRectangle);
            myPanel.Children.Add(btn);

            myStoryboard.Begin(this); // 스토리보드를 실행 시킵니다.
        }

// Transform에 관련된 에니메이션

 str.Children.Clear();

                TranslateTransform trans = new TranslateTransform(0, YPostion);
                canvas1.RenderTransform = trans;
  
                DoubleAnimation X_move = new DoubleAnimation(0, this.ActualWidth + canvas1.Width, TimeSpan.FromSeconds(Time));
                DoubleAnimation Y_move = new DoubleAnimation(YPostion, TimeSpan.FromSeconds(Time));
 
                X_move.RepeatBehavior = Y_move.RepeatBehavior = RepeatBehavior.Forever;

                str.Children.Add(X_move);
                str.Children.Add(Y_move);

                Storyboard.SetTargetProperty(X_move, new PropertyPath("(0).(1)", new DependencyProperty[] { UIElement.RenderTransformProperty, TranslateTransform.XProperty }));
                Storyboard.SetTargetProperty(Y_move, new PropertyPath("(0).(1)", new DependencyProperty[] { UIElement.RenderTransformProperty, TranslateTransform.YProperty }));
                Storyboard.SetTarget(str, canvas1);

                str.Begin();


 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;


using System.Windows.Media.Animation;

namespace Test
{
    ///


    /// TriggerTset.xaml에 대한 상호 작용 논리
    ///

    public partial class TriggerTset : Window
    {
        StackPanel stapan = new StackPanel();

        DoubleAnimation ScaleZoominx = new DoubleAnimation();
        DoubleAnimation ScaleZoominy = new DoubleAnimation();

        DoubleAnimation ScaleZoomoutx = new DoubleAnimation();
        DoubleAnimation ScaleZoomouty = new DoubleAnimation();


        Storyboard str = new Storyboard();
        Storyboard str2 = new Storyboard();
     
        Button btn;

        public TriggerTset()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            stapan.RenderSize = this.RenderSize;

            stapan.Background = new SolidColorBrush(Colors.Black);
            this.Content = stapan;

            stapan.Orientation = Orientation.Horizontal;
            stapan.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;

            for (int i = 0; i < 10; i++)
            {
                btn = new Button();
                btn.VerticalAlignment = System.Windows.VerticalAlignment.Bottom;
                btn.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
                btn.Width = 25;
                btn.Height = 20;
                btn.Name = "test" + i.ToString();
                btn.Content = i.ToString();
                btn.LayoutTransform = new ScaleTransform();
          
                stapan.Children.Add(btn);
            }

            ScaleZoominx.To = 2;
            ScaleZoominx.Duration = new Duration(TimeSpan.FromSeconds(0.25));
            ScaleZoominy.To = 2;
            ScaleZoominy.Duration = new Duration(TimeSpan.FromSeconds(0.25));

            ScaleZoomoutx.To = 1;
            ScaleZoomoutx.Duration = new Duration(TimeSpan.FromSeconds(0.25));
            ScaleZoomouty.To = 1;
            ScaleZoomouty.Duration = new Duration(TimeSpan.FromSeconds(0.25));

            // 프로퍼트에 없을 경우에는 해당하는 함수를 String으로 적어 줘야 함!!
            Storyboard.SetTargetProperty(ScaleZoominx, new PropertyPath("LayoutTransform.ScaleX"));
            Storyboard.SetTargetProperty(ScaleZoominy, new PropertyPath("LayoutTransform.ScaleY"));

            Storyboard.SetTargetProperty(ScaleZoomoutx, new PropertyPath("LayoutTransform.ScaleX"));
            Storyboard.SetTargetProperty(ScaleZoomouty, new PropertyPath("LayoutTransform.ScaleY"));

            str.Children.Add(ScaleZoominx);
            str.Children.Add(ScaleZoominy);

            str2.Children.Add(ScaleZoomoutx);
            str2.Children.Add(ScaleZoomouty);

            BeginStoryboard myBeginStoryboard = new BeginStoryboard();
            myBeginStoryboard.Storyboard = str;

            BeginStoryboard myBeginStoryboard2 = new BeginStoryboard();
            myBeginStoryboard2.Storyboard = str2;


            EventTrigger myMouseEnterTrigger = new EventTrigger();
            myMouseEnterTrigger.RoutedEvent = Button.MouseEnterEvent;
            myMouseEnterTrigger.Actions.Add(myBeginStoryboard);


            EventTrigger myMouseEnterTrigger2 = new EventTrigger();
            myMouseEnterTrigger2.RoutedEvent = Button.MouseLeaveEvent;
            myMouseEnterTrigger2.Actions.Add(myBeginStoryboard2);


            foreach (UIElement ui in stapan.Children)
            {
                Button test = (Button)ui;
                test.Triggers.Add(myMouseEnterTrigger);
                test.Triggers.Add(myMouseEnterTrigger2);
                test.Click += new RoutedEventHandler(test_Click);
            }


           


        }

        void test_Click(object sender, RoutedEventArgs e)
        {
            Button tt = (Button)e.Source; // 발생시킨 개체에 대한 참조값을 읽어 온다!!!
            if (tt.Name == "test1")
            {
            }
           
        }

      
    }
}



해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
• 대표 전화 : 02) 2061 - 0753     • Fax : 02) 2061 - 0759
• 주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
• 기술 문의: 02) 2061-1259 김민석 (dev@devzone.co.kr)

이미지를 Overlay하는 함수 입니다.

ㆍ언어대상 : C#   ㆍ작성자 : 김민석  


        /// <summary>
        /// 이미지를 Overlay 합니다.
        /// </summary>
        /// <param name="b">소스 이미지</param>
        /// <param name="over">위에 overlay할 이미지</param>
        /// <param name="nLeft">겹치기 시작 포인트</param>
        /// <param name="nTop">겹치기 시작 포인트</param>
        /// <returns></returns>
        public Bitmap OverlayImage(Bitmap b, Bitmap over,  int nLeft, int nTop, bool useSetG = true)
        {
            Bitmap result = new Bitmap(b.Width, b.Height);
            Graphics g = Graphics.FromImage((Image)result);
            if (useSetG)
                Var.SETG(g);
            g.DrawImage(b, 0, 0, b.Width, b.Height);
            g.DrawImage(over, nLeft, nTop, over.Width, over.Height);
            g.Dispose();

            return result;
        }



해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사


Encoder SDK DLL 참조

ㆍ언어대상 : C#   ㆍ실행대상 : WPF   ㆍ작성자 : 이동현   ㆍ간단설명 : ※ 팀 파운데이션 서버와 컴퓨터 간의 동기화 과정에서 해당 DLL이 동기화 되기 때문에 함께 프로젝트를 하는 팀원이 모두 해당 DLL을 사용할 수 있다.  

1. 본인 PC에 있는  참조 DLL 위치의 폴더 열기

2. DLL을 선택하여 Visual Studio 창으로 드래그 하여,  솔류션 탐색기 안에 DLL의 참조가 필요한 클래스에 던져 놓는다.

 

3. 2번을 진행 한 후, 해당 클래스의 참조에 마우스 커서를 가져다 놓고 오른쪽 마우스 키 클릭

4. 찾아보기 탭 창에 자동으로 팀파운데이션과 연결된 PC의 VssCache폴더가 보임

5. 해당 DLL을 선택하여 추가 확인 버튼 클릭하면 DLL 참조 추가 완료

※ 팀 파운데이션 서버와 컴퓨터 간의 동기화 과정에서 해당 DLL이 동기화 되기 때문에 함께
    프로젝트를 하는 팀원이 모두 해당 DLL을 사용할 수 있다.


첨부 파일


파일번호 파일명 파일크기 등록자 등록일자
첨부파일 1번  Microsoft.Expression.Encoder.dll  1,710 K Bytes  이동현  2012-05-24 오후 2:21:15
첨부파일 2번  Microsoft.Expression.Encoder.Types.dll  11 K Bytes  이동현  2012-05-24 오후 2:21:15
첨부파일 3번  Microsoft.Expression.Encoder.Utilities.dll  8,187 K Bytes  이동현  2012-05-24 오후 2:21:18
첨부파일 4번  Microsoft.Expression.Encoder.Api2.dll  229 K Bytes  이동현  2012-05-24 오후 2:21:18
첨부파일 5번  WebcamControl.dll  18 K Bytes  이동현  2012-05-24 오후 2:21:18
첨부파일 6번  EncoderCore.dll  28 K Bytes  이동현  2012-05-24 오후 2:21:19
첨부파일 7번  디렉토리폴.JPG  56 K Bytes  이동현  2012-05-24 오후 2:21:19
첨부파일 8번  DLL추가.JPG  108 K Bytes  이동현  2012-05-24 오후 2:21:19
첨부파일 9번  디렉토리폴.JPG  56 K Bytes  이동현  2012-05-24 오후 2:21:49
첨부파일 10번  DLL추가.JPG  108 K Bytes  이동현  2012-05-24 오후 2:21:49
첨부파일 11번  디렉토리폴.JPG  56 K Bytes  이동현  2012-05-24 오후 2:28:31
첨부파일 12번  DLL추가.JPG  108 K Bytes  이동현  2012-05-24 오후 2:28:32
첨부파일 13번  HtmlTextImage.jpg  105 K Bytes  이동현  2012-05-24 오후 2:29:19
첨부파일 14번  HtmlTextImage_2008410544.jpg  89 K Bytes  김민석  2012-05-25 오전 12:56:00


해당 내용은 (주)데브존의 웹봇이 자동으로 저희 홈페이지와 API로 동기화한 내용입니다. 자세한 내용은 홈페이지 http://www.devzone.co.kr 또는 모바일 폰에서 http://devzone.co.kr을 접속 하여 확인해 보시기 비랍니다.
-  대표 전화 : 02) 2061 - 0753   - Fax : 02) 2061 - 0759   - Skype : devzone24
-  주소 : 서울특별시 양천구 목1동 923-14. 현대드림타워 1024호
-  기술 문의: 02) 2061-1259 김민석 기술이사