<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title type="text">홍환민 홈페이지 * 퍼온 강좌/팁</title>
      <updated>2010-09-10T23:51:59+09:00</updated>
   <id>http://www.wearethebest.co.kr/zbxe/?mid=CodeGear_Lecture_Capture&amp;act=atom</id>
   <link rel="alternate" type="text/html" hreflang="ko" href="http://www.wearethebest.co.kr/zbxe/CodeGear_Lecture_Capture"/>
   <link rel="self" type="application/atom+xml" href="http://www.wearethebest.co.kr/zbxe/?mid=CodeGear_Lecture_Capture&amp;act=atom"/>
   <generator uri="http://www.xpressengine.com/" version="1.4.2.3">XpressEngine</generator>
   <entry>
      <title>윈도우를 맨위에 위치시키는 방법</title>
      <id>http://www.wearethebest.co.kr/zbxe/42929</id>
      <published>2010-05-04T14:24:15+09:00</published>
      <updated>2010-05-04T14:24:48+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/42929"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/42929#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;윈도우를 맨 위로 위치시키는 방법에 대한 것입니다.&lt;/div&gt;&lt;div&gt;이게 윈도우들의 z-order에 따라 되다 안되다 하는 경우가 생깁니다.&amp;nbsp;&lt;/div&gt;&lt;div&gt;다음과 같은 방법으로 가능합니다.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;출처 :&amp;nbsp;&lt;a href=&quot;http://www.tipssoft.com/bulletin/board.php?bo_table=QnA&amp;amp;wr_id=400&quot;&gt;http://www.tipssoft.com/bulletin/board.php?bo_table=QnA&amp;amp;wr_id=400&lt;/a&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, 굴림; line-height: 18px; color: rgb(34, 34, 34); &quot;&gt;&lt;pre class=&quot;brush: cpp;gutter: false;&quot;&gt;if(::GetForegroundWindow() != this-&amp;gt;m_hWnd){&amp;nbsp;
&amp;nbsp; &amp;nbsp; HWND h_active_wnd = ::GetForegroundWindow();&amp;nbsp;
&amp;nbsp; &amp;nbsp; if(h_active_wnd != NULL){&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DWORD thread_id = GetWindowThreadProcessId(h_active_wnd, NULL);&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DWORD current_thread_id = GetCurrentThreadId();&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(current_thread_id != thread_id){&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(AttachThreadInput(current_thread_id, thread_id, TRUE)){&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BringWindowToTop();&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AttachThreadInput(current_thread_id, thread_id, FALSE);&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&amp;nbsp;
&amp;nbsp; &amp;nbsp; }&amp;nbsp;
}&lt;/pre&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#222222&quot; face=&quot;Verdana, 굴림&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 18px;&quot;&gt;자세한 설명은 위의 출처 글을 참고하시기 바랍니다.&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#222222&quot; face=&quot;Verdana, 굴림&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 18px;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#222222&quot; face=&quot;Verdana, 굴림&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 18px;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>윈도우의 정렬 기준, Z Order에 대하여</title>
      <id>http://www.wearethebest.co.kr/zbxe/42927</id>
      <published>2010-05-04T12:28:01+09:00</published>
      <updated>2010-05-04T12:28:01+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/42927"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/42927#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;http://mores.tistory.com/210&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>이클립스에서 파이썬 한글 문제</title>
      <id>http://www.wearethebest.co.kr/zbxe/28480</id>
      <published>2010-03-20T02:13:33+09:00</published>
      <updated>2010-03-20T02:14:17+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/28480"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/28480#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div&gt;결론은 소스 파일 젤 위에다가 아래와 같은 내용을 추가하면 된다는 얘기.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &apos;맑은 고딕&apos;, tahoma; line-height: 23px; font-size: 13px; color: rgb(23, 127, 205); &quot;&gt;&lt;strong&gt;# -*- coding: ms949 -*-&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;a href=&quot;http://tetris.tistory.com/201&quot;&gt;http://tetris.tistory.com/201&lt;/a&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>[왕초간단팁] {$Message Warn `컴파일시 경고문 보여주기`}</title>
      <id>http://www.wearethebest.co.kr/zbxe/28283</id>
      <published>2010-02-24T23:20:26+09:00</published>
      <updated>2010-02-24T23:20:26+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/28283"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/28283#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;Todo 대용으로 사용하면 편하더군요.&lt;br&gt;&lt;br&gt;http://www.delmadang.com/community/bbs_view.asp?bbsNo=3&amp;amp;bbsCat=0&amp;amp;st=S&amp;amp;keyword=warn&amp;amp;indx=403008&amp;amp;keyword1=warn&amp;amp;keyword2=&amp;amp;page=1&lt;br&gt;&lt;br&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>비트맵 스트라이드는 4의 배수</title>
      <id>http://www.wearethebest.co.kr/zbxe/27485</id>
      <published>2009-12-08T13:28:42+09:00</published>
      <updated>2009-12-08T13:29:15+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/27485"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/27485#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;이 글의 결론을 말하자면,&lt;br&gt;비트맵이 저장될때 4의 배수 (4바이트 단위)로 저장이 된다는 얘기.&lt;br&gt;실제 비트맵의 너비가 4의 배수가 아니더라도 4의 배수로 만들어 버린다.&lt;br&gt;예를 들어 가로 길이가 3 짜리 비트맵도 가로 길이가 4인 것처럼 데이터가 입력된다.&lt;br&gt;그러므로 비트맵 로우 데이터를 직접 다룰때는 주위해야 한다.&lt;br&gt;&lt;br&gt;http://dish.upnl.org/133&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>대용량데이터를 TList에 넣을때 속도 향상 시키기</title>
      <id>http://www.wearethebest.co.kr/zbxe/27375</id>
      <published>2009-11-26T02:11:27+09:00</published>
      <updated>2009-11-26T02:11:27+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/27375"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/27375#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot; id=&quot;writeContents&quot; class=&quot;ct lh&quot;&gt;&lt;div&gt;TList는 이런저런 데이터를 저장하는 콜렉션이다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Delphi 사용자라면 매우 자주 쓸 클래스인데...&lt;/div&gt;
&lt;div&gt;이놈은 대량의 데이터가 들어가면 느려진다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;이는 내부적으로 가지고 있는 배열의 크기를 조정하면서 나타나는 문제인데..&lt;/div&gt;
&lt;div&gt;TList는 배열이 꽉 찰 때 마다, 25% 정도씩 크기를 자동으로 늘인다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;하지만 배열크기변경이 그리 쉽지 않은것이... 새로 할당 -&amp;gt; 데이터 복사 -&amp;gt; 이전에 할당한것 해제 라는 작업이 필요하다. 그래서 대량의 데이터를 넣다보면 잦은 재할당으로 속도가 느려진다&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;그럴때는 Capacity&amp;nbsp;프로퍼티를 조정&amp;nbsp;해 보자.&lt;/div&gt;
&lt;div&gt;Capacity 를 조정하여 미리 적당히 큰 크기로 배열을 생성해두면 재할당의 오버헤드를 막을 수 있다.&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Spinlock에 대하여</title>
      <id>http://www.wearethebest.co.kr/zbxe/27352</id>
      <published>2009-11-19T11:23:39+09:00</published>
      <updated>2009-11-19T11:23:39+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/27352"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/27352#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;퍼온이주: 쓰레드 동기화를 하는 방법 중에 SpinLock 이라는 방법도 있습니다. 그래서 정확히 그것이 무엇인지 궁금해서 인터넷 검색을 하던 중 다음과 같이 좋은 글을 보게 되었습니다.&lt;br&gt;&lt;br&gt;기다린다는 것은 매우 재미있는 행동이다. 누구도 두배로 빨리 기다릴 수는 없다. - 다익스트라 (1984년 2월 28일)&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;Spinlock은 이름이 뜻하는대로, 만약 다른 스레드가 lock을 소유하고 있다면 그 lock이 반환될 때까지 계속 확인하며 기다리는 것이다.&lt;br&gt;&lt;br&gt;Spinlock은 다음과 같은 특성을 갖는다.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; 1. Lock을 얻을 수 없다면, 계속해서 Lock을 확인하며 얻을 때까지 기다린다. 이른바 바쁘게 기다리는 busy wating이다.&lt;br&gt;&amp;nbsp;&amp;nbsp; 2. 바쁘게 기다린다는 것은 무한 루프를 돌면서 최대한 다른 스레드에게 CPU를 양보하지 않는 것이다.&lt;br&gt;&amp;nbsp;&amp;nbsp; 3. Lock이 곧 사용가능해질 경우 컨택스트 스위치를 줄여 CPU의 부담을 덜어준다. 하지만, 만약 어떤 스레드가 Lock을 오랫동안 유지한다면 오히려 CPU 시간을 많이 소모할 가능성이 있다.&lt;br&gt;&amp;nbsp;&amp;nbsp; 4. 하나의 CPU나 하나의 코어만 있는 경우에는 유용하지 않다. 그 이유는 만약 다른 스레드가 Lock을 가지고 있고 그 스레드가 Lock을 풀어 주려면 싱글 CPU 시스템에서는 어차피 컨택스트 스위치가 일어나야하기 때문이다.&lt;br&gt;&lt;br&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Delphi/C++Builder 로드맵</title>
      <id>http://www.wearethebest.co.kr/zbxe/27123</id>
      <published>2009-09-16T10:13:33+09:00</published>
      <updated>2009-09-16T10:13:33+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/27123"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/27123#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;바로 며칠전에 엠바카데로 DN 사이트에 &quot;RAD Studio Roadmap&quot;이 올라왔습니다. 그런데 사실 Delphi
Prism에 대한 내용이 빠져 있기 때문에 엄밀하게 말하면 Delphi와 C++Builder에 대한 로드맵이라고 할 수 있구요.
&lt;br&gt;
&lt;br&gt;&lt;a href=&quot;http://edn.embarcadero.com/article/39934&quot; target=&quot;embarcadero.com&quot;&gt;http://edn.embarcadero.com/article/39934&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;장황한 사설은 다 빼고, 핵심적인 내용만 정리하면 다음과 같습니다.
&lt;br&gt;
&lt;br&gt;&lt;b&gt;Project &quot;Commodore&quot;&lt;/b&gt;  - 64비트 네이티브 개발
&lt;br&gt;&amp;nbsp; 컴파일러, RTL, VCL에 대한 64비트 지원
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - IDE의 옵션에서 64비트 혹은 32비트 개발을 설정
&lt;br&gt;&amp;nbsp; 멀티코어/멀티쓰레드 애플리케이션 개발 지원
&lt;br&gt;&amp;nbsp; RTL의 병렬화(parallelization) 지원
&lt;br&gt;
&lt;br&gt;&lt;b&gt;Delphi &quot;X&quot;&lt;/b&gt;  - 크로스플랫폼 Windows / MacOS / Linux 개발
&lt;br&gt;&amp;nbsp; dbExpress 및 DataSnapX를 이용한 GUI 애플리케이션의 개발에 중점
&lt;br&gt;&amp;nbsp; 크로스플랫폼 컴포넌트 라이브러리 - 제한적인 하위 호환성
&lt;br&gt;&amp;nbsp; Windows / MacOS / Linux / Web에서 DataSnapX 서버 및 클라이언트 개발 
&lt;br&gt;
&lt;br&gt;&lt;b&gt;Project &quot;Chromium&quot;&lt;/b&gt;  - 품질 개선 및 생산성 프로젝트
&lt;br&gt;&amp;nbsp; 개발자 생산성에 중점
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - 사용 편의성 개선
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - 오랫동안 지연된 문제점들의 해결 : 최대한 많은 버그 수정에 중점
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - 신뢰성의 새로운 표준을 설정
&lt;br&gt;&amp;nbsp; 가벼운 O/R 매핑
&lt;br&gt;&amp;nbsp; 팀 작업 편의
&lt;br&gt;&amp;nbsp; OTA의 문서화
&lt;br&gt;&amp;nbsp; 컨트롤의 거의 모든 프로퍼티에 연결 가능한 데이터 바인딩 모델
&lt;br&gt;&amp;nbsp; 데이터베이스 툴들과의 통합 강화
&lt;br&gt;
&lt;br&gt;&lt;b&gt;이들과 동시에 추진되는 기능들&lt;/b&gt;

&lt;br&gt;&amp;nbsp; 클라우드 컴퓨팅
&lt;br&gt;&amp;nbsp; 웹 3.0++
&lt;br&gt;&amp;nbsp; RIA 이상
&lt;br&gt;&amp;nbsp; 장비
&lt;br&gt;&amp;nbsp; 소프트웨어 어플라이언스
&lt;br&gt;&amp;nbsp; 보안
&lt;br&gt;&amp;nbsp; 표준 준수
&lt;br&gt;
&lt;br&gt;&lt;b&gt;그외 현재 고려중인 기능들&lt;/b&gt;

&lt;br&gt;&amp;nbsp; Functional 프로그래밍
&lt;br&gt;&amp;nbsp; Declarative 프로그래밍
&lt;br&gt;&amp;nbsp; 내츄럴 인풋
&lt;br&gt;&amp;nbsp; 더 많은 플랫폼들
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;내용이 많고 연도별 일정이 나와 있지 않아서 좀 헷갈릴 수 있겠는데요. 사실 여기에 나와 있는 모든 프로젝트들은 연도별
구분 없이 거의 동시에 추진되는 것들입니다. 여기서 &quot;Commodore&quot;가 바로 Delphi/C++Builder의 직접적인 차기
버전이구요.
&lt;br&gt;
&lt;br&gt;현재로서는 특별한 차질이 없다는 가정 하에, Delphi &quot;X&quot;는 차기 버전인 Commodore이 실제로 출시될 때
통합되어 발표될 가능성이 높고요. &quot;Chromium&quot;은 별개의 프로젝트 팀이기는 하지만 생산성과 품질에 중점을 두는 것이므로 그
프로젝트의 결과는 향후 버전들에 쭈욱 계속 반영될 것입니다.
&lt;br&gt;
&lt;br&gt;&lt;b&gt;모바일 개발 지원&lt;/b&gt;

&lt;br&gt;여기에는 몇가지 빠진 것이 있는데... (의도적인 것은 아니고 아마도 실수인 것 같습니다) 모바일에 대한 것입니다. 일단
iPhone 개발 기능은 사실상 확정적입니다. 정확한 발표 시기는 장담하기 어렵지만, 일단 iPhone에 대한 지원은 바로 다음
버전에서 지원될 가능성이 대단히 높은 상태구요.
&lt;br&gt;
&lt;br&gt;또한 Windows Mobile에 대한 지원도 될 전망입니다. 하지만 이것은 iPhone보다는 순위가 밀려 있는
상태이며, 따라서 iPhone 지원 기능 개발에 시간이 모자라게 되면 Windows Mobile 지원은 그 다음 버전으로 밀리게
될 것입니다.
&lt;br&gt;
&lt;br&gt;&lt;b&gt;크로스플랫폼의 구현 방식&lt;/b&gt;

&lt;br&gt;Delphi/C++Builder에서의 크로스플랫폼 지원을 말하면, 예전의 리눅스 개발툴 Kylix를 떠올릴 분이 적지
않으실 겁니다. 그리고 Kylix를 기억하시는 분들 중 많은 분들은, 리눅스용 Delphi/C++Builder라는 혁신적인
개념에도 불구하고 개발된 프로그램이 QT 기반의 둔한 동작을 하던 기억에 고개를 절레절레 흔드시는 분들도 있을 겁니다. (사실
저도 그중 한 사람입니다)
&lt;br&gt;
&lt;br&gt;저번에 David I와 간담회를 가졌을 때, 이에 대한 질문을 하고, 명확한 답변을 받았습니다.
&lt;br&gt;
&lt;br&gt;&quot;당시의 QT 버전은 느리고 굼떴던 것이 사실이다. QT의 최신 버전은 성능에 있어서 혁신적으로 발전했고, 그래서 우리도
관심있게 테스트중이다. 물론 이 최신 QT도 충분히 좋지 않을 것에 대비하여, 현재 완전히 네이티브 방식의 리눅스/MacOS
개발도 QT와 함께 함께 개발 테스트 중이다. 성능을 빼고 얘기할 때에는 QT를 기반으로 하는 것이 여러 모로 유리한 점들이
있기 때문에, 성능을 비롯한 여러 스펙들에 대한 비교를 해보고 최종적으로 결정할 것이다.&quot;
&lt;br&gt;
&lt;br&gt;뭐, 이런 정도의 자세라면 안심해도 될 것 같습니다. ^^
&lt;br&gt;
&lt;br&gt;어쨌든, 지금 이 순간에도 Delphi와 C++Builder는 끊임없이 발전해나가고 있습니다. 바로 지금
Delphi/C++Builder로 개발한 애플리케이션들은, 머지 않아 MacOS와 리눅스로 포팅할 수 있게 될 것이며, 심지어는
iPhone과 Windows Mobile까지도 (아무래도 모바일로는 포팅에 약간의 제한은 있겠지만) 포팅이 가능할 것입니다.
또한 개발툴 자체의 기능들도 끊임없이 추가되고 개선될 것이구요. 멋지지 않습니까? ^^
&lt;br&gt;
&lt;br&gt;원문 : &lt;a href=&quot;http://blog.devgear.co.kr/imp/entry/DelphiCBuilder-%EB%A1%9C%EB%93%9C%EB%A7%B5&quot; target=&quot;devgear.co.kr&quot;&gt;http://blog.devgear.co.kr/imp/entry/DelphiCBuilder-로드맵&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>문자열 상수 배열 사용하기</title>
      <id>http://www.wearethebest.co.kr/zbxe/27093</id>
      <published>2009-09-09T11:02:56+09:00</published>
      <updated>2009-09-09T11:05:53+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/27093"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/27093#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;예를 들어 네개의 델관련 사이트를 나타내려 한다면&lt;br&gt;&lt;br&gt;const&lt;br&gt;Str_DelSite: array[0..3]of String = (&apos;델마당&apos;, &apos;델파이코리아&apos;, &apos;볼랜드포럼&apos;, &apos;볼랜드코리아&apos;);&lt;br&gt;&lt;br&gt;&lt;br&gt;열거형의 경우도 편리하게 쓸 수 있을 듯 해요.&lt;br&gt;&lt;br&gt;type&lt;br&gt;TMonsterType = (mtSkull, mtBurningHand, mtHeadCutter, mtMushroomBoy);&lt;br&gt;const&lt;br&gt;Str_MonsterType: array[TMonsterType] = (&apos;해골바가지&apos;, &apos;불타는손&apos;, &apos;머리싹뚝&apos;, &apos;버섯돌이&apos;);&lt;br&gt;&lt;br&gt;이런 식이죠...&lt;br&gt;&lt;br&gt;사용할 때는 아래와 같게 쓰면 되지요.&lt;br&gt;&lt;br&gt;Edit1.Text:=Str_DelSite[0];&lt;br&gt;Edit2.Text:=Str_DelSite[1];&lt;br&gt;&lt;br&gt;Label1.Caption:=Str_MonsterType[mtSkull];&lt;br&gt;Label2.Caption:=Str_MonsterType[mtBurningHand];&lt;br&gt;&lt;br&gt;문자열 상수 배열만 따로 별도의 유닛에 모아둬도 편리할 듯... &lt;br&gt;&lt;br&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>New Delphi language features since Delphi 7</title>
      <id>http://www.wearethebest.co.kr/zbxe/27024</id>
      <published>2009-08-22T04:41:01+09:00</published>
      <updated>2009-08-22T05:21:09+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/27024"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/27024#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;델파이 7 버전 이후로부터 RAD Studio 2007 버전 출시하는 동안까지&lt;br&gt;추가된 델파이 문법에 대한 자료입니다.&lt;br&gt;&lt;br&gt;엠바카데로 공식 홈페이지의 문서를 퍼왔습니다.&lt;br&gt;첨부파일을 열어서 참고하시기 바랍니다. (인터넷 익스플로러로 열면 열립니다.)&lt;br&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>포스트잇 처럼 내려가지도 않고 항상 최상단이게 만드는 방법</title>
      <id>http://www.wearethebest.co.kr/zbxe/26946</id>
      <published>2009-08-11T14:53:24+09:00</published>
      <updated>2009-08-11T14:55:10+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/26946"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/26946#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;http://eaglesoft.tistory.com/59&lt;br&gt;&lt;br&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>TMultiReadExclusiveWriteSynchronizer 를 아시나요?</title>
      <id>http://www.wearethebest.co.kr/zbxe/26750</id>
      <published>2009-08-02T20:24:04+09:00</published>
      <updated>2009-08-02T20:24:04+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/26750"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/26750#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot; id=&quot;writeContents&quot; class=&quot;ct lh&quot;&gt;한 참 자고 있는데, 갑자기 세미나 해달라는 전화 때문에 잠에서 깼습니다 ㅡ.ㅡ;;&lt;br&gt;&lt;br&gt;중단했던 코딩을 다시 하려니 손에 안잡혀서 이리 저리 노니다가,&lt;br&gt;&lt;br&gt;예전에 쓰레드에 대한 강의했을 때 설명했던 클래스 TMultiReadExclusiveWriteSynchronizer 가 생각나서요.&lt;br&gt;&lt;br&gt;제가 써본 기본 클래스로는 제일 긴 이름을 가지고 있는 이넘은 모르는 분들도 좀 있는 거 같아서요.&lt;br&gt;&lt;br&gt;쓰레드의 동기화에서는 TCriticalSection 을 자주 쓸텐데요.&lt;br&gt;&lt;br&gt;TCriticalSection 대신 사용할 수 있는 것이, TMultiReadExclusiveWriteSynchronizer 입니다.&lt;br&gt;&lt;br&gt;일단 다른 점은,&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; procedure BeginRead;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; procedure EndRead;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function BeginWrite: Boolean;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; procedure EndWrite;&lt;br&gt;&lt;br&gt;와 같이 읽기용 Lock과 쓰기용 Lock이 따로 존재한다는 점입니다.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; procedure BeginRead;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; procedure EndRead;&lt;br&gt;
&lt;br&gt;처럼 읽기용 Lock은 잠겨져있는 경우에도, 다른 쓰레드에서 BeginRead로 잠금을 하면,&lt;br&gt;&lt;br&gt;블로킹 되지 않고 바로 코드가 실행된다는 점입니다.&lt;br&gt;&lt;br&gt;특정한 자원을 공유할 때, 읽기는 여러 쓰레드에서 동시에 진행해도 상관없기 때문에 허용하는 것입니다.&lt;br&gt;&lt;br&gt;따라서, TCriticalSection 보다는 다소 효율적인 관리가 가능할 수 있습니다.&lt;br&gt;&lt;br&gt;그냥 자다 일어나서 별 쓸모 없는 팁이었습니다 ^^;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>ReadProcessMemory를 이용하여 프로그램 간 메모리를 공유하자</title>
      <id>http://www.wearethebest.co.kr/zbxe/26711</id>
      <published>2009-08-02T03:40:56+09:00</published>
      <updated>2009-08-02T03:40:56+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/26711"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/26711#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;div style=&quot;width: 680px; overflow-x: auto; overflow-y: hidden; line-height: 150%;&quot;&gt;

		  &lt;p&gt;데브피아 갔다가 좋은 팁이 있길래 소개 합니다.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
보통 프로세스간 메모리를 공유는 memory mapped file을 사용하기 위해 CreateFileMapping 같은 걸 사용하는데&lt;/p&gt;
&lt;p&gt;ReadProcessMemory 를 이용해서 공유하는 방법을 간단하게 소개 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
memory mapped file 에 비해 장점이라면&lt;/p&gt;
&lt;p&gt;주소만으로 큰 데이터 공유가 가능하다? 정도 겠네요&lt;/p&gt;
&lt;p&gt;속도는 잘 모르겠어요&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
먼저 공유할 메모리를 정의하고, 여기서는 구조체를 사용하도록 해보죠&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
편의상 데이터를 할당하는 쪽을 서버&lt;/p&gt;
&lt;p&gt;데이터를 사용하는 쪽을 클라이언트라고 하면&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
서버쪽 준비사항은&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;type&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; TMyRecord = &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;record&amp;nbsp;&lt;/span&gt; &lt;span style=&quot;color: rgb(153, 204, 0);&quot;&gt;// 공유할 구조체&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data : array [0..8] of char;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; i : integer;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; d : array[0..16] of char;&lt;br&gt;
&amp;nbsp; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;end&lt;/span&gt;;&lt;br&gt;
&amp;nbsp; PMyRecord = ^TMyRecord;&lt;br&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;var&lt;br&gt;
&lt;/span&gt;&amp;nbsp; myRecord : PMyRecord;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;procedure&lt;/span&gt; TForm1.Button1Click(Sender: TObject);&lt;br&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;var&lt;/span&gt;&lt;br&gt;
&amp;nbsp; dwProcessId : cardinal;&lt;br&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;begin&lt;/span&gt;&lt;br&gt;
&amp;nbsp; New(myRecord); &lt;span style=&quot;color: rgb(153, 204, 0);&quot;&gt;//구조체 메모리를 할당해주고&lt;/span&gt;&lt;br&gt;
&amp;nbsp; myRecord^.data := &apos;aaaa&apos;;&lt;br&gt;
&amp;nbsp; myRecord^.i := 3434;&lt;br&gt;
&amp;nbsp; myRecord^.d := &apos;cccc&apos;;&lt;br&gt;
&lt;span style=&quot;color: rgb(153, 204, 0);&quot;&gt;//&amp;nbsp; ReadProcessMemory 를 이용하기 위해서는 프로세스 아이디하고, 사용할 메모리 주소를 알아야 합니다.&lt;br&gt;
// 간단하게 테스트 하기 위해 Edit 에 넣고 클라이언트에서 그냥 붙혀넣기로 했습니다. 쿨럭 ;;;;&lt;br&gt;
&lt;/span&gt;&amp;nbsp; GetWindowThreadProcessId(Handle, dwProcessId );&lt;br&gt;
&amp;nbsp; Edit1.Text := inttostr(dwProcessId);&amp;nbsp;&lt;span style=&quot;color: rgb(153, 204, 0);&quot;&gt; // 서버쪽 프로세스 ID&lt;/span&gt;&lt;br&gt;
&amp;nbsp; Edit2.Text := inttohex(integer(myRecord),8); &lt;span style=&quot;color: rgb(153, 204, 0);&quot;&gt;// 공유할 데이터 Address&lt;br&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;end&lt;/span&gt;;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;procedure &lt;/span&gt;TForm1.Button2Click(Sender: TObject);&lt;br&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;begin&lt;/span&gt;&lt;br&gt;
&lt;span style=&quot;color: rgb(153, 204, 0);&quot;&gt;// 정말 메모리가 공유 되는지 확인해 보아요&lt;/span&gt;&lt;br&gt;
&amp;nbsp; myRecord^.i := myRecord^.i + 1;&lt;br&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;end&lt;/span&gt;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 클라이언트는 서버의 데이터를 쓰기위해 서버로부터 메모리 주소를 받기만 하면 되겠군요&lt;br&gt;
메모리 주소는 레지스트리나 ini 에 써두면 되겠군요&lt;/p&gt;
&lt;p&gt;클라이언트는 이렇게&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;type&lt;/span&gt;&lt;br&gt;
&amp;nbsp; TMyRecord = &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;record&lt;br&gt;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data : array [0..8] of char;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; i : integer;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; d : array[0..16] of char;&lt;br&gt;
&amp;nbsp; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;end&lt;/span&gt;;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;procedure &lt;/span&gt;TForm2.GetMemClick(Sender: TObject);&lt;br&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;var&lt;/span&gt;&lt;br&gt;
&amp;nbsp; m_hProcess : THandle;&lt;br&gt;
&amp;nbsp; myRecord : TMyRecord;&lt;br&gt;
&amp;nbsp; ReadBytes : cardinal;&lt;br&gt;
&amp;nbsp; pid : integer;&lt;br&gt;
&amp;nbsp; ShareMemaddr : pointer;&lt;br&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;begin&lt;br&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 204, 0);&quot;&gt;// 귀찮아서 이리 했으니 양해를 ;;;;&lt;/span&gt;&lt;br&gt;
&amp;nbsp; pid := 7608;&amp;nbsp; &lt;span style=&quot;color: rgb(153, 204, 0);&quot;&gt;// 서버측의 Edit1.text 값이 되겠군요&lt;br&gt;
&lt;/span&gt;&amp;nbsp; ShareMemaddr := pointer($011A1C70); &lt;span style=&quot;color: rgb(153, 204, 0);&quot;&gt;// 서버측의 Edit2.text 값이 되겠네요 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; m_hProcess := OpenProcess(PROCESS_VM_READ, FALSE, pid);&lt;br&gt;
&amp;nbsp; if ReadProcessMemory(m_hProcess, ShareMemaddr , @myRecord, sizeof(TMyRecord), ReadBytes) then&lt;br&gt;
&amp;nbsp; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;begin&lt;/span&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; button1.Caption := inttostr(ReadBytes);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Caption := myRecord.data + &apos;&amp;nbsp; &apos; + inttostr(myrecord.i) + &apos; &apos; + myrecord.d;&lt;br&gt;
&amp;nbsp; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;end&lt;/span&gt;&lt;br&gt;
&amp;nbsp; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;else&lt;/span&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ShowMessage(&apos;server down&apos;);&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;end&lt;/span&gt;;&lt;br&gt;&lt;br&gt;&lt;/p&gt;
		  &lt;/div&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>DFM을 사용하지 않고 폼(TForm의 상속) 사용하기</title>
      <id>http://www.wearethebest.co.kr/zbxe/26438</id>
      <published>2009-07-05T11:37:58+09:00</published>
      <updated>2009-07-05T11:37:58+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/26438"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/26438#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&amp;lt;양병규&amp;gt;&lt;br&gt;아래 게시물의 예제를 만들던중 사용된건데 별도로 따로 설명합니다.&lt;br&gt;&lt;br&gt;폼은 보통 TForm을 상속하게 됩니다.&lt;br&gt;&lt;br&gt;보통은 폼디자이너를 이용해서 만들게되는데....&lt;br&gt;&lt;br&gt;그렇지 않고 콤포넌트 만들듯이 그냥 새 유닛에서 TForm을 상속해서 새로운 폼 클래스를 작성하면...&lt;br&gt;&lt;br&gt;컴파일은 잘되나 실행해보면 dfm 리소스가 없다고 에러가 납니다.&lt;br&gt;&lt;br&gt;폼디자이너를 사용하지 않고 TForm을 상속해서 코딩으로만 폼을 만들고자 할때는 다음과 같이 하면됩니다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;생성자를 override해서 다음과 같이 작성합니다.&lt;br&gt;&lt;br&gt;&lt;br&gt;type &lt;br&gt;&amp;nbsp; TForm1 = class(TForm)&lt;br&gt;&amp;nbsp; private &lt;br&gt;&amp;nbsp; publiuc &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; constructor Create(AOwner: TComponent); override;&lt;br&gt;&amp;nbsp; end;&lt;br&gt;&lt;br&gt;constructor TForm1.Create(AOwner: TComponent);&lt;br&gt;begin &lt;br&gt;&amp;nbsp; CreateNew( AOwner );&lt;br&gt;end;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;중요한건 생성자에서 inherited를 하지 않고 CreateNew를 호출한다는겁니다. 물론 생성자에서 CreateNew 다음 라인부터는 원하는 일을하면 됩니다.&lt;br&gt;&lt;br&gt;이렇게 하면 실행시에 dfm 리소스를 로딩하지 않습니다.&lt;br&gt;&lt;br&gt;그러므로 dfm 없이 그냥 코딩으로만 폼을 디자인할 수 있습니다. 폼에 얹을 모든 콤포넌트의 생성, 소멸, 프로퍼티 세팅, 이벤트 세팅을 모두 일일이 코딩해야합니다.&lt;br&gt;&lt;br&gt;물론 나머지는 모두 동일합니다.&lt;br&gt;&lt;br&gt;이걸 꼭 사용해야만 하는 경우는 별로 없습니다. 간단한 폼인데 exe에 dfm리소스가 포함되는게 아깝다고 생각되는 경우에는 쓸수 있을겁니다.&lt;br&gt;&lt;br&gt;^^&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;lt;장성호&amp;gt;&lt;br&gt;해결했습니다. 간단하네요...
&lt;br&gt;
&lt;br&gt;생성자에서 
&lt;br&gt;TForm(Owner)로 상위 클래스생성자를 호출하는 부분에서
&lt;br&gt;인자를 바꿔 다른 생성자를 불러주면 되네요
&lt;br&gt;Delphi에서는 CreateNew로 표현되던데 ....
&lt;br&gt;
&lt;br&gt;---------샘플-----------------------
&lt;br&gt;class TForm3 : public TForm
&lt;br&gt;{
&lt;br&gt;public:
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __fastcall TForm3(TComponent* Owner);
&lt;br&gt;};
&lt;br&gt;//------------------------------------------
&lt;br&gt;__fastcall TForm3::TForm3(TComponent* Owner)
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; : TForm(Owner,1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //===&amp;gt; 이부분이 핵심 
&lt;br&gt;{
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this-&amp;gt;Caption=&quot;Form3&quot;;
&lt;br&gt;}
&lt;br&gt;//====================================
&lt;br&gt;
&lt;br&gt;void __fastcall TForm1::Button2Click(TObject *Sender)
&lt;br&gt;{
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TForm3 *frm3=new TForm3(this);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //실제사용하는 부분
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; frm3-&amp;gt;ShowModal();
&lt;br&gt;}
&lt;br&gt;//---------------------------------------------------------------------------
&lt;br&gt;
&lt;br&gt;TForm(Owner)&amp;nbsp; ==&amp;gt; TForm(Owner,1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 이렇게 호출하면 됩니다.&amp;nbsp; 쩝쩝
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;그럼 즐플...
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;장성호 님이 쓰신 글 :
&lt;br&gt;: 델파이로는 간단히 생성자 오버로딩으로 되던데.. (델마당에 팁이 있음)
&lt;br&gt;: 
&lt;br&gt;: 똑같은 방법으로 잘 안되네요
&lt;br&gt;: 
&lt;br&gt;: 어떻게 해야할지....&lt;br&gt;&lt;br&gt;&lt;/div&gt;</content>
                  
   </entry>
   <entry>
      <title>Msg &apos;Canvas does not allow drawing</title>
      <id>http://www.wearethebest.co.kr/zbxe/26434</id>
      <published>2009-07-05T10:23:42+09:00</published>
      <updated>2009-08-04T00:12:27+09:00</updated>
      <link rel="alternate" type="text/html" href="http://www.wearethebest.co.kr/zbxe/26434"/>
      <link rel="replies" type="text/html" href="http://www.wearethebest.co.kr/zbxe/26434#comment"/>
      <author>
         <name>홍환민</name>
                  <uri>http://www.wearethebest.co.kr/</uri>
               </author>
            <content type="html">&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;b&gt;Question:&lt;/b&gt;&lt;br&gt;&lt;br&gt;What does the &lt;a class=&quot;con_link&quot; oncontextmenu&amp;#61;=&quot;&quot; return=&quot;&quot; false;=&quot;&quot; id=&quot;KonaLink0&quot; onmouseover&amp;#61;adlinkmouseover(event,this,0);=&quot;&quot; style=&quot;position: static; text-decoration: underline ! important;&quot; onclick&amp;#61;adlinkmouseclick(event,this,0);=&quot;&quot; onmouseout&amp;#61;adlinkmouseout(event,this,0);=&quot;&quot; href=&quot;http://www.delphifaq.com/faq/delphi/vcl/f267.shtml#&quot; target=&quot;_blank&quot;&gt;&lt;font style=&quot;font-weight: 500; font-size: 12px; color: blue ! important; font-family: verdana,arial,helvetica; position: static;&quot; color=&quot;blue&quot;&gt;&lt;span class=&quot;kLink&quot; style=&quot;border-bottom: 3px solid; font-weight: 500; font-size: 12px; color: blue ! important; font-family: verdana,arial,helvetica; position: relative;&quot;&gt;error &lt;/span&gt;&lt;span class=&quot;kLink&quot; style=&quot;border-bottom: 3px solid; font-weight: 500; font-size: 12px; color: blue ! important; font-family: verdana,arial,helvetica; position: relative;&quot;&gt;message&lt;/span&gt;&lt;/font&gt;&lt;/a&gt; &lt;span class=&quot;CODE&quot;&gt;&apos;Canvas does not allow drawing&apos;&lt;/span&gt; mean? &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Answer:&lt;/b&gt; 
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;you may have run out of resources, which means a new DC cannot be
allocated. Usually this is a result of not freeing unused DCs or other
objects. &lt;/li&gt;&lt;li&gt;you are attempting to draw to an device context that is not yet valid. Such as in the create constructor of a component. 
&lt;/li&gt;&lt;li&gt;you are trying to draw on a canvas while your last draw-operation has not finished yet. In this case you can use &lt;span class=&quot;CODE&quot;&gt;Canvas.Lock()&lt;/span&gt; or &lt;span class=&quot;CODE&quot;&gt;Canvas.TryLock()&lt;/span&gt; to fix it. &lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;</content>
                  
   </entry>
</feed> 
