본문 바로가기

전체 글317

Block PrintScreen ( 프로그램 캡쳐 방지) 프로그램에서 Print-Screen으로 화면 캡쳐를 막는 class 입니다. 문론 원천적으로 프로그램의 캡쳐를 완전히 막는 방법은 없습니다. 최소한의 캡쳐방비용 기능입니다. #include // ��� // http://msdn.microsoft.com/en-us/magazine/cc163713.aspx // http://msdn.microsoft.com/en-us/library/windows/desktop/ms646279(v=vs.85).aspx // http://labnol.blogspot.com/2004/08/disable-print-screen-key-in-windows.html //----------------------------------------------------------------.. 2012. 3. 23.
LOG_PRINTF 문자열 길이 제한을 벗어버리자 음.. 현재 ICT 의 LogLib에는 다음과 같은 함수를 이용해 LogPrintf하고 있다. void __cdecl XfAddIctLogFormat( int line, char *func, char*file,AnsiString type, char * lpszFormat, ...) { int nBuf; char acLogMsg[4096]; va_list args; va_start(args, lpszFormat); nBuf = vsnprintf(acLogMsg ,4095, lpszFormat, args); va_end(args); if( nBuf 2012. 3. 22.
코드리뷰용 프로젝터 설치기 #2 (설치 ) 스크린과 영사대가 배송되어 왔습니다. 스크린은 일단 크기로 압도 해서 합격 영사대는 고급형이라고 해서 구매 하였지만.. 평탄도도 안나오고 좀 허접했습니다. 게다가 영사대 설치하고 앞으로 빔을 쏘니 회의 테이블 주변 앉아 있으면 머리 그림자가 생기고 프로젝터 쪽 빔 때문에 눈이 부셔서 사용하기가 좋지 않습니다. 프로젝터는 무조건 천정에 설치하는것이 진리인듯합니다. (2012.4.25 내용 추가 ) 천정에 설치하고서 좋아했는데.. 머리 그림자가 안생기고 깔끔한것은 정말 좋았는데.. 입사각과 반사각의 차이로 인해 화면 색감이 현저히 떨어지는 현상이 발생하여 얼마뒤 다시 천장에서 내려서 영사대에 올려두는것으로 바꿨습니다. 걸리적 거리고 깔끔하지는 않지만 선명도와 화질이 최우선이기 때문에.. 어쩔수가 없네요. 아.. 2012. 3. 22.
Launcher 만들기 음.... 프로그램을 배포할때 exe 하나의 파일로 배포하고 싶은 경우가 있다. 왜부 dll을 사용하는데 Import-Lib로 링크한 경우라면 dll 을 exe에 포함할수 없어 따로 배포해 줘야한다. 위와같은 경우 Launcher 프로그램을 만들고 Launcher의 리소스에 dll과 실제 실행할 exe등을 포함시켜서 배포하고 Launcher가 실행될때 리소스에 있는 dll 이나 exe등을 file로 만들고 실행시켜주면 된다. C++Builder2010으로 만든 샘플 프로그램.. 다음 코드는 볼포에 김태선님이 올린 소스를 참고하여서 작성했습니다. http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=1004 /* /.. 2012. 3. 22.
GetFileVersionInfo : 파일 버전 가져오기 //--------------------------------------------------------------------------- // > // {"CompanyName", "FileDescription", "FileVersion", "InternalName" // , "LegalCopyright", "LegalTradeMarks", "OriginalFileName", "ProductName", "ProductVersion", "Comments"}; //---------------------------------------------------------------------------- // ---------------------------------------------------------.. 2012. 3. 21.
TStringGrid 내용을 CSV 파일로 저장하는 함수 //--------------------------------------------------------------------------- /* @brief : StringGrid 콤포넌트의 내용을CSV 포맷으로 파일에 저장 @remarks : DB 프로그램에서 화면에 있는 콤포넌트 저장할때 공통으로 사용하기 위한 함수 @return : 저장 성공시 true, 실패시 false @date : 2012.3.20.화 @author : 이성열 @todo : */ bool XdbfSaveStrGridToCSV( TStringGrid *pGrid , String sFileName , bool bOverwrite ) { // 파일 존재 확인 if(FileExists(sFileName)==true) { if( bOv.. 2012. 3. 21.
코드리뷰용 프로젝터 설치기 #1 (주문 ) 코드리뷰를 열심히 하려고 작년에 47인치 LED TV를 구매했었습니다. (물론 일반 회의때도 사용 ) 하지만 회사의 회의테이블이 그리 크지 않음에도 불구하고 먼쪽에 앉은 사람은 소스 코드를 볼때마다 잘 안보여서 인상을 찌푸려야 했죠. 그나마 소스 코드는 폰트조절이 됐지만, Redmine 웹 화면을 띄어놓을때는 조절도 잘 안되어서 힘들었습니다. 그래서 생각한것이 모니터 분배기를 이용한 화면 공유 입니다. TV는 그대로두고 LCD 모니터 21인치 2개를 회의 테이블에 더 설치하고 모니터 분배기로 같은 화면을 공유하는 것이죠. 화면 보는것은 그럭저럭 쓸만 했습니다. 다만 . 회의실 테이블이 모니터와 모니터 케이블등으로 지저분해지고, 회의할때 모니터 때문에 서로 얼굴이 잘 안보이는 단점이 바로 나타났습니다. 그.. 2012. 3. 21.
TPanel에는 Canvas가 왜 없을까? 프로그램 하다보면 TPanel에 무엇을 그리고 싶은 경우가 있는데요 TPanel에는 Canvas가 안보입니다. 사실 없는것이 아니라 protected로 감쳐줘 있을뿐입니다. [TPanel에서 Canvas를 쓰려면 ] 다음과 같이 만들어서 쓰시면 됩니다. //--------------------------------------------------------------------------- // Protected로 감춰져 있는 Canvas를 public으로 변경 class TOpenPanel: public TPanel { public: __property Canvas; }; //-----------------------------------------------------------------------.. 2012. 3. 20.
Doxygen 기본 설정법 (v 1.7.4 기준) 이 글은 Doxygen을 처음 사용하면서 첫번째 프로젝트에 대한 결과가 제대로 나오기 까지 바꾼 설정들을 정리해 놓은 것입니다. Doxygen 사용 경험이 없기 때문에 현재 설정 값이 제대로가 아닐 가능성도 있습니다. 그래도 한글로 주석(Comment)를 추가하고 Doxygen 포맷에 맞는 설명을 추가하여 한글 문서가 제대로 생성되는것을 확인했으니까 처음 Doxygen 을 사용하는 사람은 아래 화면 캡쳐를 참고 하면 도움이 될것입니다. 설치 파일은 2개입니다. doxygen-1.7.4-setup.exe graphviz-2.26.3.msi 직원들은 회사 FTP서버에서 "ICT 프로그램 설치" 폴더에 들어있는 doxygen.zip 파일을 받아서 압축을 풀면 위 파일 2개가 나옵니다. 다른 파일도 있지만 일단.. 2012. 3. 17.
WM_SYSCOMMAND http://winapi.co.kr/reference/Message/WM_SYSCOMMAND.htm http://blog.naver.com/PostView.nhn?blogId=pavonine116&logNo=50017432318 ReleaseCapture(); this->Perform(WM_SYSCOMMAND,0xf012,0); WPARAM에 사용할 수 있는것들 #define SC_SZLEFT (0xF001) #define SC_SZRIGHT (0xF002) #define SC_SZTOP (0xF003) #define SC_SZTOPLEFT (0xF004) #define SC_SZTOPRIGHT (0xF005) #define SC_SZBOTTOM (0xF006) #define SC_SZBOTTOMLEFT.. 2012. 3. 15.
XfGetTime() double XfGetTime(void) { LARGE_INTEGER liEndCounter,liFrequency ; QueryPerformanceCounter(&liEndCounter); QueryPerformanceFrequency(&liFrequency); return (liEndCounter.QuadPart / (double)liFrequency.QuadPart) * 1000; } 2012. 3. 15.
Printf 함수 구현 void Printf( char * lpszFormat, ...) { int nBuf; char acLogMsg[5000]; va_list args; va_start(args, lpszFormat); nBuf = vsprintf(acLogMsg , lpszFormat, args); va_end(args); if (nBuf < 0) return; } 2012. 3. 15.
IO 파일에서 섹션 리스트를 가져오는 함수 m_iniFile=new TIniFile(fName); TStringList *SectionLst=new TStringList; try { m_iniFile->ReadSections(SectionLst); LoadObject(SectionLst); } __finally { } 2012. 3. 15.
클립보드 사용 방법 // IO이름을 클립보드에 복사해넣기 if( Shift.Contains(ssCtrl)) Clipboard()->AsText = "\""+m_CrntIo->Name+"\""; else Clipboard()->AsText = "IoMgr[\"" + m_CrntIo->Name+ "\"]->"; 2012. 3. 15.
실행파일 파라메터 가져오는 함수 ParamStr(0) : 실행파일 패스 ParamStr(1) : 첫번째 파라메타 2012. 3. 15.