<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>appleii</title>
    <link>https://appleii.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 30 May 2026 14:34:39 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>appleii</managingEditor>
    <item>
      <title>라자루스 첫 설치 후 에디터 세팅하기</title>
      <link>https://appleii.tistory.com/182</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;라자루스를&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;&lt;br /&gt;메인메뉴에서&amp;nbsp;Tools-&amp;gt;Options&amp;nbsp;를&amp;nbsp;선택한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lazarusset1.png&quot; data-origin-width=&quot;361&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSVdrQ/btrqTZ8UwSC/dOLyOV0ugC1ymrKvFZWDS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSVdrQ/btrqTZ8UwSC/dOLyOV0ugC1ymrKvFZWDS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSVdrQ/btrqTZ8UwSC/dOLyOV0ugC1ymrKvFZWDS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSVdrQ%2FbtrqTZ8UwSC%2FdOLyOV0ugC1ymrKvFZWDS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;361&quot; height=&quot;401&quot; data-filename=&quot;lazarusset1.png&quot; data-origin-width=&quot;361&quot; data-origin-height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.5em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 탭 8칸 -&amp;gt; 2칸, 4칸 변경&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lazarusset2.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/smgzC/btrqVwL9Vdq/oyFJFH3QkmEcphej0bCKP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/smgzC/btrqVwL9Vdq/oyFJFH3QkmEcphej0bCKP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/smgzC/btrqVwL9Vdq/oyFJFH3QkmEcphej0bCKP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsmgzC%2FbtrqVwL9Vdq%2FoyFJFH3QkmEcphej0bCKP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1002&quot; height=&quot;664&quot; data-filename=&quot;lazarusset2.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Editor&amp;nbsp;-&amp;gt;&amp;nbsp;General&amp;nbsp;-&amp;gt;&amp;nbsp;Tab&amp;nbsp;and&amp;nbsp;Indent&amp;nbsp;를&amp;nbsp;선택하여&amp;nbsp;제일&amp;nbsp;위에&amp;nbsp;있는&amp;nbsp;Smart&amp;nbsp;Tabs&amp;nbsp;를&amp;nbsp;체크해제한다.&amp;nbsp;오른쪽의&amp;nbsp;Tab&amp;nbsp;widths&amp;nbsp;를&amp;nbsp;자신의&amp;nbsp;취향에&amp;nbsp;맞게&amp;nbsp;설정한다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.5em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Completion and hints 반응속도 0 으로 변경&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Editor&amp;nbsp;-&amp;gt;&amp;nbsp;Competion&amp;nbsp;and&amp;nbsp;Hints&amp;nbsp;를&amp;nbsp;선택한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lazarusset3.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dY7xZg/btrqRTgOnKV/pRzqWY88Z2FmVvlGUWfSkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dY7xZg/btrqRTgOnKV/pRzqWY88Z2FmVvlGUWfSkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dY7xZg/btrqRTgOnKV/pRzqWY88Z2FmVvlGUWfSkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdY7xZg%2FbtrqRTgOnKV%2FpRzqWY88Z2FmVvlGUWfSkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1002&quot; height=&quot;664&quot; data-filename=&quot;lazarusset3.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;오른쪽의&amp;nbsp;슬라이드&amp;nbsp;바가&amp;nbsp;3개&amp;nbsp;있다.&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;Delay&amp;nbsp;for&amp;nbsp;completion&amp;nbsp;box&lt;br /&gt;&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;Button1&amp;nbsp;의&amp;nbsp;Caption&amp;nbsp;을&amp;nbsp;변경시키고&amp;nbsp;싶다면&amp;nbsp;Button1&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;&lt;br /&gt;-&amp;nbsp;Delay&amp;nbsp;for&amp;nbsp;hints&amp;nbsp;&lt;br /&gt;&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;&lt;br /&gt;-&amp;nbsp;Delay&amp;nbsp;for&amp;nbsp;long&amp;nbsp;line&amp;nbsp;hints&amp;nbsp;in&amp;nbsp;completion&amp;nbsp;box&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Completion&amp;nbsp;Box&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;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.5em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. := 조정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본&amp;nbsp;세팅에서는&amp;nbsp;':='&amp;nbsp;&amp;nbsp;앞뒤에&amp;nbsp;스페이스가&amp;nbsp;자동완성되지&amp;nbsp;않는다.&amp;nbsp;&lt;br /&gt;Codetools&amp;nbsp;-&amp;gt;&amp;nbsp;Space&amp;nbsp;를&amp;nbsp;선택한다.&amp;nbsp;오른쪽의&amp;nbsp;Insert&amp;nbsp;space&amp;nbsp;in&amp;nbsp;front&amp;nbsp;of&amp;nbsp;에서&amp;nbsp;Symbol&amp;nbsp;을&amp;nbsp;체크한다.&amp;nbsp;Insert&amp;nbsp;space&amp;nbsp;after&amp;nbsp;에도&amp;nbsp;Symbol&amp;nbsp;을&amp;nbsp;체크한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lazarusset4.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nK9W4/btrqNMiq2Hp/O0oepuKbgLQck2ldIgunY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nK9W4/btrqNMiq2Hp/O0oepuKbgLQck2ldIgunY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nK9W4/btrqNMiq2Hp/O0oepuKbgLQck2ldIgunY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnK9W4%2FbtrqNMiq2Hp%2FO0oepuKbgLQck2ldIgunY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1002&quot; height=&quot;664&quot; data-filename=&quot;lazarusset4.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;화면에서 보이는 것처럼 ' := ' 와 같이 앞뒤로 스페이스가 적용된다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. Outline 그리기&lt;br /&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 블럭을 표시하는 Outline을 그려준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lazarusset5.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIXdcW/btsHb6EEfy2/ENVQskwF6U8UHIO895UmKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIXdcW/btsHb6EEfy2/ENVQskwF6U8UHIO895UmKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIXdcW/btsHb6EEfy2/ENVQskwF6U8UHIO895UmKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIXdcW%2FbtsHb6EEfy2%2FENVQskwF6U8UHIO895UmKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1002&quot; height=&quot;664&quot; data-filename=&quot;lazarusset5.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lazarusset6.png&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;317&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mgMUA/btsHa15txa5/NNHyNTLVn8LaRJjopoaQ20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mgMUA/btsHa15txa5/NNHyNTLVn8LaRJjopoaQ20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mgMUA/btsHa15txa5/NNHyNTLVn8LaRJjopoaQ20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmgMUA%2FbtsHa15txa5%2FNNHyNTLVn8LaRJjopoaQ20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;713&quot; height=&quot;317&quot; data-filename=&quot;lazarusset6.png&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;317&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. Visual Studio Code Dark Color Theme 적용하기&lt;br /&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에디터에 비주얼 스튜디오 코드 다크 테마를 적용할 수 있다.&lt;br /&gt;컬러테마를 다운로드 한 뒤에&amp;nbsp; C:\Users\사용자이름\AppData\Local\lazarus\userschemes&amp;nbsp; 위치에 복사한다. 사용자이름에는 현재 사용하는 윈도우 사용자 이름으로 바꾸면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lazarusset7.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VmFZg/btsHeZqQotS/CYrzLuF0GWFT4VTvzgeyY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VmFZg/btsHeZqQotS/CYrzLuF0GWFT4VTvzgeyY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VmFZg/btsHeZqQotS/CYrzLuF0GWFT4VTvzgeyY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVmFZg%2FbtsHeZqQotS%2FCYrzLuF0GWFT4VTvzgeyY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1002&quot; height=&quot;664&quot; data-filename=&quot;lazarusset7.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/P0qv8/btsHa33iDok/okwZf96y7iryuTwFcY21t0/vsclaz_theme.xml?attach=1&amp;amp;knm=tfile.xml&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;vsclaz_theme.xml&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.05MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/assisdantas/vsclaz_theme&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/assisdantas/vsclaz_theme&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>기술탐구</category>
      <category>lazarus</category>
      <category>라자루스</category>
      <author>appleii</author>
      <guid isPermaLink="true">https://appleii.tistory.com/182</guid>
      <comments>https://appleii.tistory.com/182#entry182comment</comments>
      <pubDate>Sun, 16 Jan 2022 21:31:40 +0900</pubDate>
    </item>
    <item>
      <title>라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (5) 엑셀파일 출력 II</title>
      <link>https://appleii.tistory.com/180</link>
      <description>&lt;div style=&quot;background-color: #faedd4; border: #000000 1px solid; padding: 10px;&quot;&gt;&lt;a href=&quot;https://appleii.tistory.com/174&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (1) 폼 디자인&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/175&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (2)&amp;nbsp;데이터베이스&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/176&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3)&amp;nbsp;기타기능&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/177 &quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (4) 엑셀파일 출력 I&lt;/a&gt;&lt;br /&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (5) 엑셀파일 출력 II&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스를 엑셀 파일로 출력하는 것에 성공했지만, 마음에 들지 않는 점이 있다. 실행화면에 표시되는 DBGrid 의 데이터와 일치하지 않는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;997&quot; data-origin-height=&quot;155&quot; data-filename=&quot;whatwas16.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WklhX/btrcONhqP99/BypINpTKP97DPWaZsR2M1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WklhX/btrcONhqP99/BypINpTKP97DPWaZsR2M1k/img.png&quot; data-alt=&quot;[ DBGrid 에서의 필드이름 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WklhX/btrcONhqP99/BypINpTKP97DPWaZsR2M1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWklhX%2FbtrcONhqP99%2FBypINpTKP97DPWaZsR2M1k%2Fimg.png&quot; data-origin-width=&quot;997&quot; data-origin-height=&quot;155&quot; data-filename=&quot;whatwas16.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ DBGrid 에서의 필드이름 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;176&quot; data-filename=&quot;whatwas17.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cliktB/btrcON2NyVh/44W3ZedozA9RxtQGg122Gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cliktB/btrcON2NyVh/44W3ZedozA9RxtQGg122Gk/img.png&quot; data-alt=&quot;[ 엑셀파일에서의 필드이름 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cliktB/btrcON2NyVh/44W3ZedozA9RxtQGg122Gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcliktB%2FbtrcON2NyVh%2F44W3ZedozA9RxtQGg122Gk%2Fimg.png&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;176&quot; data-filename=&quot;whatwas17.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 엑셀파일에서의 필드이름 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;데이터베이스와 DBGrid 에 표시되는 데이터에는 차이가 있다. 데이터베이스에는 PK 필드가 있지만 DBGrid 에는 표시되지 않는다. 그리고 데이터베이스의 필드이름은 영어로 표시되어 있지만 , DBGrid 의 필드에는 별도의 캡션이 표시된다. FPSExport 에서 제공하는 내보내기(Export) 프로시져들은 기본적으로 데이터베이스 내용 그대로 내보내는 것을 전제로 하고 있다.&amp;nbsp; &amp;nbsp;DBGrid 에 표시되는 모습 그대로 엑셀 파일로 출력하려면 어떻게 해야 할까.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;엑셀 문서는 한개의 페이지가 WorkSheet , WorkSheet 가 여러개 모여서 WorkBook 으로 구성된다. WorkSheet 내의 한개의 칸은 Cell 이라고 부른다. WorkBook 을 Create 하고 WorkSheet 를 Add 하면 한개의 엑셀 문서가 완성된다. uses 에 fpspreadsheet 와 fpstypes 를 추가시키고 다음 문장을 입력하면 문서가 만들어진다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Book&amp;nbsp;:=&amp;nbsp;TsWorkBook.Create; &lt;br /&gt;&amp;nbsp;&amp;nbsp;Sheet&amp;nbsp;:=&amp;nbsp;Book.AddWorksheet('비밀번호&amp;nbsp;관리');&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;엑셀 문서를 만들고 그 내부에 구현해야 하는 기능은 다음과 같다.&lt;br /&gt;&lt;br /&gt;- DBGrid 컬럼의 [Visible] Property 가 True 일 때만 엑셀파일로 출력&lt;br /&gt;- DBGrid 컬럼의 캡션을 엑셀파일의 첫행에 출력&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;384&quot; data-filename=&quot;whatwas18.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mYe6q/btrcNncHnjc/nOeubQoohloesgbhYBFPx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mYe6q/btrcNncHnjc/nOeubQoohloesgbhYBFPx1/img.png&quot; data-alt=&quot;[ DBGrid Column 이 Visible = False ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mYe6q/btrcNncHnjc/nOeubQoohloesgbhYBFPx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmYe6q%2FbtrcNncHnjc%2FnOeubQoohloesgbhYBFPx1%2Fimg.png&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;384&quot; data-filename=&quot;whatwas18.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ DBGrid Column 이 Visible = False ]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;DBGrid 의 Column 이 Visible 일 때만 엑셀문서에 쓰기한다. 첫행은 DBGrid 의 Caption 을 WriteText 한다. DBGrid 의 Column 이 Visible 일 때만 VisCol 을 1 증가시켜서 엑셀문서의 Column 을 증가시키는 원리를 주목해보자.&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;
&lt;pre class=&quot;pascal delphi&quot;&gt;&lt;code&gt; 
for Col := 0 to ADataSet.Fields.Count - 1 do
begin
  if AGrid.Columns[Col].Visible then ////DBGrid 의 컬럼이 Visible 일 때만 진행한다.
  begin
    Cell := Sheet.WriteText(Row, VisCol, AGrid.Columns[Col].Title.Caption);
    Sheet.WriteBackgroundColor(cell, clMoneyGreen); //첫 행의 배경색
    VisCol := VisCol + 1;
  end;
end;                          
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체코드는 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;
&lt;pre class=&quot;pascal delphi&quot;&gt;&lt;code&gt; 
procedure TMainForm.ExportDBGridToExcel(AGrid: TDBGrid; AFileName: String);
var
  Book: TsWorkBook;
  Sheet: TsWorkSheet;
  Row, Col, VisCol: Integer;
  Cell: PCell;
  ADataSet: TDataSet;
  Field: TField;
begin
  ADataSet := AGrid.DataSource.DataSet;
  Book := TsWorkBook.Create;
  Sheet := Book.AddWorksheet('비밀번호 관리');
  Row := 0; Col := 0; VisCol := 0;

  try
      //DBGrid 의 캡션을 워크시트의 첫행에 출력한다.
    for Col := 0 to ADataSet.Fields.Count - 1 do
    begin
      if AGrid.Columns[Col].Visible then //DBGrid 의 컬럼이 Visible 일 때만 진행한다.
      begin
        Cell := Sheet.WriteText(Row, VisCol, AGrid.Columns[Col].Title.Caption);
        Sheet.WriteBackgroundColor(cell, clMoneyGreen); //첫 행의 배경색  
        VisCol := VisCol + 1;
      end;
    end;

    Inc(Row); //워크시트를 두번재 행으로 이동
    ADataSet.First; //데이터세트의 첫행으로 이동

    while not ADataSet.EOF do  //마지막 레코드까지 계속 진행한다.
    begin
      VisCol := 0;
      for Col := 0 to AGrid.Columns.Count - 1 do
      begin
        if AGrid.Columns[Col].Visible then //DBGrid 의 컬럼이 visible 일때만 진행한다.
        begin
          Field := AGrid.Columns[Col].Field; //DBGrid 의field 를 넣고 type 을 결정한다.

          if Field.DataType in [ftInteger, ftWord, ftSmallint, ftAutoinc, ftLargeInt] then
            Sheet.WriteNumber(Row, VisCol, ADataSet.Fields[Col].AsInteger)
          else if Field.DataType in [ftBCD, ftFloat, ftFMTBcd] then
            Sheet.WriteNumber(Row, VisCol, ADataSet.Fields[Col].AsFloat)
          else if Field.DataType in [ftCurrency] then
            Sheet.WriteCurrency(Row, VisCol, ADataSet.Fields[Col].AsFloat)
          else if Field.DataType in [ftString, ftFixedChar] then
            Sheet.WriteText(Row, VisCol, ADataSet.Fields[Col].AsString)
          else if Field.DataType in [ftWideMemo, ftWideString, ftFixedWideChar] then
            Sheet.WriteText(Row, VisCol, UTF8Encode(ADataSet.Fields[Col].AsWideString))
          else if Field.DataType in [ftMemo, ftFmtMemo, ftWideMemo] then
            Sheet.WriteText(Row, VisCol, ADataSet.Fields[Col].AsString)
          else if Field.DataType = ftBoolean then
            Sheet.WriteBoolValue(Row, VisCol, ADataSet.Fields[Col].AsBoolean)
          else
            Sheet.WriteText(Row, VisCol, ADataSet.Fields[Col].AsString);
          VisCol := VisCol + 1; //DBGrid 의 컬럼이 visible 일때만 워크시트의 오른쪽으로 증가시킨다.
        end;
      end;

      Inc(Row);
      ADataSet.Next;
    end;

    Book.WriteToFile(AFileName, sfOOXML, True);
    QuestionDlg('엑셀 내보내기', '엑셀파일 ' + AFileName +
        ' 가 만들어졌습니다.', mtCustom, [mrYes, '확인'], '');

  finally
    Book.Free;
  end;
end;                               
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 결과물은 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;157&quot; data-filename=&quot;whatwas19.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cW7khn/btrcSsYkVs3/QBNpfDRyT88W7bn15507ZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cW7khn/btrcSsYkVs3/QBNpfDRyT88W7bn15507ZK/img.png&quot; data-alt=&quot;[ 엑셀 문서로 출력한 결과 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cW7khn/btrcSsYkVs3/QBNpfDRyT88W7bn15507ZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcW7khn%2FbtrcSsYkVs3%2FQBNpfDRyT88W7bn15507ZK%2Fimg.png&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;157&quot; data-filename=&quot;whatwas19.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 엑셀 문서로 출력한 결과 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cCsu9R/btrcSsrsDzN/LRjnUE5s1rbxiYGnbobHUK/whatwas.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;whatwas.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;2.64MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/8JsSn/btrc1TaepPd/HxB3yicZqQKyBLqjZcmVLk/whatwas_source.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;whatwas_source.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.87MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #faedd4; border: #000000 1px solid; padding: 10px;&quot;&gt;&lt;a href=&quot;https://appleii.tistory.com/174&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (1) 폼 디자인&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/175&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (2)&amp;nbsp;데이터베이스&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/176&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3)&amp;nbsp;기타기능&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/177 &quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (4) 엑셀파일 출력 I&lt;/a&gt;&lt;br /&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (5) 엑셀파일 출력 II&lt;/div&gt;</description>
      <category>기술탐구</category>
      <category>lazarus</category>
      <category>라자루스</category>
      <author>appleii</author>
      <guid isPermaLink="true">https://appleii.tistory.com/180</guid>
      <comments>https://appleii.tistory.com/180#entry180comment</comments>
      <pubDate>Mon, 23 Aug 2021 16:48:45 +0900</pubDate>
    </item>
    <item>
      <title>라자루스(Lazarus) 프로젝트 Hi-DPI  설정하기</title>
      <link>https://appleii.tistory.com/179</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;라자루스는 Hi-DPI (High DPI) 를 지원한다. 그 이야기는 화면을 확대해도 글자가 흐릿하지 않는다는 뜻이다. 하지만 라자루스에서&amp;nbsp; Hi-DPI 를 지원하기 이전에 작성된 프로젝트의 경우는 HiDPI 설정이 되어 있지 않은 경우가 많다. 이경우 수동으로 설정하여 다시 저장해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;366&quot; data-origin-height=&quot;441&quot; data-filename=&quot;lazarus_hidpi1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZlCkj/btrb7zcYqor/bKK3Lh86TJvvJK46k3DTXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZlCkj/btrb7zcYqor/bKK3Lh86TJvvJK46k3DTXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZlCkj/btrb7zcYqor/bKK3Lh86TJvvJK46k3DTXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZlCkj%2Fbtrb7zcYqor%2FbKK3Lh86TJvvJK46k3DTXk%2Fimg.png&quot; data-origin-width=&quot;366&quot; data-origin-height=&quot;441&quot; data-filename=&quot;lazarus_hidpi1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;664&quot; data-filename=&quot;lazarus_hidpi2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Co1Wd/btrci8TbVth/GJXiSAOx6HEuJmxbXUVL5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Co1Wd/btrci8TbVth/GJXiSAOx6HEuJmxbXUVL5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Co1Wd/btrci8TbVth/GJXiSAOx6HEuJmxbXUVL5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCo1Wd%2Fbtrci8TbVth%2FGJXiSAOx6HEuJmxbXUVL5k%2Fimg.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;664&quot; data-filename=&quot;lazarus_hidpi2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Use LCL scaling (Hi-DPI) 를 체크&lt;br /&gt;- Use manifest resource 를 체크 한 후에 DPI awareness 를 on (True) 로 선택한다.&lt;br /&gt;&lt;br /&gt;2개를 체크한 후에 메인메뉴에서 Project -&amp;gt; Close Project 하여 프로젝트를 닫아주고 다시 Open Project 로 다시 열어준다. F9를 눌러서 다시 실행한다. 안된다면 메인메뉴에서 Run -&amp;gt; Clean up and Build 하여 다시 빌드한 후에 실행한다.&amp;nbsp;&lt;/p&gt;</description>
      <category>기술탐구</category>
      <category>lazarus</category>
      <category>라자루스</category>
      <author>appleii</author>
      <guid isPermaLink="true">https://appleii.tistory.com/179</guid>
      <comments>https://appleii.tistory.com/179#entry179comment</comments>
      <pubDate>Mon, 16 Aug 2021 17:51:22 +0900</pubDate>
    </item>
    <item>
      <title>잉크스케이프(Inkscape) Theme 폰트 키우기</title>
      <link>https://appleii.tistory.com/178</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;벡터 드로잉 툴인 잉크스케이프가 1.1 로 버전업 되면서 안정성이 대단히 좋아졌다. 하지만 여전히 불만이 있는데, 테마의 폰트 크기가 너무 작다는 것이다. 테마를 수정하여 폰트 크기를 키우는 법을 알아보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1030&quot; data-filename=&quot;inkscape1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IOiDe/btrb6sFgQnO/GxBQIv4dweO3tfcQUaEECK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IOiDe/btrb6sFgQnO/GxBQIv4dweO3tfcQUaEECK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IOiDe/btrb6sFgQnO/GxBQIv4dweO3tfcQUaEECK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIOiDe%2Fbtrb6sFgQnO%2FGxBQIv4dweO3tfcQUaEECK%2Fimg.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1030&quot; data-filename=&quot;inkscape1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;64비트로 설치를 했다면 경로는&lt;br /&gt;C:\Program Files\Inkscape\share\inkscape\ui\style.css&amp;nbsp;&lt;br /&gt;&lt;br /&gt;이 된다. style.css 를 수정해야 한다. 아래와 같이 수정한다. font-size 를 20px 또는 적당한 값으로 수정한다. 폰트 종류를 바꾸고 싶다면 font-family 에서 적당한 것으로 수정한다.&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;*{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-feature-settings:&amp;nbsp;&quot;tnum=1&quot;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size:&amp;nbsp;20px; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-family:&amp;nbsp;sans-serif; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#start-screen-window&amp;nbsp;notebook&amp;nbsp;&amp;gt;&amp;nbsp;*:nth-child(2)&amp;nbsp;label{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size:22px; &lt;br /&gt;}&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*{ } 사이에 있는 font-size 는 메인 프로그램의 폰트 크기에 영향을 준다. #start-screen-window 의 font-size 는 시작할 때 나오는 창의 폰트 크기에 영향을 준다. 레이아웃이 약간 안 맞지만 큰 문제는 안된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;821&quot; data-filename=&quot;inkscape2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BOcWC/btrb8hiMDaw/Nm6cC3W9fy6HQM5ocSCCV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BOcWC/btrb8hiMDaw/Nm6cC3W9fy6HQM5ocSCCV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BOcWC/btrb8hiMDaw/Nm6cC3W9fy6HQM5ocSCCV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBOcWC%2Fbtrb8hiMDaw%2FNm6cC3W9fy6HQM5ocSCCV0%2Fimg.png&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;821&quot; data-filename=&quot;inkscape2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;툴팁의 배경이 반투명이어서 마음에 들지 않는다면 아예 검은색으로 바꾸는 방법도 있다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;tooltip{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background-color:&amp;nbsp;black; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border-color:&amp;nbsp;coral; &lt;br /&gt;}&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;251&quot; data-origin-height=&quot;301&quot; data-filename=&quot;inkscape3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1mqVS/btrb82locYE/oybmEWO49noxQdlfysgkok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1mqVS/btrb82locYE/oybmEWO49noxQdlfysgkok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1mqVS/btrb82locYE/oybmEWO49noxQdlfysgkok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1mqVS%2Fbtrb82locYE%2FoybmEWO49noxQdlfysgkok%2Fimg.png&quot; data-origin-width=&quot;251&quot; data-origin-height=&quot;301&quot; data-filename=&quot;inkscape3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>재미탐구</category>
      <category>Inkscape</category>
      <category>잉크스케이프</category>
      <author>appleii</author>
      <guid isPermaLink="true">https://appleii.tistory.com/178</guid>
      <comments>https://appleii.tistory.com/178#entry178comment</comments>
      <pubDate>Sat, 14 Aug 2021 10:02:37 +0900</pubDate>
    </item>
    <item>
      <title>라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (4) 엑셀파일 출력 I</title>
      <link>https://appleii.tistory.com/177</link>
      <description>&lt;div style=&quot;background-color: #faedd4; border: #000000 1px solid; padding: 10px;&quot;&gt;&lt;a href=&quot;https://appleii.tistory.com/174&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (1) 폼 디자인&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/175&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (2)&amp;nbsp;데이터베이스&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/176&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3)&amp;nbsp;기타기능&lt;/a&gt;&lt;br /&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (4) 엑셀파일 출력 I&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/180&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (5) 엑셀파일 출력 II&lt;/a&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQLite 로 관리한 데이터를 애플리케이션에서 가공하여 엑셀로 출력하고 싶다. 라자루스에서는 엑셀과 비슷한 애플리케이션을 만들 수 있는 컴포넌트가 있다. 이것을 이용하여 데이터를 엑셀로 출력해 본다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.5em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;8.&amp;nbsp;컴포넌트&amp;nbsp;설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엑셀 파일 관리를 위해서 새로운 컴포넌트를 설치해야 한다. 설치할 컴포넌트는 FPSpreadSheet 컴포넌트이다. 컴포넌트 설치 방법은 온라인으로 하는 것이 제일 편하다. 메인메뉴에서 Package -&amp;gt; Online Package Manager 를 선택한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;383&quot; data-origin-height=&quot;311&quot; data-filename=&quot;whatwas9.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bORVfF/btrbOJNsq4j/im9CxXASTw4xwignBWKdT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bORVfF/btrbOJNsq4j/im9CxXASTw4xwignBWKdT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bORVfF/btrbOJNsq4j/im9CxXASTw4xwignBWKdT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbORVfF%2FbtrbOJNsq4j%2Fim9CxXASTw4xwignBWKdT0%2Fimg.png&quot; data-origin-width=&quot;383&quot; data-origin-height=&quot;311&quot; data-filename=&quot;whatwas9.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색창에 fpspreadsheet 를 치고 체크박스에 체크를 한 뒤 Install 을 클릭한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;539&quot; data-filename=&quot;whatwas10.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsCbSt/btrbIdhZKul/S4yDJOKrqUPzHg2kH7Y2H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsCbSt/btrbIdhZKul/S4yDJOKrqUPzHg2kH7Y2H0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsCbSt/btrbIdhZKul/S4yDJOKrqUPzHg2kH7Y2H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsCbSt%2FbtrbIdhZKul%2FS4yDJOKrqUPzHg2kH7Y2H0%2Fimg.png&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;539&quot; data-filename=&quot;whatwas10.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치뒤에는 라자루스를 리빌드하게 된다. 리빌드가 끝나면 라자루스가 재실행된다. 컴포넌트 팔렛트에 FPSpreadsheet 탭이 생긴것을 알 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.5em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;9.&amp;nbsp;엑셀&amp;nbsp;파일로&amp;nbsp;출력&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uses 에 FPSexport 를 추가해준다. 이 상태에서 F9키를 눌러서 실행하려 하면 에러가 발생한다. 필요한 패키지를 프로젝트에 포함시키지 않았기 때문이다. Project Inspector 에서 Required Packages 에 커서를 위치시키고 우클릭을 하면 Add 가 팝업된다. Add 를 하면 다음과 같은 창이 뜬다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;489&quot; data-filename=&quot;whatwas11.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XUGC5/btrbIocfXYI/j5Nc1edZspD255oIHHhwj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XUGC5/btrbIocfXYI/j5Nc1edZspD255oIHHhwj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XUGC5/btrbIocfXYI/j5Nc1edZspD255oIHHhwj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXUGC5%2FbtrbIocfXYI%2Fj5Nc1edZspD255oIHHhwj0%2Fimg.png&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;489&quot; data-filename=&quot;whatwas11.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색창에 fps 를 입력하면 관련 패키지 목록이 나타난다. 필요한 패키지는 laz_fpspreadsheetexport_visual 이다. 선택한다. Project Inspector 에 Required Packages 를 보면 laz_fpspreadsheetexport_visual 이 추가된 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;280&quot; data-origin-height=&quot;308&quot; data-filename=&quot;whatwas12.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SNbpV/btrbLfTEfbN/21GUVPlhmuEUSCiL59bO7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SNbpV/btrbLfTEfbN/21GUVPlhmuEUSCiL59bO7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SNbpV/btrbLfTEfbN/21GUVPlhmuEUSCiL59bO7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSNbpV%2FbtrbLfTEfbN%2F21GUVPlhmuEUSCiL59bO7k%2Fimg.png&quot; data-origin-width=&quot;280&quot; data-origin-height=&quot;308&quot; data-filename=&quot;whatwas12.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;F12 키를 눌러서 폼 디자인 화면으로 넘어간다. 버튼을 폼 위에 올리고 Object Inspector 에서 Name Property 를 'btnXLExport' 라고 수정한다. Caption 은 '엑셀 내보내기' 로 수정한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;771&quot; data-filename=&quot;whatwas13.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgR2Yr/btrbGBcksmn/pKEl2bR3AQYvCOGER62Fnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgR2Yr/btrbGBcksmn/pKEl2bR3AQYvCOGER62Fnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgR2Yr/btrbGBcksmn/pKEl2bR3AQYvCOGER62Fnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgR2Yr%2FbtrbGBcksmn%2FpKEl2bR3AQYvCOGER62Fnk%2Fimg.png&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;771&quot; data-filename=&quot;whatwas13.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버튼을 더블 클릭하여 이벤트 핸들러 작성 화면으로 넘어간다.&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;
&lt;pre class=&quot;oxygene&quot;&gt;&lt;code&gt;procedure&amp;nbsp;TMainForm.btnXLExportClick(Sender:&amp;nbsp;TObject); 
var 
&amp;nbsp;&amp;nbsp;Exp:&amp;nbsp;TFPSExport; 
&amp;nbsp;&amp;nbsp;ExpSettings:&amp;nbsp;TFPSExportFormatSettings; 
begin 
&amp;nbsp;&amp;nbsp;DataSource1.DataSet.First; 
&amp;nbsp;&amp;nbsp;Exp&amp;nbsp;:=&amp;nbsp;TFPSExport.Create(nil); 
&amp;nbsp;&amp;nbsp;ExpSettings&amp;nbsp;:=&amp;nbsp;TFPSExportFormatSettings.Create(true); 
&amp;nbsp;&amp;nbsp;try 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExpSettings.ExportFormat&amp;nbsp;:=&amp;nbsp;efXLSX;&amp;nbsp;//&amp;nbsp;엑셀&amp;nbsp;2007&amp;nbsp;이상에서&amp;nbsp;사용하는&amp;nbsp;포맷 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExpSettings.HeaderRow&amp;nbsp;:=&amp;nbsp;true;&amp;nbsp;//&amp;nbsp;필드&amp;nbsp;이름&amp;nbsp;포함 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exp.FormatSettings&amp;nbsp;:=&amp;nbsp;ExpSettings; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exp.Dataset&amp;nbsp;:=&amp;nbsp;DataSource1.DataSet;&amp;nbsp;//데이터세트를&amp;nbsp;DataSource1&amp;nbsp;의&amp;nbsp;DataSet&amp;nbsp;으로&amp;nbsp;지정 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exp.FileName&amp;nbsp;:=&amp;nbsp;'pass_export.xlsx'; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exp.Execute; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QuestionDlg('엑셀&amp;nbsp;내보내기',&amp;nbsp;'엑셀파일&amp;nbsp;'&amp;nbsp;+&amp;nbsp;Exp.FileName&amp;nbsp;&amp;nbsp;+&amp;nbsp;'&amp;nbsp;가&amp;nbsp;만들어졌습니다.',&amp;nbsp;mtCustom,&amp;nbsp;[mrYes,&amp;nbsp;'확인'],&amp;nbsp;'')&amp;nbsp;; 
&amp;nbsp;&amp;nbsp;finally 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exp.Free; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExpSettings.Free; 
&amp;nbsp;&amp;nbsp;end; 
end;&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;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;F9 키를 눌러서 실행시키고 '엑셀 내보내기' 버튼을 클릭하면 'pass_export.xlsx 가 만들어졌습니다.' 다이얼로그 박스가 뜬다. pass_export.xlsx 를 엑셀에서 열면 다음과 같이 출력된다. ExpSettings.HeaderRow := true; 로 설정되어 있어서 제일 위에 필드 이름이 포함되어 출력되었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;176&quot; data-filename=&quot;whatwas14.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dACnPZ/btrbKFR7a3d/NyCrJuqmbtMrSWwENl1kGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dACnPZ/btrbKFR7a3d/NyCrJuqmbtMrSWwENl1kGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dACnPZ/btrbKFR7a3d/NyCrJuqmbtMrSWwENl1kGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdACnPZ%2FbtrbKFR7a3d%2FNyCrJuqmbtMrSWwENl1kGk%2Fimg.png&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;176&quot; data-filename=&quot;whatwas14.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이제 SQLite 를 통해서 데이터베이스로 비밀번호를 관리하고 엑셀로 출력할 수 있는 비밀번호 관리 애플리케이션이 완성되었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cvJPwZ/btrbEf71wSF/fwNNIPz03GpQv0kh2zRe00/whatwas.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;whatwas.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;2.64MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cHnINX/btrbPKSHfed/7kxMNbjX48vtd2WIOBRwiK/whatwas_source.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;whatwas_source.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.87MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div style=&quot;background-color: #faedd4; border: #000000 1px solid; padding: 10px;&quot;&gt;&lt;a href=&quot;https://appleii.tistory.com/174&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (1) 폼 디자인&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/175&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (2)&amp;nbsp;데이터베이스&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/176&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3)&amp;nbsp;기타기능&lt;/a&gt;&lt;br /&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (4) 엑셀파일 출력 I&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/180&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (5) 엑셀파일 출력 II&lt;/a&gt;&lt;/div&gt;</description>
      <category>기술탐구</category>
      <category>lazarus</category>
      <category>라자루스</category>
      <category>파스칼</category>
      <author>appleii</author>
      <guid isPermaLink="true">https://appleii.tistory.com/177</guid>
      <comments>https://appleii.tistory.com/177#entry177comment</comments>
      <pubDate>Wed, 11 Aug 2021 11:00:31 +0900</pubDate>
    </item>
    <item>
      <title>라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3) 기타기능</title>
      <link>https://appleii.tistory.com/176</link>
      <description>&lt;div style=&quot;background-color: #faedd4; border: #000000 1px solid; padding: 10px;&quot;&gt;&lt;a href=&quot;https://appleii.tistory.com/174&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (1) 폼 디자인&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/175&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (2) 데이터베이스&lt;/a&gt;&lt;br /&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3) 기타기능&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/177&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (4) 엑셀파일 출력 I&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/180&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (5) 엑셀파일 출력 II&lt;/a&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.5em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 5. 한글, 영문 입력 모드 바꾸기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹사이트 이름을 한글로 입력하게 되어 있는 Edit 컨트롤이면 별도의 한/영 키 전환 없이 자동으로 한글입력모드가 되면 편하다. 영문 입력만 해야 한다면 자동으로 영문 입력모드로 전환되면 된다.&lt;br /&gt;&lt;br /&gt;하지만 라자루스는 델파이와 다르게 입력기를 제어하기가 어렵다. 입력기가 운영체제와 밀접하게 연관되어 있어서 , 크로스 플랫폼을 지향하는 라자루스와는 방향이 맞지 않기 때문이다. &lt;br /&gt;&lt;br /&gt;그래서&amp;nbsp;입력&amp;nbsp;컨트롤의&amp;nbsp;입력기&amp;nbsp;모드를&amp;nbsp;제어하는&amp;nbsp;ImeMode&amp;nbsp;Property&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;imm.pas&amp;nbsp;에&amp;nbsp;인터페이스가&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;기능을&amp;nbsp;사용하고&amp;nbsp;싶으면&amp;nbsp;uses&amp;nbsp;에&amp;nbsp;imm&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;&lt;br /&gt;​Edit1&amp;nbsp;컨트롤은&amp;nbsp;한글을&amp;nbsp;우선&amp;nbsp;입력받는&amp;nbsp;컨트롤이고&amp;nbsp;Edit2&amp;nbsp;는&amp;nbsp;영문을&amp;nbsp;우선&amp;nbsp;입력받는&amp;nbsp;컨트롤이라고&amp;nbsp;가정한다.&amp;nbsp;Edit1&amp;nbsp;이&amp;nbsp;포커스를&amp;nbsp;받으면&amp;nbsp;OnEnter&amp;nbsp;이벤트&amp;nbsp;핸들러가&amp;nbsp;동작한다.&amp;nbsp;이때&amp;nbsp;입력기를&amp;nbsp;한글&amp;nbsp;입력모드로&amp;nbsp;바꾸고&amp;nbsp;,&amp;nbsp;포커스를&amp;nbsp;잃어버리는&amp;nbsp;OnExit&amp;nbsp;에서&amp;nbsp;원래의&amp;nbsp;입력모드로&amp;nbsp;전환하면&amp;nbsp;된다.&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;
&lt;pre class=&quot;cal&quot;&gt;&lt;code&gt;procedure&amp;nbsp;TForm1.Edit1Enter(Sender:&amp;nbsp;TObject); 
begin 
&amp;nbsp;&amp;nbsp;ImmSetConversionStatus(ImmGetContext(Edit1.Handle),&amp;nbsp;IME_CMODE_HANGEUL,&amp;nbsp;IME_SMODE_NONE); 
end; 

procedure&amp;nbsp;TForm1.Edit1Exit(Sender:&amp;nbsp;TObject); 
begin 
&amp;nbsp;&amp;nbsp;ImmSetConversionStatus(ImmGetContext(Edit1.Handle),&amp;nbsp;IME_CMODE_ALPHANUMERIC,&amp;nbsp;IME_SMODE_NONE); 
end;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.5em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 클립보드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;uses 에 Clipbrd 를 추가한다. Clipboard.AsText 로 클립보드에 복사한다. [복사] 버튼을 누르면 클립보드에 복사하게 되므로 아이디 나 비밀번호 입력시에 Ctrl+V 로 붙여넣기 하면 된다.&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;procedure&amp;nbsp;TMainForm.btnCopyPWClick(Sender:&amp;nbsp;TObject); &lt;br /&gt;begin &lt;br /&gt;&amp;nbsp;&amp;nbsp;Clipboard.AsText&amp;nbsp;:=&amp;nbsp;EditPW.Text; &lt;br /&gt;end; &lt;br /&gt;&lt;br /&gt;procedure&amp;nbsp;TMainForm.btnCopyIDClick(Sender:&amp;nbsp;TObject); &lt;br /&gt;begin &lt;br /&gt;&amp;nbsp;&amp;nbsp;Clipboard.AsText&amp;nbsp;:=&amp;nbsp;EditID.Text; &lt;br /&gt;end;&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;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.5em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7. 인터넷 주소 연결&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenURL 을 사용한다. uses 에 LCLIntf 를 추가한다. 웹사이트 입력란에 아무것도 없으면 한글 이름으로 구글 검색을 하도록 만든다. 웹사이트 주소를 제대로 입력했다면 OpenURL 에서 True 반환하여 Exit 한다. 아니라면 다음 문장을 실행하는데 'http://' 를 이름 앞에 붙이는 것이다. 실행해 본 결과 https 가 가능하도록 처리한 웹사이트들은 http 로 연결을 시도하면 대부분 자동으로 https 로 연결한다.&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;procedure&amp;nbsp;TMainForm.btnOpenURLClick(Sender:&amp;nbsp;TObject); &lt;br /&gt;begin &lt;br /&gt;&amp;nbsp;&amp;nbsp;if&amp;nbsp;EditWebSite.Text&amp;nbsp;=&amp;nbsp;''&amp;nbsp;then &lt;br /&gt;&amp;nbsp;&amp;nbsp;begin &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OpenURL('www.google.com/search?q='&amp;nbsp;+&amp;nbsp;EditNameKorean.Text); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exit; &lt;br /&gt;&amp;nbsp;&amp;nbsp;end; &lt;br /&gt;&amp;nbsp;&amp;nbsp;if&amp;nbsp;OpenURL(EditWebSite.Text)&amp;nbsp;then&amp;nbsp;Exit; &lt;br /&gt;&amp;nbsp;&amp;nbsp;if&amp;nbsp;OpenURL('http://'&amp;nbsp;+&amp;nbsp;EditWebSite.Text)&amp;nbsp;then&amp;nbsp;Exit; &lt;br /&gt;end;&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;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4편에서는 엑셀파일로 출력하는 것을 구현해 본다.&lt;br /&gt;&lt;br /&gt;4편에서 계속&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/177&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://appleii.tistory.com/177&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #faedd4; border: #000000 1px solid; padding: 10px;&quot;&gt;&lt;a href=&quot;https://appleii.tistory.com/174&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (1) 폼 디자인&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/175&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (2) 데이터베이스&lt;/a&gt;&lt;br /&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3) 기타기능&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/177&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (4) 엑셀파일 출력 I&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/180&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (5) 엑셀파일 출력 II&lt;/a&gt;&lt;/div&gt;</description>
      <category>기술탐구</category>
      <category>lazarus</category>
      <category>pascal</category>
      <category>라자루스</category>
      <category>파스칼</category>
      <author>appleii</author>
      <guid isPermaLink="true">https://appleii.tistory.com/176</guid>
      <comments>https://appleii.tistory.com/176#entry176comment</comments>
      <pubDate>Wed, 11 Aug 2021 11:00:23 +0900</pubDate>
    </item>
    <item>
      <title>라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (2) 데이터베이스</title>
      <link>https://appleii.tistory.com/175</link>
      <description>&lt;div style=&quot;background-color: #faedd4; border: #000000 1px solid; padding: 10px;&quot;&gt;&lt;a href=&quot;https://appleii.tistory.com/174&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (1) 폼 디자인&lt;/a&gt;&lt;br /&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (2) 데이터베이스&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/176&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3)&amp;nbsp;기타기능&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/177&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (4) 엑셀파일 출력 I&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/180&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (5) 엑셀파일 출력 II&lt;/a&gt;&lt;/div&gt;
&lt;p style=&quot;font-size: 1.5em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. SQLite&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스는 SQLite 를 사용한다. 한개의 dll 파일만 있으면 되고 별도의 설치 과정이 필요 없으므로 간단한 응용 프로그램을 만들기에 적합하다. SQLite 는 다음 사이트에서 다운로드 받는다.&lt;br /&gt;&lt;a href=&quot;https://www.sqlite.org/download.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.sqlite.org/download.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Precompiled Binaries for Windows&amp;nbsp;&lt;/b&gt;중에서 32비트 또는 64비트 환경에 맞는 것으로 다운로드 받는다. 예를 들어 자신이 64비트 윈도우를 사용하고 있다면 &lt;a id=&quot;a9&quot; href=&quot;https://www.sqlite.org/2021/sqlite-dll-win64-x64-3360000.zip&quot;&gt;sqlite-dll-win64-x64-3360000.zip&lt;/a&gt; 을 다운로드 받는다. 압축을 풀면 sqlite3.dll 이 나온다. 이 라이브러리 파일 한개로 데이터베이스 관리를 할 수 있는 것이다. 별도의 경로를 지정하지 않았다면 sqlite3.dll 이 실행파일과 같은 폴더 내에 있어야 한다.&lt;br /&gt;&lt;br /&gt;라자루스에서는 SQLite 를 사용하기 위한 컴포넌트를 제공하고 있다. 컴포넌트 팔렛트에서 SQLdb 탭을 선택한 후 TSQLite3Connection 컴포넌트를 폼 위에 올려 놓는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;95&quot; data-filename=&quot;whatwas6.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ryZ8W/btrbN4QSIRw/y1XK2pktoFsDT3lVOaLguK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ryZ8W/btrbN4QSIRw/y1XK2pktoFsDT3lVOaLguK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ryZ8W/btrbN4QSIRw/y1XK2pktoFsDT3lVOaLguK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FryZ8W%2FbtrbN4QSIRw%2Fy1XK2pktoFsDT3lVOaLguK%2Fimg.png&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;95&quot; data-filename=&quot;whatwas6.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그리고 데이터베이스 관리를 위해서 TSQLQuery, TSQLTransation, Data Access 탭에서 TDataSource 를 선택하여 폼에 올려 놓는다. TSQLite3Connection 을 이용하여 SQLite 와 연결된다. 이 데이터를 가져와서 DBGrid 에서 가공하기 편하도록 변환시켜야 한다. DataSource 에서 이 역할을 한다. 데이터베이스에 SQL 명령문을 전달하기 위해서 SQLQuery 를 이용한다. 기본적인 원리는 SQLConnection 을 이용하여 SQLite 에 접근 -&amp;gt; 데이터베이스 생성 -&amp;gt; 자료입력 -&amp;gt; DataSource 로 데이터베이스 검색 결과 출력 -&amp;gt; DBGrid 화면으로 출력 &lt;br /&gt;&lt;br /&gt;각&amp;nbsp;컴포넌트의&amp;nbsp;Property&amp;nbsp;는&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;지정한다.&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;(1)&amp;nbsp;DataSource1&amp;nbsp;의&amp;nbsp;&amp;nbsp;(Property)&amp;nbsp;&amp;nbsp;Database&amp;nbsp;:&amp;nbsp;SQLite3Connection1 &lt;br /&gt;(2)&amp;nbsp;SQLQuery1&amp;nbsp;의&amp;nbsp;(Property)&amp;nbsp;Database&amp;nbsp;&amp;nbsp;:&amp;nbsp;&amp;nbsp;SQLite3Connection1&amp;nbsp;&amp;nbsp;,&amp;nbsp;&lt;br /&gt;Transation&amp;nbsp;:&amp;nbsp;SQLTransaction1 &lt;br /&gt;(3)&amp;nbsp;SQLTransaction1&amp;nbsp;의&amp;nbsp;(Property)&amp;nbsp;Database&amp;nbsp;&amp;nbsp;:&amp;nbsp;SQLite3Connection1 &lt;br /&gt;(4)&amp;nbsp;SQLite3Connection1&amp;nbsp;의&amp;nbsp;(Property)&amp;nbsp;Transaction&amp;nbsp;:&amp;nbsp;SQLTransaction1&amp;nbsp;&lt;br /&gt;(5) DBGrid1 의 (Property) DataSource : DataSource1&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FormShow 또는 FormCreate 이벤트 핸들러에 다음 문장을 삽입한다. SQLite 라이브러리 이름을 지정한다.&lt;br /&gt;&lt;br /&gt;SQLiteLibraryName := 'sqlite3.dll';&amp;nbsp; &lt;br /&gt;SQLite3Connection1.DatabaseName&amp;nbsp;:=&amp;nbsp;'pass.db';&amp;nbsp;//이름을&amp;nbsp;정해주면&amp;nbsp;create&amp;nbsp;에서&amp;nbsp;자동&amp;nbsp;생성&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.5em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 데이터베이스(생성, 추가, 삭제, 수정, 검색, 백업)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호 관리를 위해서는 테이블이 필요하다. 테이블 내에는 항목을 나타내는 컬럼이 있다. 비밀번호는 웹사이트에 로그인하기 위해서 사용하는 것이 대부분이므로 웹사이트 주소를 나타내는 컬럼이 필요하다. 그외에 필요한 컬럼은&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;[0]&amp;nbsp;Primary&amp;nbsp;Key&amp;nbsp;-&amp;nbsp;PK&amp;nbsp;:&amp;nbsp;각각의&amp;nbsp;레코드를&amp;nbsp;구별하는&amp;nbsp;유일한&amp;nbsp;키값 &lt;br /&gt;[1]&amp;nbsp;이름&amp;nbsp;(한글)&amp;nbsp;-&amp;nbsp;NameKorean&amp;nbsp;:&amp;nbsp;필요한&amp;nbsp;웹사이트의&amp;nbsp;이름&amp;nbsp;한글로&amp;nbsp;표시 &lt;br /&gt;[2]&amp;nbsp;이름&amp;nbsp;(영문)&amp;nbsp;-&amp;nbsp;NameEnglish&amp;nbsp;:&amp;nbsp;한글이름을&amp;nbsp;잘못&amp;nbsp;알고&amp;nbsp;있거나&amp;nbsp;영문으로만&amp;nbsp;알고&amp;nbsp;있을&amp;nbsp;때&amp;nbsp;사용 &lt;br /&gt;[3]&amp;nbsp;웹사이트&amp;nbsp;-&amp;nbsp;WebSite&amp;nbsp;:&amp;nbsp;웹사이트&amp;nbsp;주소를&amp;nbsp;표시&amp;nbsp; &lt;br /&gt;[4]&amp;nbsp;아이디&amp;nbsp;-&amp;nbsp;ID&amp;nbsp;:&amp;nbsp;웹사이트&amp;nbsp;또는&amp;nbsp;다른&amp;nbsp;프로그램의&amp;nbsp;로그인&amp;nbsp;아이디 &lt;br /&gt;[5]&amp;nbsp;비밀번호&amp;nbsp;-&amp;nbsp;PW&amp;nbsp;:&amp;nbsp;로그인&amp;nbsp;비밀번호 &lt;br /&gt;[6]&amp;nbsp;기타메모&amp;nbsp;-&amp;nbsp;Memo&amp;nbsp;:&amp;nbsp;로그인&amp;nbsp;실패시에&amp;nbsp;웹사이트에서&amp;nbsp;확인하는&amp;nbsp;질문에&amp;nbsp;대한&amp;nbsp;대답&amp;nbsp;또는&amp;nbsp;주의사항&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DBGrid 를 더블클릭하여 에디터를 실행시키고 Add 버튼을 눌러서 컬럼을 추가해 나간다.&amp;nbsp;&amp;nbsp;&amp;nbsp;DBGrid 와 데이터베이스의 컬럼명은 정확히 같아야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;308&quot; data-filename=&quot;whatwas7.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sAcY8/btrbLeUcS5A/k4XCxQLTTkvhfZ1L4xej3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sAcY8/btrbLeUcS5A/k4XCxQLTTkvhfZ1L4xej3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sAcY8/btrbLeUcS5A/k4XCxQLTTkvhfZ1L4xej3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsAcY8%2FbtrbLeUcS5A%2Fk4XCxQLTTkvhfZ1L4xej3k%2Fimg.png&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;308&quot; data-filename=&quot;whatwas7.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면에 표시되는 DBGrid1 의 컬럼 이름을 바꾸고 싶다면 Object Inspector 에서 각각의 컬럼을 선택하여 Title 의 Caption Property 를 바꾸면 된다. Title 왼쪽의 [&amp;gt;] 를 누르면 Title 에 부속된 Property 가 확장된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;499&quot; data-filename=&quot;whatwas8.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0EQDO/btrbPb3uSax/TIisAPzAJFq7YFzAiKDMT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0EQDO/btrbPb3uSax/TIisAPzAJFq7YFzAiKDMT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0EQDO/btrbPb3uSax/TIisAPzAJFq7YFzAiKDMT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0EQDO%2FbtrbPb3uSax%2FTIisAPzAJFq7YFzAiKDMT0%2Fimg.png&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;499&quot; data-filename=&quot;whatwas8.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;(1)&amp;nbsp;생성&amp;nbsp;(CREATE) &lt;br /&gt;CREATE TABLE 을 사용한다. 같은 폴더내에 SQLite3 가 없으면 에러가 발생한다. pass.db 가 없으면 새로 만들어서 테이블을 생성한다. SQL 문장을 입력시에 SQLQuery1.SQL.Add 로 추가하고 SQLQuery1.ExecSQL; 로 실행한다. 트랜잭션은 SQLTransaction1.Commit; 으로 마무리하는 것을 잊지 말아야 한다.&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;procedure&amp;nbsp;TMainForm.CreateDB(); 
var 
&amp;nbsp;&amp;nbsp;NewFile:&amp;nbsp;boolean; 
begin 
&amp;nbsp;&amp;nbsp;SQLite3Connection1.Close();&amp;nbsp;//항상&amp;nbsp;닫았는지&amp;nbsp;확인 
&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Clear; 

&amp;nbsp;&amp;nbsp;try 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NewFile&amp;nbsp;:=&amp;nbsp;not&amp;nbsp;FileExists(SQLite3Connection1.DatabaseName); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//이미&amp;nbsp;데이터베이스&amp;nbsp;있는가&amp;nbsp;확인 

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;NewFile&amp;nbsp;then 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;begin 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLite3Connection1.Open; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLTransaction1.Active&amp;nbsp;:=&amp;nbsp;True; 

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('CREATE&amp;nbsp;TABLE&amp;nbsp;&quot;DATA&quot;('); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('&amp;nbsp;&quot;PK&quot;&amp;nbsp;INTEGER&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;PRIMARY&amp;nbsp;KEY&amp;nbsp;AUTOINCREMENT,'); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('&amp;nbsp;&quot;NameKorean&quot;&amp;nbsp;VARCHAR(20)&amp;nbsp;NOT&amp;nbsp;NULL,'); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('&amp;nbsp;&quot;NameEnglish&quot;&amp;nbsp;VARCHAR(20)&amp;nbsp;,'); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('&amp;nbsp;&quot;WebSite&quot;&amp;nbsp;VARCHAR(30)&amp;nbsp;,'); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('&amp;nbsp;&quot;ID&quot;&amp;nbsp;VARCHAR(20)&amp;nbsp;NOT&amp;nbsp;NULL,'); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('&amp;nbsp;&quot;PW&quot;&amp;nbsp;VARCHAR(20)&amp;nbsp;NOT&amp;nbsp;NULL,'); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('&amp;nbsp;&quot;Memo&quot;&amp;nbsp;VARCHAR(300)&amp;nbsp;);'); 

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('CREATE&amp;nbsp;UNIQUE&amp;nbsp;INDEX&amp;nbsp;&quot;Data_id_idx&quot;&amp;nbsp;ON&amp;nbsp;&quot;DATA&quot;(&amp;nbsp;&quot;PK&quot;&amp;nbsp;);'); 

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.ExecSQL; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLTransaction1.Commit;&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;QuestionDlg('DB&amp;nbsp;생성',&amp;nbsp;'데이터베이스&amp;nbsp;'&amp;nbsp;+&amp;nbsp;SQLite3Connection1.DatabaseName&amp;nbsp;+&amp;nbsp;'&amp;nbsp;가&amp;nbsp;만들어졌습니다.',&amp;nbsp;mtCustom,&amp;nbsp;[mrYes,&amp;nbsp;'확인'],&amp;nbsp;'')&amp;nbsp;; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;btnClearClick(nil); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ShowMessage('데이터베이스를&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;없습니다.'); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end; 
&amp;nbsp;&amp;nbsp;except 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ShowMessage('파일이&amp;nbsp;존재하지&amp;nbsp;않습니다.'); 
&amp;nbsp;&amp;nbsp;end; 
end;&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;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;(2) 추가 (INSERT) &lt;br /&gt;아무것도 입력되어 있지 않으면 경고창을 보여주고 재입력을 요구한다. SQLQuery1 을 이용하여 SQL 문장을 전달한다. ':' 로 파라메터를 대신 전달할 수 있다.&amp;nbsp; ':NameKorean' 으로 SQL 문장에 파라메터로 지정하면 이 파라메터에 다른 입력 컨트롤의 값을 대입할 수 있다.&amp;nbsp; 파스칼의 대입문 ':=' 와 모양이 비슷하므로 착각하기 쉽다. '= :' 는 ':=' 와 다르다는 점을 기억하자.&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;procedure&amp;nbsp;TMainForm.btnInsertClick(Sender:&amp;nbsp;TObject); 
begin 
&amp;nbsp;&amp;nbsp;if&amp;nbsp;(EditNameKorean.Text&amp;nbsp;=&amp;nbsp;'')&amp;nbsp;or&amp;nbsp;(EditID.Text&amp;nbsp;=&amp;nbsp;'')&amp;nbsp;or&amp;nbsp;(EditPW.Text&amp;nbsp;=&amp;nbsp;'')&amp;nbsp;then 
&amp;nbsp;&amp;nbsp;begin 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QuestionDlg('입력오류',&amp;nbsp;'필수항목을&amp;nbsp;꼭&amp;nbsp;입력해&amp;nbsp;주세요.',&amp;nbsp;mtCustom,&amp;nbsp;[mrYes,&amp;nbsp;'확인'],&amp;nbsp;'')&amp;nbsp;; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;btnClearClick(nil); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exit; 
&amp;nbsp;&amp;nbsp;end; 

&amp;nbsp;&amp;nbsp;SQLite3Connection1.Close; 
&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Clear; 

&amp;nbsp;&amp;nbsp;try 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLite3Connection1.Open; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLTransaction1.Active&amp;nbsp;:=&amp;nbsp;True; 

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('INSERT&amp;nbsp;INTO&amp;nbsp;DATA&amp;nbsp;(NameKorean,&amp;nbsp;NameEnglish,&amp;nbsp;WebSite,&amp;nbsp;ID,&amp;nbsp;PW,&amp;nbsp;Memo)'); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('&amp;nbsp;VALUES&amp;nbsp;(:NameKorean,&amp;nbsp;:NameEnglish,&amp;nbsp;:WebSite,&amp;nbsp;:ID,&amp;nbsp;:PW,&amp;nbsp;:Memo)'); 

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('NameKorean').AsString&amp;nbsp;:=&amp;nbsp;EditNameKorean.Text; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('NameEnglish').AsString&amp;nbsp;:=&amp;nbsp;EditNameEnglish.Text; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('WebSite').AsString&amp;nbsp;:=&amp;nbsp;EditWebSite.Text; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('ID').AsString&amp;nbsp;:=&amp;nbsp;EditID.Text; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('PW').AsString&amp;nbsp;:=&amp;nbsp;EditPW.Text; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('Memo').AsString&amp;nbsp;:=&amp;nbsp;Memo.Lines.Text; 

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.ExecSQL; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLTransaction1.Commit; 

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;btnClearClick(nil); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UpdateGridAll('Last'); 
&amp;nbsp;&amp;nbsp;except 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ShowMessage('자료를&amp;nbsp;추가하지&amp;nbsp;못했습니다.'); 
&amp;nbsp;&amp;nbsp;end; 
end;&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;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;(3)&amp;nbsp;삭제&amp;nbsp;(DELETE)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삭제를 위해서 현재 Row 값을 저장하는 Currow 을 멤버 변수로 지정한다. DataSource1 의 DataChange 이벤트 핸들러에 Currow := SQLQuery1.FieldByName('PK').Value; 를 추가하여 현재의 Row 값을 저장한다.&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;procedure&amp;nbsp;TMainForm.btnDeleteClick(Sender:&amp;nbsp;TObject); &lt;br /&gt;begin &lt;br /&gt;&amp;nbsp;&amp;nbsp;if&amp;nbsp;QuestionDlg('레코드&amp;nbsp;삭제',&amp;nbsp;'정말&amp;nbsp;삭제하시겠습니까?',&amp;nbsp;mtCustom, &lt;br /&gt;&amp;nbsp;&amp;nbsp;[mrYes,&amp;nbsp;'예',&amp;nbsp;mrNo,&amp;nbsp;'아니요'],&amp;nbsp;'')&amp;nbsp;=&amp;nbsp;mrNo&amp;nbsp;then&amp;nbsp;Exit; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;SQLite3Connection1.Close;&amp;nbsp;//Close,&amp;nbsp;Clear&amp;nbsp;시작전&amp;nbsp;꼭&amp;nbsp;확인 &lt;br /&gt;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Clear;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//sqlquery1.sql.clear&amp;nbsp;를&amp;nbsp;주의할것&amp;nbsp;&amp;nbsp;sqlquery1.clear&amp;nbsp;가&amp;nbsp;아니다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;try &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLite3Connection1.Open; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLTransaction1.Active&amp;nbsp;:=&amp;nbsp;True; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('DELETE&amp;nbsp;FROM&amp;nbsp;DATA&amp;nbsp;WHERE&amp;nbsp;PK&amp;nbsp;=&amp;nbsp;:Currow');&amp;nbsp;//현재&amp;nbsp;위치의&amp;nbsp;레코드&amp;nbsp;삭제 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('Currow').Value&amp;nbsp;:=&amp;nbsp;Currow; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.ExecSQL; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLTransaction1.Commit; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;btnClearClick(nil); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UpdateGridAll('First');&amp;nbsp;//삭제&amp;nbsp;후에는&amp;nbsp;처음&amp;nbsp;레코드로&amp;nbsp;이동한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;except &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ShowMessage('삭제&amp;nbsp;실패했습니다.'); &lt;br /&gt;&amp;nbsp;&amp;nbsp;end; &lt;br /&gt;end;&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;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;(4)&amp;nbsp;수정&amp;nbsp;(UPDATE) &lt;br /&gt;현재의 레코드를 기록한 후에 UPDATE 명령어로 수정해준다.&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;procedure&amp;nbsp;TMainForm.btnUpdateRowClick(Sender:&amp;nbsp;TObject); &lt;br /&gt;begin &lt;br /&gt;&amp;nbsp;&amp;nbsp;if&amp;nbsp;QuestionDlg('레코드&amp;nbsp;수정',&amp;nbsp;'정말&amp;nbsp;수정하시겠습니까?',&amp;nbsp;mtCustom, &lt;br /&gt;&amp;nbsp;&amp;nbsp;[mrYes,&amp;nbsp;'예',&amp;nbsp;mrNo,&amp;nbsp;'아니요'],&amp;nbsp;'')&amp;nbsp;=&amp;nbsp;mrNo&amp;nbsp;then&amp;nbsp;Exit; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;SQLite3Connection1.Close(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Clear; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;try &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLite3Connection1.Open; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLTransaction1.Active&amp;nbsp;:=&amp;nbsp;True; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('UPDATE&amp;nbsp;DATA&amp;nbsp;SET&amp;nbsp;NameKorean&amp;nbsp;=&amp;nbsp;:NameKorean,'); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('NameEnglish&amp;nbsp;=&amp;nbsp;:NameEnglish,&amp;nbsp;'); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('WebSite&amp;nbsp;=&amp;nbsp;:WebSite,'); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('ID&amp;nbsp;=&amp;nbsp;:ID,&amp;nbsp;'); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('PW&amp;nbsp;=&amp;nbsp;:PW,&amp;nbsp;'); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('Memo&amp;nbsp;=&amp;nbsp;:Memo&amp;nbsp;'); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('&amp;nbsp;WHERE&amp;nbsp;PK&amp;nbsp;=&amp;nbsp;:Currow'); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('NameKorean').AsString&amp;nbsp;:=&amp;nbsp;EditNameKorean.Text; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('NameEnglish').AsString&amp;nbsp;:=&amp;nbsp;EditNameEnglish.Text; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('WebSite').AsString&amp;nbsp;:=&amp;nbsp;EditWebSite.Text; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('ID').AsString&amp;nbsp;:=&amp;nbsp;EditID.Text; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('PW').AsString&amp;nbsp;:=&amp;nbsp;EditPW.Text; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('Memo').AsString&amp;nbsp;:=&amp;nbsp;Memo.Lines.Text; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('Currow').Value&amp;nbsp;:=&amp;nbsp;Currow; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.ExecSQL; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLTransaction1.Commit; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;btnClearClick(nil); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UpdateGridAll('Current'); &lt;br /&gt;&amp;nbsp;&amp;nbsp;except &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ShowMessage('수정오류'); &lt;br /&gt;&amp;nbsp;&amp;nbsp;end; &lt;br /&gt;end;&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;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;(5)&amp;nbsp;검색&amp;nbsp;(SEARCH) &lt;br /&gt;폼 화면 위에 ActionList 를 올려 놓는다. 단축키를 사용할 수 있게 해준다. ActionList 를 더블클릭하면 에디터가 팝업된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;155&quot; data-filename=&quot;whatwas15.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cp77VN/btrbIdvzS2b/LFdqNlmpzjpO4CEJ3iFoNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cp77VN/btrbIdvzS2b/LFdqNlmpzjpO4CEJ3iFoNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cp77VN/btrbIdvzS2b/LFdqNlmpzjpO4CEJ3iFoNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcp77VN%2FbtrbIdvzS2b%2FLFdqNlmpzjpO4CEJ3iFoNk%2Fimg.png&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;155&quot; data-filename=&quot;whatwas15.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[+] 를 클릭하여 Action1, Action2 를 만들고 Object Inspector 에서 Action1 을 선택한다. Properties 탭에서 Name 은 'Search Action' 으로 변경하고 ShortCut 은 'Ctrl+F' 로 지정한다. Events 탭에서 OnExecute 이벤트를 더블 클릭하여 이벤트 핸들러를 작성한다. Ctrl+F 를 누르면 자동으로 검색에디트에 포커스가 가서 검색할 수 있게 된다.&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;procedure&amp;nbsp;TMainForm.SearchActionExecute(Sender:&amp;nbsp;TObject); &lt;br /&gt;begin &lt;br /&gt;&amp;nbsp;&amp;nbsp;EditSearch.SetFocus; &lt;br /&gt;end;&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;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;검색에디트에서는 한글이름 또는 영문이름 일부라도 입력되면 검색되도록 하였다.&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;procedure&amp;nbsp;TMainForm.btnSearchClick(Sender:&amp;nbsp;TObject); &lt;br /&gt;begin &lt;br /&gt;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(EditSearch.Text&amp;nbsp;=&amp;nbsp;'')&amp;nbsp;then&amp;nbsp;Exit; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;SQLite3Connection1.Close(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Clear; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;try &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLite3Connection1.Open; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;DATA&amp;nbsp;WHERE&amp;nbsp;'); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('(NameKorean&amp;nbsp;LIKE&amp;nbsp;:NameKorean)&amp;nbsp;OR&amp;nbsp;'); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.SQL.Add('(NameEnglish&amp;nbsp;LIKE&amp;nbsp;:NameEnglish)'); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('NameKorean').Value&amp;nbsp;:=&amp;nbsp;'%'&amp;nbsp;+&amp;nbsp;EditSearch.Text&amp;nbsp;+&amp;nbsp;'%'; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Params.ParamByName('NameEnglish').Value&amp;nbsp;:=&amp;nbsp;'%'&amp;nbsp;+&amp;nbsp;EditSearch.Text&amp;nbsp;+&amp;nbsp;'%'; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLQuery1.Open; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataSource1.DataSet&amp;nbsp;:=&amp;nbsp;SQLQuery1; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DBGrid1.DataSource&amp;nbsp;:=&amp;nbsp;DataSource1; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DBGrid1.AutoFillColumns&amp;nbsp;:=&amp;nbsp;True; &lt;br /&gt;&amp;nbsp;&amp;nbsp;except &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ShowMessage('검색할&amp;nbsp;수&amp;nbsp;없습니다.'); &lt;br /&gt;&amp;nbsp;&amp;nbsp;end; &lt;br /&gt;end;&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;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;(6) 백업 (BACKUP) &lt;br /&gt;비밀번호는&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;실수로&amp;nbsp;삭제한후에&amp;nbsp;나중에서야&amp;nbsp;실수임을&amp;nbsp;발견했다면&amp;nbsp;백업한&amp;nbsp;DB&amp;nbsp;에서&amp;nbsp;단서를&amp;nbsp;찾을&amp;nbsp;수&amp;nbsp;있을&amp;nbsp;것이다.&lt;br /&gt;프리파스칼에서 기본으로 제공하는 기능이므로 uses 에 Sqlite3backup 를 추가한다.&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;procedure&amp;nbsp;TMainForm.BackupSQL(Conn:&amp;nbsp;TSQLite3Connection;&amp;nbsp;FileName:&amp;nbsp;String); &lt;br /&gt;var &lt;br /&gt;&amp;nbsp;&amp;nbsp;f:&amp;nbsp;String; &lt;br /&gt;&amp;nbsp;&amp;nbsp;BK:&amp;nbsp;TSQLite3Backup; &lt;br /&gt;begin &lt;br /&gt;&amp;nbsp;&amp;nbsp;f&amp;nbsp;:=&amp;nbsp;ChangeFileEXT(FileName,&amp;nbsp;'')&amp;nbsp;+&amp;nbsp;'&amp;nbsp;[Backup&amp;nbsp;'&amp;nbsp;+ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FormatDateTime('yyyy.mm.dd&amp;nbsp;hh-nn-ss',&amp;nbsp;Now)&amp;nbsp;+&amp;nbsp;'].db'; &lt;br /&gt;&amp;nbsp;&amp;nbsp;BK&amp;nbsp;:=&amp;nbsp;TSQLite3Backup.Create; &lt;br /&gt;&amp;nbsp;&amp;nbsp;BK.Backup(Conn,&amp;nbsp;f); &lt;br /&gt;&amp;nbsp;&amp;nbsp;BK.Free; &lt;br /&gt;&amp;nbsp;&amp;nbsp;QuestionDlg('DB&amp;nbsp;백업',&amp;nbsp;'DB&amp;nbsp;가&amp;nbsp;'&amp;nbsp;+&amp;nbsp;f&amp;nbsp;+&amp;nbsp;'&amp;nbsp;&amp;nbsp;로&amp;nbsp;백업되었습니다.',&amp;nbsp;mtCustom,&amp;nbsp;[mrYes,&amp;nbsp;'확인'],&amp;nbsp;''); &lt;br /&gt;end;&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;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;3편에서는 한글입력이 필요할때는 자동으로 입력모드를 한글로 바꾸는 방법과, 클립보드 복사, 인터넷 브라우저를 실행시켜 특정 웹사이트로 이동하는 방법을 구현해 본다.&lt;br /&gt;&lt;br /&gt;3편에서 계속&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/176&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://appleii.tistory.com/176&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #faedd4; border: #000000 1px solid; padding: 10px;&quot;&gt;&lt;a href=&quot;https://appleii.tistory.com/174&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (1) 폼 디자인&lt;/a&gt;&lt;br /&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (2) 데이터베이스&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/176&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3)&amp;nbsp;기타기능&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/177&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (4) 엑셀파일 출력 I&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/180&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (5) 엑셀파일 출력 II&lt;/a&gt;&lt;/div&gt;</description>
      <category>기술탐구</category>
      <category>lazarus</category>
      <category>pascal</category>
      <category>라자루스</category>
      <category>파스칼</category>
      <author>appleii</author>
      <guid isPermaLink="true">https://appleii.tistory.com/175</guid>
      <comments>https://appleii.tistory.com/175#entry175comment</comments>
      <pubDate>Wed, 11 Aug 2021 11:00:15 +0900</pubDate>
    </item>
    <item>
      <title>라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (1) 폼 디자인</title>
      <link>https://appleii.tistory.com/174</link>
      <description>&lt;div style=&quot;background-color: #faedd4; border: #000000 1px solid; padding: 10px;&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (1) 폼 디자인&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/175&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (2) 데이터베이스&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/176&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3)&amp;nbsp;기타기능&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/177&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (4) 엑셀파일 출력 I&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/180&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (5) 엑셀파일 출력 II&lt;/a&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파스칼 언어로 작성하는 GUI 개발 도구인 라자루스로 간단한 비밀번호 관리 프로그램을 만들어 보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;765&quot; data-filename=&quot;whatwas0.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C1XuB/btrbQbKPTg6/KD6uagwerZMl4KhYxPHrqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C1XuB/btrbQbKPTg6/KD6uagwerZMl4KhYxPHrqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C1XuB/btrbQbKPTg6/KD6uagwerZMl4KhYxPHrqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC1XuB%2FbtrbQbKPTg6%2FKD6uagwerZMl4KhYxPHrqk%2Fimg.png&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;765&quot; data-filename=&quot;whatwas0.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;비밀번호를 종이에 적어서 관리할 수도 있고 엑셀로 관리할 수도 있지만 종이는 분실되기 쉽고 엑셀은 오피스가 설치된 PC 에서만 사용이 가능하다. 간단한 입력화면을 가진 전용 프로그램을 만드는 것이 제일 좋은 해결 방법이다. GUI 개발도구는 여러가지가 있지만 오브젝트 파스칼 언어로 작성하는 라자루스가 제일 편하다. 데이터베이스는 SQLite3 를 사용한다. whatwas.zip 에는 실행파일과 SQLite3 가 있다. whatwas_source 에는 소스코드가 있다. whatwas.exe 를 실행시키면 경고창이 뜨면서 다운로드 받은 파일임을 알린다. [추가정보]를 누른 후 [실행] 을 누른다. whatwas_source.zip 을 다운로드 받은 후에 압축을 풀어서 whatwas.lpi 를 더블 클릭하면 프로젝트가 열린다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/OU73W/btrbIcJy42W/IAW3xXsyFPpWgbrIpEKufk/whatwas.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;whatwas.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;2.03MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cls2uy/btrbJIBiME4/fvmBSgktWB0P6OlFd8tjKK/whatwas_source.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;whatwas_source.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.87MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;font-size: 1.5em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 라자루스 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라자루스 IDE 는 다음 사이트에서 다운로드 받아 설치한다. [DownLoad Now] 버튼을 누르면 다운로드 된다.&lt;br /&gt;&lt;a href=&quot;https://www.lazarus-ide.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.lazarus-ide.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;IDE 의 폰트 문제는 다음을 참고하여 수정하고 라자루스 IDE 를 다시 빌드시키면 된다.&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/172&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://appleii.tistory.com/172&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;SDI 방식이므로 툴들을 화면에 적당히 배치시켜야 한다. 배치가 끝났으면 Desktop 을 저장한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;233&quot; data-filename=&quot;whatwas1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jb3ne/btrbENJTUz0/2ce39y6q5qrHrdiNg5KMl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jb3ne/btrbENJTUz0/2ce39y6q5qrHrdiNg5KMl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jb3ne/btrbENJTUz0/2ce39y6q5qrHrdiNg5KMl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJb3ne%2FbtrbENJTUz0%2F2ce39y6q5qrHrdiNg5KMl0%2Fimg.png&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;233&quot; data-filename=&quot;whatwas1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;메인 메뉴에서 Project -&amp;gt; New Project -&amp;gt; Application 순서대로 선택한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;417&quot; data-filename=&quot;whatwas2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SDYTk/btrbABDbWJQ/IcRby9PQgzLn1loQYPY0g1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SDYTk/btrbABDbWJQ/IcRby9PQgzLn1loQYPY0g1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SDYTk/btrbABDbWJQ/IcRby9PQgzLn1loQYPY0g1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSDYTk%2FbtrbABDbWJQ%2FIcRby9PQgzLn1loQYPY0g1%2Fimg.png&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;417&quot; data-filename=&quot;whatwas2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;새로운 폼이 화면에 뜬다. 이제 폼위에 컨트롤을 배치해 본다. 컴포넌트 팔렛트에서 Standard 탭을 선택한 후에 Button을 선택한 후 Form위에 올려 놓는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;297&quot; data-filename=&quot;whatwas3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CabV1/btrbCtkBBsV/m7UOpDU4YuRhkpguSfekZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CabV1/btrbCtkBBsV/m7UOpDU4YuRhkpguSfekZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CabV1/btrbCtkBBsV/m7UOpDU4YuRhkpguSfekZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCabV1%2FbtrbCtkBBsV%2Fm7UOpDU4YuRhkpguSfekZk%2Fimg.png&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;297&quot; data-filename=&quot;whatwas3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;버튼을 더블 클릭하면 클릭 이벤트 핸들러가 만들어 진다. 원하는 동작을 채워 넣으면 된다. Close; 를 입력하고 &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;procedure&amp;nbsp;TForm1.Button1Click(Sender:&amp;nbsp;TObject); &lt;br /&gt;begin &lt;br /&gt;&amp;nbsp;&amp;nbsp;Close; &lt;br /&gt;end;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;F9키를 눌러서 실행한다. 이 버튼을 누르면 프로그램이 종료된다. 이런식으로 이벤트 핸들러를 채워 나가면서 개발한다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.5em;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 폼 디자인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 디자인은 입력폼과 DB 내용을 표시하는 DBGrid , 그리고 제어하는 버튼들로 구성된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;771&quot; data-filename=&quot;whatwas4.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AWNY7/btrbIoJi5b3/qJktKAoGILs1Kcwsmbzh4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AWNY7/btrbIoJi5b3/qJktKAoGILs1Kcwsmbzh4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AWNY7/btrbIoJi5b3/qJktKAoGILs1Kcwsmbzh4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAWNY7%2FbtrbIoJi5b3%2FqJktKAoGILs1Kcwsmbzh4K%2Fimg.png&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;771&quot; data-filename=&quot;whatwas4.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;비밀번호를 관리하기 위해서는 데이터베이스에 한글이름, 영문이름, 웹사이트, 비밀번호가 저장되어야 한다. 저장된 데이터를 불러와서 화면에 출력하면 되는 것이다. 다음 컨트롤이 필요하다.&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1)&amp;nbsp;데이터를&amp;nbsp;입력받기&amp;nbsp;위한&amp;nbsp;Edit,&amp;nbsp;Memo &lt;br /&gt;(2)&amp;nbsp;입력해야&amp;nbsp;하는&amp;nbsp;데이터를&amp;nbsp;설명하는&amp;nbsp;Label &lt;br /&gt;(3)&amp;nbsp;관련되는&amp;nbsp;컨트롤을&amp;nbsp;모아서&amp;nbsp;보여주는&amp;nbsp;GroupBox &lt;br /&gt;(4)&amp;nbsp;원하는&amp;nbsp;동작을&amp;nbsp;하기&amp;nbsp;위한&amp;nbsp;Button &lt;br /&gt;(5)&amp;nbsp;데이터베이스에서&amp;nbsp;데이터를&amp;nbsp;읽어&amp;nbsp;화면에&amp;nbsp;표시하는&amp;nbsp;DBGrid&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 컨트롤들은 폼 화면에 표시되는 컴포넌트(Visual Component) 이다. 폼에 직접적으로 나타나지는 않지만 폼 위에 올릴 수&amp;nbsp;있는&amp;nbsp;컴포넌트는&amp;nbsp;보이지&amp;nbsp;않는&amp;nbsp;컴포넌트(Non-Visaul&amp;nbsp;Component)이다.&amp;nbsp;데이터베이스를&amp;nbsp;읽고&amp;nbsp;쓰기&amp;nbsp;위해서는&amp;nbsp;관련&amp;nbsp;컴포넌트를&amp;nbsp;폼위에&amp;nbsp;올려&amp;nbsp;놓아야&amp;nbsp;한다. &lt;br /&gt;&lt;br /&gt;실행시에는 보이지 않지만, 디자인시에 값을 바꿀 수 있다. 배치가 끝났으면 Unit1.pas 대신에 frmMain.pas 로 저장한다. 프로젝트 이름은 whatwas.lpi 로 저장한다. whatwas.lpr 도 같이 생성된다. lpr 은 실질적인 메인 진입 코드이다. lpi 에는 프로젝트 관리에 필요한 파일의 위치, 리소스 등이 저장된다. 폼이 새로 만들어지면 폼의 데이터를 저장하는 파일이 생성된다. 확장자는 lfm 이다. frmMain.pas 는 폼의 논리적인 작동방법이 나타나 있고, frmMain.lfm 에는 폼에 올려져 있는 컨트롤의 위치 등이 저장되어 있다. frmMain.pas 에서 F12 키를 누르면 폼 화면으로 전환되어 폼 디자인을 할 수 있고, 폼 디자인 상태에서 F12 키를 누르면 frmMain.pas 로 전환된다. 만들어지는 파일은 다음과 같다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #e8e8e8; padding: 10px; border: 1px solid #000000;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;whatwas.lpi&amp;nbsp;프로젝트&amp;nbsp; &lt;br /&gt;whatwas.lpr&amp;nbsp;메인&amp;nbsp;진입코드 &lt;br /&gt;whatwas.lps&amp;nbsp;세션 &lt;br /&gt;whatwas.ico&amp;nbsp;아이콘&amp;nbsp; &lt;br /&gt;whatwas.res&amp;nbsp;리소스&amp;nbsp; &lt;br /&gt;frmMain.pas 폼의 논리구조를 구현하는 코드&lt;br /&gt;frmMain.lfm&amp;nbsp;폼위에&amp;nbsp;오려진&amp;nbsp;컨트롤&amp;nbsp;크기&amp;nbsp;,&amp;nbsp;위치&amp;nbsp;등의&amp;nbsp;데이터&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폼의 크기를 조절하지 못하도록 하기 위해서 Object Inspector 에서 Properties 탭을 선택한 후 BorderStyle 을 bsSingle 로 지정한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;442&quot; data-filename=&quot;whatwas5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3t9Ru/btrbIdnMPj8/x4lNHFIgUpHwSmJA73zuTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3t9Ru/btrbIdnMPj8/x4lNHFIgUpHwSmJA73zuTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3t9Ru/btrbIdnMPj8/x4lNHFIgUpHwSmJA73zuTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3t9Ru%2FbtrbIdnMPj8%2Fx4lNHFIgUpHwSmJA73zuTK%2Fimg.png&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;442&quot; data-filename=&quot;whatwas5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Object Pascal 언어는 Property 를 통해서 값을 넣고 빼는 작업을 할 수 있다. 라자루스 에서는 Property 들을 Object Inspector에서 관리할 수 있도록 하고 있다.&amp;nbsp; Form 의 Name 을 MainForm 으로 바꾸면 Object Inspector 의 트리뷰에서도 이름이 바뀐다. 또한 소스코드상에서의 이름도 자동으로 바뀐다.&lt;br /&gt;&lt;br /&gt;그럼 화면에 표시되는 내용을 바꾸려면 어떻게 해야 할까. 화면에 표시되는 내용은 Caption 에서 바꿀 수 있다. Button 의 Name 을 btnInsert 로 바꾸고 Caption 을 추가 로 바꾸면 소스코드상에서의 버튼의 이름은 btnInsert 로 바뀌고 화면에 표시되는 버튼위의 글자는 '추가'로 바뀌는 것이다. 이런식으로 폼위에 위치한 컨트롤들을 하나하나 바꾸어 나간다.&lt;br /&gt;&lt;br /&gt;2편에서는 SQLite 와 데이터베이스 처리를 구현해 본다.&lt;br /&gt;&lt;br /&gt;2 편에서 계속&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/175&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://appleii.tistory.com/175&lt;/a&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #faedd4; border: #000000 1px solid; padding: 10px;&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (1) 폼 디자인&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/175&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (2) 데이터베이스&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/176&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (3)&amp;nbsp;기타기능&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/177&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (4) 엑셀파일 출력 I&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://appleii.tistory.com/180&quot;&gt;라자루스로 만들어 보는 비밀번호 관리 프로그램 [뭐였더라] (5) 엑셀파일 출력 II&lt;/a&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파스칼 언어로 작성하는 GUI 개발 도구인 라자루스로 간단한 비밀번호 관리 프로그램을 만들어 보자.&lt;/p&gt;</description>
      <category>기술탐구</category>
      <category>lazarus</category>
      <category>pascal</category>
      <category>라자루스</category>
      <category>파스칼</category>
      <author>appleii</author>
      <guid isPermaLink="true">https://appleii.tistory.com/174</guid>
      <comments>https://appleii.tistory.com/174#entry174comment</comments>
      <pubDate>Wed, 11 Aug 2021 11:00:05 +0900</pubDate>
    </item>
    <item>
      <title>김프(GIMP) 2.10.32  다크테마(Dark Theme) 수정</title>
      <link>https://appleii.tistory.com/173</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;김프(GIMP) 는 포토샵 대체용으로 많이 쓰고 있지만 인터페이스가 좋지는 못하다. 과거에는 SDI 방식이어서 더 그랬던 것 같다. 몇 번이나 도전해 봤지만 윈도우에서는 GTK 가 너무 불안해서 10분도 못 버티고 강제종료되는 경우가 많아서 더 힘들었던 것 같다. 최근에 다시 도전해 본 GIMP 는 엄청난 발전이 있었다. 안정성도 높아졌고 이제는 인터페이스도 도킹이 가능한 방식으로 바뀌었다. 하지만 여전히 문제가 있는데 바로 테마 기능이다. 다크 테마가 아무리 적응하려 해도 안되는 것이다.&amp;nbsp; 색상별 구분이 잘 안되어서 무엇을 선택하였는지 알 수 없게 만들었기 때문이다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;다행히도, 김프는 gtkrc 를 수정하면 제한적이지만 원하는 대로 바꿀수가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;gimp_modified_dark.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1030&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBBOOx/btrbpWAyZRl/xt1bEfkFIxNOujpKyChyx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBBOOx/btrbpWAyZRl/xt1bEfkFIxNOujpKyChyx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBBOOx/btrbpWAyZRl/xt1bEfkFIxNOujpKyChyx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBBOOx%2FbtrbpWAyZRl%2Fxt1bEfkFIxNOujpKyChyx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1030&quot; data-filename=&quot;gimp_modified_dark.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1030&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시인성을 최대한 높이고 글자 크기를 키우는 방향으로 테마를 수정해 보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/mUgxE/btrbtpbzXgZ/V093gU128WDKA7v8dXubd0/gtkrc?attach=1&amp;amp;knm=tfile.dat&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;gtkrc&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.04MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;64비트 버전을 설치했다면 경로는&amp;nbsp; C:\Program Files\GIMP 2\share\gimp\2.0\themes\Dark\gtkrc&amp;nbsp; &amp;nbsp;가 된다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;원래의 gtkrc 는 이름을 gtkrc_original 등으로 변경한후 gtkrc 를 다운로드 받아서 필요한 폴더에 덮어쓰기 하면 된다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;수정에 참고할 만한 사항들 몇가지를 나열해 본다.&lt;br /&gt;&lt;br /&gt;1. 폰트 크기 바꾸기 #font_name 에서 주석처리된 #을 지우고 사이즈를 변경한다. Sans 는 폰트이름, 12 는 폰트사이즈이다.&lt;br /&gt;style&amp;nbsp;&quot;gimp-dark-default-style&quot; &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;font_name&amp;nbsp;=&amp;nbsp;&quot;Sans&amp;nbsp;12&quot; &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;도킹&amp;nbsp;가능한&amp;nbsp;다이얼로그&amp;nbsp;외곽선&amp;nbsp;크기조절 &lt;br /&gt;GimpDockable::content-border&amp;nbsp;=&amp;nbsp;5 &lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;다이얼로그&amp;nbsp;외곽선&amp;nbsp;크기조절 &lt;br /&gt;GtkDialog::content-area-border&amp;nbsp;=&amp;nbsp;5 &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;마우스&amp;nbsp;호버&amp;nbsp;색상&amp;nbsp;(체크박스,&amp;nbsp;폴딩&amp;nbsp;메뉴) &lt;br /&gt;color[&quot;clr7&quot;]&amp;nbsp;&amp;nbsp;=&amp;nbsp;&quot;#196994&quot; &lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;메인메뉴&amp;nbsp;글자색&amp;nbsp; &lt;br /&gt;style&amp;nbsp;&quot;gimp-dark-menu-item&quot;&amp;nbsp;&amp;nbsp;에서 &lt;br /&gt;fg[PRELIGHT]&amp;nbsp;=&amp;nbsp;&quot;#ff9500&quot;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;6.&amp;nbsp;값을&amp;nbsp;조절하는&amp;nbsp;슬라이더&amp;nbsp;색&amp;nbsp;(스케일&amp;nbsp;위젯?) &lt;br /&gt;bg[SELECTED]&amp;nbsp;=&amp;nbsp;@clr7 &lt;br /&gt;&lt;br /&gt;7.&amp;nbsp;버튼&amp;nbsp;호버링시에&amp;nbsp;색상&amp;nbsp;변화 &lt;br /&gt;style&amp;nbsp;&quot;gimp-dark-button-style&quot;&amp;nbsp;&amp;nbsp;에서 &lt;br /&gt;&amp;nbsp;fg[PRELIGHT]&amp;nbsp;=&amp;nbsp;&quot;#ff9500&quot;&amp;nbsp;#버튼&amp;nbsp;글자색&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;bg[PRELIGHT]&amp;nbsp;=&amp;nbsp;&quot;#196994&quot;&amp;nbsp;#버튼&amp;nbsp;배경색&lt;/p&gt;</description>
      <category>재미탐구</category>
      <category>gimp</category>
      <category>김프</category>
      <author>appleii</author>
      <guid isPermaLink="true">https://appleii.tistory.com/173</guid>
      <comments>https://appleii.tistory.com/173#entry173comment</comments>
      <pubDate>Sat, 7 Aug 2021 15:32:39 +0900</pubDate>
    </item>
    <item>
      <title>라자루스 IDE (Lazarus IDE) default 폰트 문제 해결법</title>
      <link>https://appleii.tistory.com/172</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;라자루스 IDE (Lazarus IDE) 에서 폰트이름의 기본값은 'default' 이다. DefFontData 에 그렇게 정의되어 있다.&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #eeeeee; padding: 10px; border: 1px solid #000000;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;DefFontData:&amp;nbsp;TFontData&amp;nbsp;=&amp;nbsp;( &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Handle:&amp;nbsp;0; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Height:&amp;nbsp;0; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Pitch:&amp;nbsp;fpDefault; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Style:&amp;nbsp;[]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Charset:&amp;nbsp;DEFAULT_CHARSET; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Quality:&amp;nbsp;fqDefault; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Name:&amp;nbsp;'default'; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Orientation:&amp;nbsp;0; &lt;br /&gt;&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;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폰트의 기본값을 초기에 정하지 않고 상황에 따라서 시스템의 폰트를 다르게 하여 표시하겠다는 의도이다. 실제 컨트롤에 폰트를 표시하려면 시스템의 폰트를 알아내야 한다. 문제는 현재 라자루스 IDE 버전(2.0.12)에서는 시스템폰트이름을 제대로 읽어내지 못한다. 윈도우10 에서의 시스템폰트는 '맑은 고딕' 이지만 자꾸 '굴림' 폰트를 사용한다. 폰트가 너무 얇아서 가독성이 떨어지는 것이 문제이다. 단순히 라자루스 IDE 폰트만 문제가 되는 것이 아니라, 폼 위에 컨트롤을 올리는 순간 폰트가 '굴림' 폰트가 되는 것이 문제다.&lt;br /&gt;&lt;br /&gt;해당 기능을 구현한 코드를 수정한 후 라자루스 IDE 를 다시 빌드하면 된다. &lt;br /&gt;&lt;br /&gt;해당코드는 (설치 드라이브가 C드라이브일경우) C:\lazarus\lcl\interfaces\win32\win32winapi.inc 에 TWin32WidgetSet.CreateFontIndirect 로 구현되어 있다. 해당 함수를 다음과 같이 수정하면 된다.&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;background-color: #eeeeee; padding: 10px; border: 1px solid #000000;&quot;&gt;function&amp;nbsp;TWin32WidgetSet.CreateFontIndirect(const&amp;nbsp;LogFont:&amp;nbsp;TLogFont):&amp;nbsp;HFONT; &lt;br /&gt;var &lt;br /&gt;&amp;nbsp;&amp;nbsp;TempLogFontW:&amp;nbsp;TLogFontW; &lt;br /&gt;&amp;nbsp;&amp;nbsp;TempLogFont:&amp;nbsp;TLogFontA&amp;nbsp;absolute&amp;nbsp;TempLogFontW; &lt;br /&gt;&amp;nbsp;&amp;nbsp;FontName:&amp;nbsp;String; &lt;br /&gt;begin &lt;br /&gt;&amp;nbsp;&amp;nbsp;FontName&amp;nbsp;:=&amp;nbsp;LogFont.lfFaceName; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;TempLogFont&amp;nbsp;:=&amp;nbsp;LogFont; &lt;br /&gt;&amp;nbsp;&amp;nbsp;if&amp;nbsp;IsFontNameDefault(FontName)&amp;nbsp;then &lt;br /&gt;&amp;nbsp;&amp;nbsp;begin &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TempLogFontW.lfFaceName&amp;nbsp;:=&amp;nbsp;&lt;span style=&quot;background-color: #fedec7;&quot;&gt;Screen.SystemFont.Name;&lt;/span&gt;&amp;nbsp;// &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//TempLogFontW.lfFaceName&amp;nbsp;:=&amp;nbsp;UTF8ToUTF16(FMetrics.lfMessageFont.lfFaceName);&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // FMetrics must be UTF16 &lt;br /&gt;&amp;nbsp;&amp;nbsp;end &lt;br /&gt;&amp;nbsp;&amp;nbsp;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;begin &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TempLogFontW.lfFaceName&amp;nbsp;:=&amp;nbsp;UTF8ToUTF16(FontName); &lt;br /&gt;&amp;nbsp;&amp;nbsp;end; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if&amp;nbsp;TempLogFont.lfHeight&amp;nbsp;=&amp;nbsp;0&amp;nbsp;then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TempLogFont.lfHeight&amp;nbsp;:=&amp;nbsp;FMetrics.lfMessageFont.lfHeight; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Result&amp;nbsp;:=&amp;nbsp;Windows.CreateFontIndirectW(@TempLogFontW); &lt;br /&gt;end;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주석처리한 부분이 문제인데, FMetrics.lfMessageFont.lfFaceName 으로 들어오는 값이 '맑은 고딕' 이 아니다. Screen.SystemFont.Name 으로 수정한다. &lt;br /&gt;&lt;br /&gt;메뉴에서 Tools -&amp;gt; Configure &quot;Build Lazarus&quot; 를 선택한후 Build 버튼을 누른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;377&quot; data-filename=&quot;defaultfont2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kxt6J/btraKETxaT3/vkxVA04UqlbxxIWCd6UN7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kxt6J/btraKETxaT3/vkxVA04UqlbxxIWCd6UN7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kxt6J/btraKETxaT3/vkxVA04UqlbxxIWCd6UN7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkxt6J%2FbtraKETxaT3%2FvkxVA04UqlbxxIWCd6UN7K%2Fimg.png&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;377&quot; data-filename=&quot;defaultfont2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;시스템 기본 폰트인 '맑은 고딕' 으로 라자루스 IDE 가 변한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;559&quot; data-filename=&quot;defaultfont3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJFeVA/btraBTZpGsD/nLjFuiVgVROGu4P5DJVaD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJFeVA/btraBTZpGsD/nLjFuiVgVROGu4P5DJVaD0/img.png&quot; data-alt=&quot;변경 전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJFeVA/btraBTZpGsD/nLjFuiVgVROGu4P5DJVaD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJFeVA%2FbtraBTZpGsD%2FnLjFuiVgVROGu4P5DJVaD0%2Fimg.png&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;559&quot; data-filename=&quot;defaultfont3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;변경 전&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;605&quot; data-filename=&quot;defaultfont1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cN5evw/btraEgfyMMj/JnGpKqkYPUSmi5MM0JBGQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cN5evw/btraEgfyMMj/JnGpKqkYPUSmi5MM0JBGQ1/img.png&quot; data-alt=&quot;변경 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cN5evw/btraEgfyMMj/JnGpKqkYPUSmi5MM0JBGQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcN5evw%2FbtraEgfyMMj%2FJnGpKqkYPUSmi5MM0JBGQ1%2Fimg.png&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;605&quot; data-filename=&quot;defaultfont1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;변경 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>기술탐구</category>
      <category>lazarus</category>
      <category>pascal</category>
      <category>라자루스</category>
      <category>파스칼</category>
      <author>appleii</author>
      <guid isPermaLink="true">https://appleii.tistory.com/172</guid>
      <comments>https://appleii.tistory.com/172#entry172comment</comments>
      <pubDate>Wed, 28 Jul 2021 20:20:32 +0900</pubDate>
    </item>
  </channel>
</rss>