라벨이 Delphi인 게시물 표시

7.제적부 색인 프로젝트

제적부 색인 프로젝트 개발툴 : 델파이 7.0 DB : Firebird 개요 2004년쯤 프로젝트로 구청에서 오래된 문서(제적부)를 스캔하여 DB화하는 작업을 하였습니다. 구청 창고에 보관되어 있는 오래된 1800년대 제적부(요즘으로 이야기하면 주민등록?)를 스캔받아서 DB화하는데 거기에서 사용할 프로그램을 제작하였습니다. 첫 번째 프로그램 뷰어+인덱스 프로그램 오래된 문서를 스캔받은 이미지(TIF)를 보여주고 스캔받은 이미지를 작업자가 한자를 읽어서 각각의 항목에 입력하는 프로그램입니다. 여러 사람이 스캔받은 이미지를 보면서 작업하기 위해서 로컬에 DB를 심어서 동작하는 프로그램을 만들었고 DB는 파이어 버드(Firebird)를 사용하였습니다. 다른 DB는 PC에 프로그램을 설치해야 하는데 로컬 동작하게 해서 프로그램이랑 이미지를 외장하드, USB에 저장한 후 작업 할수 있도록 제작 하였습니다. 각자 사용자가 이미지를 보면서 입력한 정보는 프로그램 폴더에 있는 DB에 저장이 됩니다. 입력하는 정보들은 성명, 주소, 생일 등이었습니다. 스캔받을 대상의 종이가 정말 오래된 종이라서 스캔도 깨끗하게 되지 않아서 뷰어 기능에 기울기 자동 조정, 점 제거 기능을 추가하였습니다. 당연히 확대 기능도 있었죠 두 번째 프로그램 DB 변환 각각의 작업자들이 로컬로 작업한 DB 파일들을 가지고 구청에 제출하기 위한 XML 형태로 변환하는 프로그램입니다. 작업자들이 이미지 수가 많아서 작업자들에게 나누어서 작업했기 때문에 개별로 XML로 변환하여 구청에 제출하였습니다. 이전에는 계속 텍스트 파일 등을 사용했는데 XML 을 처음 사용해 봤어요!!! 저장된 DB 파일에서 XML Convert 하는 형태의 프로그램 입니다. 프로젝트를 진행하면서 우리나라 주민번호 체계 중에 1800년대 사람들에 대해서 알게 되었습니다. 1800년대 남자는 8, 여자는 9로 뒷자리가 시작됩니다. 데이터 베이스 Firebird를 처음 사용해 봤는데 아무것도 설치하지 않아도 로...

6. 도면 뷰어 컴포넌트 교체기

기존 도면 뷰어 개발 내용 https://skshpapa80.blogspot.com/2025/02/3.html 도면 뷰어를 개발해놓고 1년쯤 시간이 지난 후 SI 프로젝트와 유지 보수 업무를 진행하면서 회사 생활을 하고 있었습니다. 근대 다시 도면 뷰어 프로그램의 업그레이드 업무가 할당됩니다. 잘 사용하고 있었는데 이제 더 이상 기존 프로그램을 사용하기 점점 어렵다고 하네요. 사유는 주로 쓰는 AutoCad 버전이 14 -> 2000으로 변경 AutoCad 2000 버전에서는 고은글(shx) 폰트 사용안하고 윈도우 폰트(ttf) 사용 작업해야될 파일 버전 비율이 AutoCad 2000이 거의 90% 정도 였습니다. 기존 프로그램을 사용하려면 AutoCad 2000 버전으로 된 파일을 14버전으로 다시 저장해야 되는데 파일수가 너무 많아져서 이제는 힘들다는 CAD 작업자 요청에 따라 다시 업그레이드 업무를 받습니다. 기존의 델마당에서 찾은 OpenDwg Viewkit 을 활용한 뷰어를 업그레이드할 시기가 온 거죠. AutoCad 2000 버전을 인식하지 못하고 윈도용 폰트(ttf) 도 인식이 안되었습니다. 그래서 OpenDwg Viewkit의 새로운 버전을 받으려고 OpenDwg.org에 갔더니 멤버십을 가입하라고 합니다. 가입 안 하고는 받을 수가 없더라고요. 영문으로 된 사이트에 가입을 하고 Viewkit를 받았는데 기존 방식에 적용하기가 좀 힘들었어요 기존 방식이 OpenDwg Viewkit DLL로 래핑(VIsual C 사용) 하고 그걸 Delphi에서 호출하는 방식으로 사용하였는데 DLL로 래핑 하는 곳부터 막히더라고요. Visual C에서 DLL로 만든데 OpenDwg Viewkit이 변경이 많이 되었는지 잘 안되었습니다. DLL 래핑 해서 Delphi에서 테스트하면 뭔가 인자라든지 값들이 안 맞아서 안되고 계속 에러를 ㅎㅎ 컴포넌트구매 다른 SI 업무도 같이 진행하고 있어서 이거만 잡고 있을 수 없어서 DWG 컴포넌트 ...

5. 지하철 표지판 관리 프로그램 (미완성)

지하철 표지판 관리 프로그램 2002년도 초반에 진행하던 프로젝트 중에 지하철 표지판 관리 프로그램도 있었습니다. 역시 개발 툴은 Delphi 5.0이었고 안타 깝게도 미완성이었던 프로젝트입니다. 시작 첫 회사는 도면을 많이 다루는 회사여서 그리고 지하철과 관련된 일을 많이 하면서 지하철의 표지판 관리에 어려움이 있다고 해서 개발 진행하기로 하였습니다. 관리를 엑셀로 하시더라고요. 역별로 엑셀에 도면 이미지를 붙이고 거기에 표지판 번호를 붙이고 다른 시트에 각 번호에 대한 표지판의 정보를 관리하시고 표지판의 정보와 표지판 이미지도 삽입해서 관리하고 계셨습니다. 역에서 표지판을 바뀔 때마다 엑셀에서 그 표지판을 찾아서 다른 툴을 이용해서 이미지를 수정해서 바꿔주는 게 힘들다고 하시더라고요. 그래서 Delphi 5.0과 아파쳐라는 도면관리 툴을 가지고 프로젝트를 기획을 하기로 하였습니다. 프로그램 기획 아파쳐라는 툴이 있습니다. 저도 이때 처음 사용해 본 툴인데 도면에 심벌을 올리고 각 도면이랑 데이터베이스를 연결하여 도면의 수치, 위치 정보 등을 관리하며 리포팅을 할 수 있다고 합니다. 각 심벌이랑 링크도 가능하고요. 외국에서 개발된 툴이며 이미 FM(Facility Management) 쪽에서는 많이 사용하는 툴이라고 하더라고요. 예를 들면 사무실 도면이 있고 사무실 도면에 책상 심벌, 의자 심벌을 그리고 그 심벌에다가 책상, 의자의 정보를 데이터베이스에 등록해놓으면 사용자가 도면을 보다가 책상, 의자를 클릭하면 입력된 정보가 뜹니다. 이툴을 이용해서 각 역사별 층 도면을 입력하고 거기에 표지판 위치에 심벌을 그립니다. 그 심벌을 클릭하면 제가 개발한 프로그램이 실행되면서 표지판 정보와 표지만 이미지를 불러옵니다. 제프로 그램에서 표지판 이미지를 수정하면 될 거 같았습니다. 그렇게 기획을 하고 개발을 시작합니다. 구현 우선 역을 하나 정해서 구역에 대한 프로그램을 개발해 보기로 하였습니다. 아파쳐 툴에 층별 도면을 입력하는 작업을 했는데 ...

3. 도면 뷰어 프로그램 수정

도면뷰어 수정 개발툴 : Delphi 5.0 2001년 이미지 뷰어를 완성하고 나서 다음 개발 일로 도면 뷰어 프로그램 수정에 들어갑니다. 이번 프로그램도 목록은 이미지 뷰어와 같이 텍스트를 사용하고 이미지를 불러오는 대신 DWG(AutoCad 파일)을 화면에 보여줍니다. 도면 뷰어에 사용된 컴포넌트는 Dr.DWG라고 처음 보는 컴포넌트였습니다. 해외에서 개발된 컴포넌트로써 사용하기 편한 OCX로 되어 있어서 동작은 잘 되는데 문제는 한글 폰트를 인식 못 하더라고요. 해외 버전이라 그런지 국내에서 CAD 작업할 때 사용하는 한글 폰트를 인식하지 못하기 때문에 뷰어 프로그램으로 납품이 불가능하게 되었습니다. 아마 그때 사용했던 AutoCAD 한글 폰트가 고은 글(shx) 이었던 거 같아요. 제 기억에 Dr.DWG에서는 인식시킬 방법이 없어서 한글이 들어간 DWG 파일은 모두 ???? 표시되었습니다. 그래서 업그레이드 개발 업무가 할당됩니다. 그래서 제가 한일 Dr.DWG 개발사에 이메일 쓰기 잘못하는 영어를 영작하여 메일을 쓰긴 했는데 답변에 불가능하다는 이야기였습니다. 델파이 커뮤니티(델마당, 델파이코리아) 자료실 검색 DWG 도면 컴포넌트 관련 자료를 찾기 시작했습니다. 이전 개발자에게 문의 (전화 통화) 등의 과정을 거치는데 진도가 잘 안 나갔습니다. 생각보다 DWG 관련 컴포넌트의 수가 별로 없더군요. 제가 못 찾을 걸지도 이전 개발자도 외국 사이트에서 겨우 구입했도고 우편으로 도착했다고 했어요 ㅎㅎ 그래서 포기할까 하다가 델마당에서 OpenDWG 관련 자료를 찾았습니다. 감사하게도 소스까지 공개해주셔서 받은 자료를 열심히 분석하고, OpenDWG.org 사이트에 가서 자료를 찾아서 보고 델마당에 올라온 자료를 가지고 도면 뷰어 프로그램을 완성했습니다. 당연히 shx 한글 폰트도 지원되었고요. 그렇게 개발을 완료했더니 회사에서도 인정을 받기 시작하였습니다. 신입 개발자로 입사해서 두 개의 프로그램을 완성했으니까요! 하지만 1년 ...

2. CD-ROM 에서 동작하는 이미지 뷰어 만들기

제가 첫 회사에서 개발했던 내용을 소개합니다. 벌써 20년이 넘었네요. 2001년 입사한 첫 회사는 인쇄업과 컴퓨터 프로그램 개발을 같이 하는 회사였고 특이한 점은 병역 특례 회사였습니다. 병역 특례로 입사하게 되면서 근무하게 되었는데 근무 환경은 좋지 않았습니다. 입사하자마자 맡은 업무는 CD를 제작해서 납품하는데 거기에 들어가는 프로그램 개발건이었습니다. 이전 개발자가 만들어 놓은 부분을 수정만 하는 거였죠. 기능소개 프로그램의 기능은 단순합니다. CD를 컴퓨터에 넣었을 때 자동 실행되며 CD 안에 있는 목록을 가지고 이미지를 보여주는 데 이때 이미지는 주로 책이나 문서들을 스캔받아 이미지화하여 CD 안에 저장되어 있습니다. 주 사용처는 관공서에 프로젝트가 끝나고 나서 제출해야 되는 서류를 예전에는 인쇄한 형태로 제출을 하다가 양이 많아 관공서에서도 보관하기 힘들어서 CD-ROM에 데이터 형태로 제출하고 그 제출한 내용 CD-ROM을 PC에 넣었을 때 바로 볼 수 있도록 프로그램까지 같이 제공하려고 작성된 프로그램입니다. 이 방식을 처음 제안 한 사장님은 국무총리 상도 받으셨네요! CD-ROM에서 동작해야 해서 실행파일 하나로 빌드 되는 Delphi를 사용해야 했습니다. 다른 개발 툴인 VisualC(MFC) 나 VisualBasic의 경우 PC에 라이브러리 등을 설치해야 하는데 Delphi를 사용하면 EXE 파일이 하나라서 필요가 없거든요. CD-ROM 에 기록된 이미지 목록은 텍스트 파일로 저장 되어 있습니다. (메모장으로 수정) 제목 파일명 이렇게요 Index.txt라는 파일을 읽어서 왼쪽 리스트에 보여주고 리스트에서 이미지를 선택하면 오른쪽 이미지 컴포넌트에 이미지가 디스플레이 됩니다. 추가 기능 개발은 이전 개발자가 만들어 놓은 프로그램에 화면을 수정하고 저는 목록을 단계로 분리하는 기능을 넣었습니다. 제목 파일명 제목 파일명 이렇게요 트리 형식(Listview -> TreeView 컴포넌트 변경)으로 보이도...

Delphi 자작 컴포넌트

이미지
자작 컴포넌트 필요해서 만들기 시작한 Delphi 컴포넌트를 소개합니다. 자주 쓰는 기능을 미리 만들어 놓고 사용하고 있습니다. 다만 최근에는 잘 안 쓰는데 회사에서는 C#을 사용하기 때문에 Delphi를 자주 사용하지 않습니다. khXLS : Excel 제어 유닛 khGrid : StringGrid 기능 추가 khEdit : 정렬, Mouse Enter. Leave Event khComboBox : 값이 두개인 Combobox, Item/Values : TStrings khImage : 이미지 컴포넌트 확장 khReport : 출력 기능 khTrayIcon : 트레이 아이콘 제어 컴포넌트 소스 https://github.com/skshpapa80/skshpapa80_pack

[Delphi] ShellContols 컴포넌트 등록법

 ShellContols 컴포넌트 등록법 Delphi 설치시 컴포넌트 팔레트에 기본적으로 등록이 되지 않아서 등록하는 방법을 소개합니다. Delphi 메뉴 Component -> Install Component Vcl.Shell.ShellCtrls.pas 소스를 선택합니다. 소스 경로는 C:\Program Files (x86)\Embarcadero\Studio\21.0\source\vcl 폴더에 있습니다. 설치 버전에 따라 조금씩 다릅니다. 그리고 install new package 옵션을 선택하고 Next 를 클릭합니다. 저장할 경로 ShellControls.dpk 를 생성해서 지정하고 Description 에는 ShellControls 라고 입력합니다. 그리고 Finish​ VCL 추가하겠다는 메세지는 확인을 눌러주고 Vcl.Shell.ShellConsts.pas 소스를 하나더 추가해줍니다. 그리고 Vcl.Shell.ShellCtrls.pas 소스를 열어서 interface 섹션 가장 마지막에 procedure Register; 추가합니다. 그리고 implementation 섹션에 procedure Register; begin   RegisterComponents('Shell Controls', [TShellListView]);   RegisterComponents('Shell Controls', [TShellTreeView]);   RegisterComponents('Shell Controls', [TShellChangeNotifier]); end; 추가해줍니다. 그리고 나서 Install 해주면 Shell Controls 가 등록됩니다.

Lotus 123 파일 읽는 프로그램

이미지
  Lotus 123 파일 읽는 프로그램 2006년에 작업했던 프로그램 입니다. 지인의 부탁으로 작업한 프로그램인데 소스 정리하다가 나왔네요.  예전에 Lotus 123이라는 오래된 Spreadsheet프로그램이 있었는데 Excel이 나오기 전에는 많이 사용했습니다. 지인의 회사에서 Lotus 123 구동하는 PC 가 고장이 나면서 기존 파일을 읽어 오지 못해서 난처했었죠.  그러다 Lotus 123 파일을 읽어서 Excel 변환하는 프로그램을 만들었습니다.  우연히 Lotus 123을 읽어오는 Delphi Component가 저에게 있어서 그 Component 를 사용해서 읽은 후 Excel 저장합니다. Delphi 7 버전으로 만들었네요. 기능 Lotus 123 파일 읽어오기 (파일에 여러시트가 있을경우 Tab을 생성하면서 열기) Excel저장, 전체저장(전체 탭 Excel파일로 저장) Excel 이 설치된 PC 에서만 동작합니다. 엑셀 저장은 Excel Automation 사용하거든요

Sheet2DB – Excel DB 업로드 프로그램

이미지
Sheet2DB  프로젝트를 진행하다 보면 Excel 데이터를 DB Table로 입력해야 되는 경우가 많이 생깁니다. Excel 데이터를 DB Table 구조에 맞춰서 입력하기가 때로는 막 노동처럼 느껴져서 만들게 되었습니다. 스크린샷(ScreenShot) Excel 선택하는 페이지 Excel 선택 후 DB 접속 정보 입력 DB 접속 정보를 입력한 후 DB연결/테이블 리스트 버튼을 누르면 다음페이지로 넘어 갑니다. MSSQL 용이라서 sp_tables 테이블 정보와 sp_columns 컬럼정보를 가져옵니다. 테이블 리스트에서 사용할 테이블을 선택하고 테이블 컬럼명 버튼을 누르면 테이블 컬럼 정보가 나오고 Excel 컬럼 정보랑 연결/취소 버튼을 이용해서 매칭 시킨 후 다음페이지에서 DB작업 버튼을 클릭하면 DB 에 Insert 됩니다. 테이블 정보와 Excel 컬럼(타이틀) 정보를 활용하여 Insert 구문을 자동으로 만들어서 테이블에 저장됩니다. 처리결과를 확인합니다. 프로그램 정보 Delphi 10.3 커뮤니티 에디션으로 작업 엑셀 읽어 오는 부분은 Excel.Application OLE 를 사용했습니다. 그리드는 기본그리드인 스트링 그리드 현재는 MSSQL 만 됩니다. 오라클 추가한 후 공개할 예정입니다. 그전에 필요하신분은 따로 연락 주세요!!! PS . 2022-04-28 소스 github 에 올렸어요  https://github.com/skshpapa80/Sheet2DB

[Delphi] 웹프로그래밍 #4 - 게시판 만들기

이미지
  웹프로그래밍 04 - 게시판 만들기 새로운 프로젝트를 생성합니다. ISAPI 프로젝트를 만들고 저장을 DelphiBoard 로 합니다. 이번엔 게시판은 DB 연결을 해야 하니 MSSQL 을 사용하기 위해 ADOConn, ADOQuery1 컴포넌트도 올려줌니다. 이번에 사용할 액션은 우선 3개 List(기본), Read(읽기), Write(쓰기) 입니다. ​HEAD 와 FOOT 만들기 웹의 HEAD 부분을 코딩합니다. function TWebModule1.Head: String; var     view_html : String; begin     view_html := '<html>'+ sLineBreak;     view_html := view_html + '<head>'+ sLineBreak;     view_html := view_html + '<title>Delphi board</title>'+ sLineBreak;     view_html := view_html + '<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">'+ sLineBreak;     view_html := view_html + '</head>'+ sLineBreak;     view_html := view_html + '<body>'+ sLineBreak;     view_html := view_html + '<div cl...

[Delphi] 웹프로그래밍 #3 - 코딩 심화

이미지
  웹프로그래밍 03 지난번 강좌는 실행까지 부분이고 실제 코딩을 해보겠습니다. ​ Projects 창에서 WebModuleUnit1.pas 를 더블클릭하면 아래창이 나오고 마우스 오른쪽 버튼을 클릭하면 아래 팝업이 나옵니다. Action Editor 창이 열리면 여기에서 Path를 추가할수 있습니다. Path 란​ http://localhost/TEST/test.dll/list?page=1 list 같이 Path 를 추가하여 여러개의 하위서비스를 추가할수 있습니다. 기본은 "/" 라서 아무것도 없으면 기본이 처리됩니다. Object Inspector 창에서 Events 탭에서 OnAction 이벤트를 추가하여 아래처러 코딩하면 procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;   Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin     Response.Content :=         '<html>' +         '<head><title>Web Server Application</title></head>' +         '<body>List Page</body>' +         '</html>  end; http://localhost/TEST/test.dll/list 로 접속하면 다음과 같은 결과를 얻을수 있습니다. OnAction 에는 Request, Response 라는 객체가 선언되어 있는데요. Request 값을 받아올때 Response 는 HTML 을 html을 출력할때 사용합니다. GET 방식으로 page 값 받...

[Delphi] 웹프로그래밍 #2 - 코딩

이미지
  웹프로그래밍 02 이제 본격적으로 ISAPI 웹프로그램을 만들어 봅시다. Delphi 로 웹프로그래밍을 하는 이유는 Delphi로 만들어진 코드나 로직을 다른 언어로 개발하기 힘들때 사용합니다. ​ 델파이를 실행 후 File-New-Other 를 선택합니다. "Web-Web Server Application"을 선택하고 "OK" 클릭 우선 IIS, Windows 용으로 만들어 볼꺼예요 "Next" 클릭 "ISAPI dynamic link library"를 선택하고 "Finish" 클릭.​ 델파이가 기본 페이지를 생성합니다. "Project1"과 "WebModuleUnit1" 생성된 프로젝트를 저장을 합니다. test.dll 로 만드려구요. WebModuleUnit1.pas 파일을 선택한후 더블클릭하면 "WebModuleDefaultHandlerAction()" procedure 에 원하는 HTML 을 코딩 후 빌드한 다음에 https://skshpapa80.blogspot.com/2022/01/delphi-1-iis.html IIS 설정에서 만든 폴더에 test.dll 을 복사한 후 ​http://localhost/TEST/test.dll  실행하면 "WebModuleDefaultHandlerAction()" 코딩한 HTML 이 보입니다. ​여기 까지가 기초 코딩 입니다. 다음 포스트에서 Delphi 웹 프로그래밍에서 사용할수 있는 여러 기능들을 소개하겠습니다.

[Delphi] 웹프로그래밍 #1 - IIS 설정

이미지
웹프로그래밍 01 IIS 에서 ISAPI 설정하는법 먼저 IIS(인터넷 정보 서비스) 관라자 를 열어서 프로그램을 사용할수 있게 설정해야 합니다. 그렇지 않으면 브라우저는 오류 페이지를 보여주거나 dll 파일을 다운로드 합니다. ​ MIME 형실 설정 “.dll” 를 선택하고 마우스 오른쪽 버튼을 눌러 [편집] 모드로 들어간다. 기존에 설정되어 있던 "application/octet-stream"을 "text/xml"로 변경하고 "확인"을 누르자. 처리기 매핑 설정 "ISAPI-dll"이 "사용 안함"으로 되어있다. "ISAPI-dll”를 선택하고 마우스 오른쪽 버튼 클릭하여 "기능 사용 권한 편집"을 선택. ISAPI-dll 이 안보인다면 Windows 기능 추가 에서 IIS 항목의 ISAPI 기능에 체크하면 됨 "실행"에 선택하고 "확인"을 누른다. "ISAPI-dll"라인이 "사용"으로 변경되었음을 확인한다. ​ ISAPI 및 CGI 제한 설정 IIS 관리자에서 좌측 트리의 최상단을 클릭하면 "ISAPI 및 CGI 제한"이 나오는데 더블 클릭한다. "ISAPI 및 CGI 제한" 목록에서 마우스 오른쪽 버튼을 눌러 "기능 설정 편집"을 클릭. "지정하지 않은 ISAPI 모듈 허용"을 선택하고 "확인"을 누른다. 윈도우가 64bit 라서 IIS 가 64비트 일경우 dll 파일이 32비트 애플리케이션로 빌드하면 실행이 안됩니다. 그때는 아래와 같이 설정합니다. "32비트 애플리케이션 사용 " : True ​설정 완료 실제 Delphi 로 코딩을 한 후 실행은 다음 포스트에서!

사용하는 프로그래밍 언어

프로그래밍 언어 벌써 프로그래머로 취직을 해서 회사를 다닌 지 19년이 넘었습니다. 정말 오래 다녔네요. 벌써 나이가 40이 넘었네요!!! 그래서 지금까지 사용하는?? 사용해 봤던 프로그래밍 언어를 정리해 봅니다. 글을 시작하면서 간단히 생각해 봐도 참 많네요!!! C/C++ 고등학교 때 프로그래머가 되겠다며 C언어 책을 하나 사서 보기 시작합니다. 고등학교 들어가서 산 PC(펜티엄급)에 터보 C를 설치한 후 책을 따라 하는데 책을 샀을 때에는 엄청난 프로그래머가 될 줄 알고 열심히 봤는데 처음에는 엄청 어렵더군요.. 그래서 프로그래밍보다는 게임을 많이 합니다. 그때 좀 더 열심히 했으면 지금보다 나았을 텐데 ㅠ.ㅠ 대학교에 가서 C언어 과목을 수강하면서 제대로 배우기 시작합니다. 확실히 고등학교 때 본 C언어 책이 도움이 되네요. C언어 리포트는 다 제가 해주기 시작합니다. 프로그램을 짜둔 다기보다는 디버깅을 해주고 안 되는 부분 설명해 주고 점심을 참 많이 얻어먹었습니다. 일주일 동안 매일 얻어먹은 적도 있어요 ㅎㅎ Visual C++을 사용하면서 C++을 배우게 됩니다. 하지만 Delphi를 배우기 시작하면서 Delphi에 빠지게 되고 C/C++은 멀리하게 됩니다. 그리고 2005년에 PSP 자작 프로그램 개발할 때 사용해 보게 되는데 역시 C에 대한 관심이 별로 안 생기네요. 아마 C++을 계속했으면 C++Builder를 사용했을지도 모르겠네요… VisualBasic 대학 다니면서 동아리 활동을 시작합니다. 근데 나름 전산 동아리라고 학교 축제에 프로그램을 짜서 축제 기간 동안 전시합니다. Delphi에 빠져들면서 Delphi를 사용해서 프로그램을 짜고 전시회도 하고 싶었는데 팀 인원이 모자라서 VisualBasic를 사용하는 팀에 합류합니다. 거기서 합숙(?) 같은 걸 하면서 동영상 재생기도 만들어보고 앨범 프로그램도 만들게 되고 VisualBasic의 기초는 배우게 됩니다. 설마 나중에 회사에서 사용할 일이 있을 줄을 그땐 몰랐지요!!! Delphi...

사진 정리 프로그램(Photodate)

이미지
  두 딸아이의 아빠가 된 후 아이들 사진을 엄청 찍습니다. 디카 그리고 스마트폰 카메라가 좋아지면서 사진을 더 많이 찍는데요.  사진을 찍고 난 후 PC에 옮기면서 날짜별로 정리하려고 만들게 되었습니다. 처음에는 사진에 기록된 Exif 정보를 하나하나 확인하여 폴더를 만들고 정리했는데 사진 파일이 많아지니 쉽지 않더군요.  2017년 폴더를 만든 후 2017-01-01 이렇게 관리를 하기 시작했는데 일일이 확인하고 하니 실수도 하고 힘도 들더군요. 프로그래머라면 이런 일을 자동으로 처리해야 한다는 생각에 이 프로그램을 만들게 되었습니다. 제작 툴은 델파이 10.2 도쿄 스타터 버전입니다! 프로그램 스크린샷 사용법 사진 파일이 모여 있는 대상 폴더를 지정하면 위 리스트에 이미지 목록이 표시됩니다. 이동 대상 폴더를 선택하고 파일을 이동할지 복사할지 선택한 다음 작업 시작 버튼을 누르면 됩니다. 이동 폴더에 날짜(2016-03-31 Exif 날짜) 폴더가 생긴 후 날짜 폴더로 이미지가 이동/복사됩니다.

[Delphi] Indy 컴포넌트 중 idHTTP 사용법

idHTTP Delphi 컴포넌트중 Indy 컴포넌트는 정말 사용하기 편리하고  필요한 기능은 다 구현이 되어 있습니다.  그중 idHTTP사용법을 소개합니다.  1. POST 파일 전송 예제 Indy에 포함되어 있는 TidMultiPartFormData를 이용하여 웹페이지에 POST  전송/파일전송 하는 방법입니다. 크게 어려운 부분이 아니라서 소스코드로 대체 합니다. procedure TFmMain.Button1Click(Sender: TObject); var   DataStream : TidMultiPartFormDataStream;   rs: TMemoryStream; begin   DataStream := TIdMultiPartFormDataStream.Create;   rs := TMemoryStream.Create;   try     idHTTP1.Request.ContentType := DataStream.RequestContentType;     DataStream.AddFormField(''logid'',Trim(Edit1.Text));     DataStream.AddFormField(''passwd'',Trim(Edit2.Text));     // Post 로 apple_logid 와 apple_passwd 값을 전송합니다.     DataStream.AddFile(''upfile'',''e:\\downlogo.bmp'',''application/octet-stream'');     // upfile 변수에 ''e:\\downlogo.bmp'' 파일 을 추가 합니다..      DataStream.Position := 0;     try       IdHTTP1.Post(''test.p...

[Delphi] SAPI 컴포넌트 등록 방법(TTS 구현)

이미지
 SAPI 컴포넌트 등록 방법(TTS 구현) Spvoice1.Speak(txtHangul.Text,0); 예전에 아이들이 한글 공부하는 프로그램을 간단하게 만들었었는데요. 처음에는 구글을 이용해서 TTS 를 구현했습니다. 근데 구글의 방법이 막혀서 다른 방법으로 TTS를 구현했는데 그 방법을 소개합니다. 바로 SAPI 컴포넌트를 사용하는 방법입니다. 설치방법 메뉴 - > Component -> Import Component 선택 Import a Type Library 선택 -> Next 버튼 클릭 Install to New Package”를 선택 후 -> [Next] 버튼 클릭. “Microsoft Speech Object Library” 를 선택하고, 버전과 GUID를 확인한다. -> [Next] 클릭. “Palette Page”에서 “ActiveX”를 선택하고 -> [Next] 버튼 클릭. Package 저장한 경로 설정하고 Description 입력하고 -> Finish 버튼 클릭 Unit “SpeechLib_TBL.pas” ~ 추가하겠다는 메세지가 나오면 -> OK 클릭 컴파일 과정이 나오고 -> 아래의 이미지 처럼 install 메세지 나옴 아래이미지 처럼 TSp 로 시작하는 컴포넌트 들이 있습니다. TTS 구현 샘플 소스 TSpVoice 컴포넌트 폼에 올리고 Spvoice1.Speak("TTS 읽은 문장",0);

[Delphi] 프로그래밍 팁 모음 #1

 로케일 정보 읽기 시스템 로케일 정보 읽어오는 방법 지금 사용하는 OS가 어떤 언어를 사용하고 있는지 구분하기 위한 코드 이번 프로젝트에 중국어를 표현해야 되서 사용하게 된 코드 var    Buffer: array[0..2] of Char; begin    GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SABBREVLANGNAME, Buffer, sizeof(Buffer));    //Buffer 이 "KOR" 이면 한국어 이다.    //"CHI", "CHT" 이건 중국어 end; CD-ROM 드라이브 목록 가져오기 CD-ROM 드라기브 목록 가져오기 var   CDRom: Byte; begin   for CDrom := 65 to 90 do begin     if GetDriveType(PChar(Chr(CDRom) + ':')) = 5 then       // CDROM 드라이브인지 체크       // 0 : 드라이브가 아님       // 1 : 루트 디렉토리 없음       // 2 : 이동식 디스크       // 3 : 고정 디스크       // 4 : 원격 디스크       // 5 : CDROM       // 6 : 램디스크       cboDrive.Items.Add(PChar(Chr(CDRom) + ':')); end; 컨트롤 한/영 토글하기 설정하는 컨드롤(TEdit)등에 키보드의 한/영키를 누른 효과를 줍니다. uses에 imm 을 추가합니다. 그리고 한/영 모드 타입 TImeInputMode = (imHangul, imEnglish); 선언해 줍니다...

[Delphi] 스트링그리드 제어하기

 Delphi 를 쓰다보면 가장 접하기 쉬운 그리드 기능이 적어서 가벼운 그리드인 스트링그리드(TStringGrid)를 제어하는 법을 간단히 정리해 보았습니다. 1. 스트링 그리드 ROW 삭제 var   i: Integer; begin   // String Grid ROW 삭제   for i := StringGrid5.Row to StringGrid5.RowCount - 2 do     StringGrid5.Rows[i].Assign(StringGrid5.Rows[i + 1]);   StringGrid5.RowCount := StringGrid5.RowCount - 1; 2. 컬럼 숨기기 StringGrid5.Colwidths[3] := -1; 3. 그리드 중간에 빈ROW 삽입하기 TStringGridMove = class(TStringGrid) public   procedure RowMoved(FromIndex, ToIndex: Longint); end; procedure TStringGridMove.RowMoved(FromIndex, ToIndex: Integer); begin   inherited; end; // 예제 TStringGridMove(StringGrid1).RowCount = TStringGridMove(StringGrid1).RowCount + 1 TStringGridMove(StringGrid1).RowMoved(TStringGridMove(StringGrid1).RowCount, 3);

[Delphi] 웹브라우져 컨트롤을 이용하여 출력하기

이미지
  웹브라우져 컨트롤을 이용하여 출력하기 델파이로 프로그램 작업을 하다가 출력물이 필요해서 웹브라우져 컨트롤을 이용한 출력 프로그램을 만들었습니다. 델파이 스타터 버전에는 퀵리포트나 패스트 리포트가 없어서 HTML 을 디자인 하고 웹브라우져 컨트롤로 표시한후 출력하면 되겠다는 생각에 만들어 보게 되었습니다. 출력 데이터 생성 ---- 소스코드 var   htmltext, errmsg: String;   Fp: TextFile;   IOError : integer; begin   htmltext := '<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">' + #10#13;   htmltext := htmltext + '<table border="1">';   htmltext := htmltext + '<tr><td>성명</td><td>' + Edit1.Text + '</td></tr>';   htmltext := htmltext + '<tr><td>생년월일</td><td>' + Edit2.Text + '</td></tr>';   htmltext := htmltext + '<tr><td>연락처</td><td>' + Edit3.Text + '</td></tr>';   htmltext := htmltext + '</table>';   AssignFile(fp, 'C:\TEMP\tmp.html');   {$I-}   ReWrite(Fp);   {$I+}   IOError := IORe...