프로그래밍 261

1단계 Undo하기

1단계 Undo하기. 아주 단순하게 1단계의 Undo만 할 수 있다. 생각해 봤는데 그렇게 어렵지 않게 할 수 있다. 만약 TextList를 Undo한다면 다음과 같이 하면 된다. TextList의 형이 CTextList라면 CTextList형으로 2개의 슬롯을 만든다. 배열을 이용하자. CTextList textlist[2] 이렇게 2개의 배열을 만든다. 그리고 int m_nUndoIndex를 통해 2개의 배열중 어느 배열을 이용하면 되는지를 알 수 있다. 처음엔 0으로 세팅한다. 그리고 0번째 배열에 맨 처음 초기 상태의 값들을 넣는다. 이렇게 해야 맨 처음 한번 데이터를 넣고 그걸 Undo할 때 맨 처음 상태로 돌아갈 수 있다. 그리고 데이터를 하나씩 추가할 때마다 m_nUndoIndex를 0, 1..

프로그래밍 2006.11.05

VC++, 델파이 웹에서 다운로드받는 가장 쉬운 방법

VC++ 2003 Delphi 7 에서 실험 VC++에서는 #include "Urlmon.h" // 인터넷에서 다운로드 받는다. HRESULT hr = URLDownloadToFile (NULL, strWebFilename, strFilename, 0, NULL); if (FAILED(hr)) { MessageBox("인터넷에서 파일 다운로드 받기에 실패했습니다."); ::DeleteFile(strFilename); return ERROR; } // if (FAILED(hr)) 델파이에서는 uses urlmon URLDownloadToFile(nil, PAnsiChar('http://www.panboy.pe.kr/tattertools/image/owner/controlPanelLogo.gif'), PAn..

프로그래밍 2006.11.05

델파이에서 ActiveX 콘트롤 만들기(ActiveForm 쓰지 않고)

델파이 7 기준. 메뉴에서 File > New > Other > ActiveX탭 > ActiveX 콘트롤 선택 그럼 ActiveX Control Wizard가 뜨는데, 여기서 기본이 되는 VCL Class Name을 TFrame으로 보통 선택한다. 물론 용도에 따라 다르게 선택하면 되겠지. 나머지는 뭐 다 알아서. 그리고 바로 메뉴에서 File > New > Other > ActiveX탭 > Com Object나 Com Object + Event 등을 선택한다. Com Object Wizard가 뜨는데, Class Name에 클래스 이름을 넣어준다. 여기서 C나 T로 시작하지 않도록 한다. 이렇게 하고 안에서 컨트롤들을 쓰려면(Fast Report같은) Create 할 때 Owner에 그 안의 FDelp..

사용자 정의 커서 사용하기

사용자 정의 커서 사용하면 잘 안된다. SetCursor(LoadCursor(NULL, IDC_WAIT)); 이렇게 미리 정의되어 있는 거 사용하면 무쟈게 잘 되는데, 사용자 정의 커서는 잘 안된다. 예를 들어, IDC_PENCIL 을 정의해 놓고, (이런 연필 모양 커서는 C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Graphics\cursors 에 가보면 많다.) 이걸 쓰려고 하는데, 툴 버튼을 누르는 곳에서 SetCursor을 하면 안된다. WM_SETCURSOR 메시지 처리를 하면서 다시 원래 arrow로 바꿔 버리기 때문이다. 그래서 결국에는 WM_SETCURSOR 메시지 핸들러에서 마우스 커서를 바꿔줘야 한다. 아래와 같이 경우에 따..

MFC ActiveX에서 BackSpace가 안먹히는 문제 해결

출처 : http://support.microsoft.com/kb/q168777/ MFC ActiveX에서는 BackSpace가 안먹힌다. IE가 BackSpace, Tab, 화살표 키등을 트랩하고 있기 때문이다. 이 문제를 해결하려면 위의 문서를 보면 된다. ㅋ 단순히 백스페이스 문제만 해결하려면 아주 단순히 int CMyActiveXCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (COleControl::OnCreate(lpCreateStruct) == -1) return -1; OnActivateInPlace (TRUE, NULL); // == UI-Activate the control return 0; } 저렇게만 해줘도 백스페이스 문제가 해결된다. 하지..