Chart를 표현할때 상한, 하한 값이라던지 특정 라인별 구분선이 필요할 경우가 있다.
이 때 사용하는 방법이다.
ChartFX의 내용중에  CustomGridLines 이라는 것이 있다.
GridLine이 Char의 내용에 선을 표현한다.
이 것을 사용하여 새로운 선을 추가할수 있다.

소스 :
 ChartFX.WinForms.CustomGridLine cgl1 = new ChartFX.WinForms.CustomGridLine();
            cgl1.Color = Color.BlueViolet;  // 선의 색깔
            cgl1.Text = " TEST";  // 선에 표현될 글
            cgl1.Value = 10;  // 선이 위치할 각 축의 값.
            chart1.AxisY.CustomGridLines.Add(cgl1);  // y축에 표현
            chart1.AxisX.CustomGridLines.Add(cgl1); // x축에 표현

결과 :
사용자 삽입 이미지

Posted by 훈이아제
,
MDI 를 사용중에 창이 여러개 생기지 않게 할 필요가 있다.
그래서 찾던중 발견했다 방법을...
현재 MDI에 어떤창이 띄어져 있는지 확인하고 그창을 죽이는 부분이다.
여기서는 MDI에 다른창이 떠있으면 무조건 창을 닫고 새로이 창을 열수 있게 하도록 하였다.

현상 :

사용자 삽입 이미지



소스 :
// foreach  A in B 구문은  B의 배열값을 A에 Data에 넘져줄때 Data가 있으면 조건을 타는 문장이다.
            // MDI의 모든 창을 닫는다.
            foreach (System.Windows.Forms.Form TheForm in this.MdiChildren)
            {
                TheForm.Dispose();
            }


            // MDI 화면 띄우기
            m_CF1 = new ClassLibrary1.Form1();
            m_CF1.MdiParent = this;
            m_CF1.WindowState = FormWindowState.Normal;
            m_CF1.AutoScroll = true;
            m_CF1.StartPosition = FormStartPosition.Manual;

            m_CF1.Show();


결과 :

사용자 삽입 이미지




Posted by 훈이아제
,
Chart FX를 사용중 하나의 Char에 페널을 여러개 할당하고 그 곳에서 Y좌표를 표현하려 하였다.
그러나 아래와 같이 메인 패널만 기본적으로 할당이 되고 다른 패널은 할당이 안되는 현상이 발생하였다.
현상:
사용자 삽입 이미지

그래서 찾은 방법이 AxisY를 선언하여 Panel에 만든 AxisY를 추가한후 Series의 AxisY를 만든 AxisY로 연결한다.
소스 :
//// Chart FX 멀티라인 표현 방법.
            //// Y에 사용될 AxisY를 하나를 만든다.
            //ChartFX.WinForms.AxisY axy2 = new ChartFX.WinForms.AxisY();
            //// 해당 AxisY의 속성을 지정한다.
            //axy2.Position = ChartFX.WinForms.AxisPosition.Far;
            //// 만든 AxisY를 해당 판넬에 할당한다.
            //chart1.Panes[1].Axes.Add(axy2);
            //// 할당된 AxisY를 Data에서 할당 할 수 있게 한다.
            //chart1.Series[2].AxisY = axy2;
결과:
사용자 삽입 이미지

Posted by 훈이아제
,

C, C++ 에서 구조체의 저장크기가 변하는 경우가 있다.
이는 기본 구조체의 싸이즈가 정해져 있기 때문이다.
윈도우에서는 프로그램 속성에서 기본구조체를 원하는 형태로 바꾸면 된다. 그러나 그럴경우 어떠한 문제가 생길지는 기존에 사용하는 프로그램과 호환시 문제가 발생할 수 있다.( 기존프로그램에서는 변경되지 않고 사용했을 경우 서로 주고받는 Data 의 구조가 달라져서 문제가 생긴다.)
이 때, 기본 구조체의 싸이즈는 그대로 두고 현재 부분의 구조체만 변경시에는 #pragma pack 을 사용한다.

struct __TEMP_DATA_S
{
    short aaa;
    int   bbb;
}
위의 구조체를 sizeof 하여 값을 보면 8로 나온다.
우리가 생각할때는 6으로 나와야되나 기본 구조체 사이즈가 4바이트 형식이므로 맞추어 떨어지게 하기위하여 2바이트를 더하여 8바이트로 변경된다.

#pragma pack(puch, 2)   // 기본구조체사이즈를 2바이트형으로 변경한다.
struct __TEMP_DATA_S
{
    short aaa;
    int   bbb;
}
#pragma pack(pop)        // 기본구조체 사이즈를 2바이트형에서 원래의 기본 바이트로 변경한다.
으로 #pragma pack 을 추가하면 sizeof 시 값이 우리가 원하는 6으로 나온다.

참고 ----1
#pragma pack(puch, 1)   // 기본구조체사이즈를 1바이트형으로 변경한다.
struct __TEMP_DATA_S
{
    short aaa;
    char  ccc;
    int   bbb;
}
#pragma pack(pop)        // 기본구조체 사이즈를 1바이트형에서 원래의 기본 바이트로 변경한다.
----1

제 경험상으로는 PLC와 PC 와의 통신 프로그램 생성시 PC는 4바이트가 기본형이지만 PLC측은 WORD(2바이트)가 기본형이어서 문제가 많이 발생하여 그 때, 주로 사용하였습니다.

pack의 puch는 뒤의 사이즈로 변경한다는 의미.
pack의 pop은 바꾸기전의 사이즈로 변경한다는 의미.

* (VC,VC++) 와 (GCC, G++) 간에는 약간의 사용상 차이가 있을 수 있다.

Posted by 훈이아제
,
C# 에서 사용하는 DataGridView의 폰트를 각각의 부분에 지정할수 있다.

1. 전체적으로 폰트 적용하기.
  this.dataGridView1.Font = new Font("Fixsys", 12, FontStyle.Bold);

2. Colum 의 해더부분을 지정하기
 this.dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("Fixsys", 12, FontStyle.Bold);

3. Row 해더부분을 지정하기
  this.dataGridView1.RowHeadersDefaultCellStyle.Font = new Font("Fixsys", 12, FontStyle.Bold);

4. Cell 내용부분을 지정하기.
  this.dataGridView1.DefaultCellStyle.Font = new Font("Fixsys", 10, FontStyle.Bold);

DataGridView를 사용하면 DB 접속하여 Data를 표현할시 따로 작업할 필요없이 작업이 가능하다.
Posted by 훈이아제
,

C# : font 설정 방법

Program/C# 2012. 3. 29. 10:29
C#에서는 Font를 손쉽게 지정할수 있다.
해당 폰트를 받을 부분에 새로운 폰트명을 넣어주면 된다.

사용 예)

this.dataGridView1.DefaultCellStyle.Font = new Font("Fixsys", 10, FontStyle.Bold);

이런 식으로 사용가능하다.


Posted by 훈이아제
,

이 부분은 다로 설명이 필요 없으나 아래에 반하는 것을 하나 적어놓느다.

CString tempCS;
tempCS.Format(“ADD”);

or

char tempChar[16];
memcpy(tempChar, “ADD”, 3);
tempCS.Format(“%.3s”, tempChar);

위와같이 두가지 방법으로 Data를 넣을 수 있다.

Posted by 훈이아제
,


1. memcpy 사용하기가 가장 좋아하는 방법으로 단지 넣을 길이보다 받는 곳이 더 사이즈가 커야한다.
CString tempCS = “qwerty";
char tempChar[16];
memcpy(tempChar, &(LPCTSTR)tempCS ,tempCS.GetLength());

2. strcpy 사용하기는 함수 자체를 별로 좋아하지 않으므로 패스.
CString tempCS = “qwerty";
int length = tempCS .GetLength();
char* tempChar= new char[length];
strcpy(tempChar, tempCS.GetBuffer(0));

3. 형변환 사용하기가 있는데 이 방법은 비추 합니다.
CString tempCS = “qwerty";
char* tempChar= LPSTR(LPCTSTR(tempCS ));

4. sprintf 사용하기 또한 좋아하는 방법으로 DATA의 넣는 형식 또한 지정할 수 있어서 통신프로그램작성시 많이 사용한다. 단 받을 DATA의 최대 길이를 미리 알고 있어야 한다.
CString tempCS = “qwerty";
char tempChar[16];
sprintf(tempChar,”%.6s”,tempCS.GetString());

Posted by 훈이아제
,


포인터로 선언된 것을 초기화시  &를 붙여서 초기화하면 Data의 초기화가 아니라 포인트 어드래스를 초기화하여 Data를 입력하지 못하게한다.(입력을 못하게 하는것이 아니라 시스템 메모리 어드래스를 침범하므로 강제 종료처리가 되는것임 )

Posted by 훈이아제
,