본문 바로가기

Delphi Tip219

델파이 리소스(Resource)의 활용 1 델파이 리소스(Resource) 리소스 파일 만들기 리소스 파일은 바이너리 형태의 데이터로서 RCDATA라 부른다. 리소스 파일은 Res라는 확장자를 가지게 되는데 이 Res 파일을 만들기 위한 과정을 살펴 보자 Res 파일을 만들기 위해서는 Text로 작성된 RC 파일이 있어야 한다. 이 RC 파일은 Res 파일에 포함하고자 하는 데이터 이름과 데이터 식별자, 그리고 데이터로 구성된 Text 파일이다. RC 파일의 예 WAVEFILE WAVE c:\WaveSound.wav 이렇게 작성된 것이 RC 파일이다. 여기서 'WAVEFILE'은 리소스를 호출할 때 쓰일 이름이며 'WAVE'는 이 리소스가 WAVE 파일임을 명시하는 것이며 맨 뒷부분은 실제로 리소스에 적재될 파일의 경로와 파일명으로 구성되어 진다.. 2023. 10. 13.
델파이 타이머(TTimer) Interval 시간오차 해결방법 델파이 타이머 델파이에서 컴포넌트로 제공되는 TTimer의 경우에는 정확한 시간에 맞게 콜백을 하지 않는다. Interval 을 1/1000 초까지 조정할 수 있지만 실제로 호출되는 것은 1/18.2 초 단위로 끊어 지게 되기때문이다. 만약 TTimer로 MP3 플레이어나 동영상 재생기를 만든다면 어떻게 될까 ? MP3 음향이 정확한 박자로 재생하지 못할 것이고 동영상도 프레임이 정확하지 못해서 눈이 상당히 피로해질 거다. 하지만 지금 소개하는 타이머를 쓰게 되면 1ms 의 오차정도만을 허용하는 고급의 타이머가 생성되게 됩니다. 어려운 내용이 아니기 때문에 그냥 소스에 주석을 붙이는 차원으로 끝내겠습니다. 그리고 dfm 의 내용도 Text 로 뒤에 첨가하였으니 직접 폼을 만들어서 테스트 해보면 된다 폼에.. 2023. 10. 11.
델파이 데이타베이스 기초 5 델파이 데이타베이스 Post 한다음 Disk로 바로 저장하기 위해 DbiSaveChange함수를 쓰는 예입니다. CustTable의 AfterPost이벤트 헨들러에서 procedure TDataModule2.CustTableAfterPost(DataSet: TDataSet); begin DbiSaveChanges((DataSet as TTable).Handle); //또는 DbiSaveChanges(CustTable.Handle); end; Table에서 레코드 검색 테이블에서 레코드를 검색하는 방법은 많이 있습니다. GotoKey, FindKey, GotoNearest, FindNearest 등이 있으며 이것들은 모두 인덱스가 있는 파일만 검색합니다. 우선 위의 명령을 써서 검새을 하기 위해서는 Tab.. 2023. 10. 7.
델파이 데이타베이스 기초 4 델파이 데이타베이스 데이타 베이스 관련 콤포넌트 Data Access Component 데이타엑세스 콤포넌트는 물리적인 데이타베이스를 프로그램시 사용자가 쓸수 있도록 접근할수 있게 해주는 콤포넌트들로 TDataBase, TDataSource,TTable, TQuery, TBatchMove, TSession 등이 있다. TTable 데이타베이스 테이블에 접근하기 위한 콤포넌트이다. 테이블에 접근하기 위해 TableName 프로퍼티에 테이블 이름,DatabaseName 프로퍼티에 Alias이름을 지정해 주어야 한다. 그리고 실제 사용하기 위해서는 Active를 True로 해주거나 TTable.Open 메서드를 사용하여 테이블을 활성화 시켜야 한다. 그리고, Filter 프로퍼티를 사용하여 테이블을 필터링 할.. 2023. 10. 6.
델파이 데이타베이스 기초 3 델파이 데이타베이스 SQL(Structured Qurey Language) SQL은 1970년대초 IBM에서 개발한 데이타베이스 질의용 언어로써 델파이에서는 실제 SQL언어자체를 가지고 응용프로그램을 만들거나 하는게 아니라 SQL문법으로 쓰여진 문장을 TQuery콤포넌트를 사용해서 BDE에 넘기면 BDE가 해석하여 어떤 역할을 수행합니다.(Local SQL사용시) 그리고 BDE Administrator를 사용하면 SQL문장을 마치 배치화일처럼 만들어 사용할수도 있습니다. DML(Data Manipulation Language) 데이타 베이스로 부터 원하는 레코드를 검색하거나, 추가/삭제/수정하는등의 데이타 처리를 하는 언어 DDL(Data Definition Language) 말그대로 DataBase테이.. 2023. 10. 5.
델파이 데이타베이스 기초 2 델파이 데이타베이스 무결성(Integrity) 무결성이란 데이타베이스에 저장된 데이타의 일관성(consistency)를 의미합니다. 즉 데이타 베이스 일관성을 좋게 하기 위해 나름대로 정의를 내린것들이죠. 실체(테이블) 무결성(Entity Integrity) 테이블 무결성은 테이블에 있는 모든 행들이 유일한 식별자를 가질 것을 요구한다. 즉 기본키가 설정되어있어야 함을 의미한다. 영역무결성(Domain Integrity) 영역무결성은 한 필드에 NULL값이 허용되는지를 결정 참조무결성(Referential Integrity) 참조무결성은 기본키(참조되는 테이블에서)와 참조 키(참조하는 테이블에서)간의 관계를 유지하는 것을 보장한다. 이것은 예를 들어 거래내역 테이블과 거래처관리 테이블이 거래처코드로 연결.. 2023. 10. 4.
델파이 데이타베이스 기초 1 델파이 데이타베이스 DataBase 개요 DataBase란? 데이타베이스는 말그대로 방대한 데이타를 효율적으로 관리하기위해 만든것입니다. Table, Field, Record, Index 데이타가 DB에 저장될때는 잘정리된 표에 집어넣는 것과 같은 방식으로 데이타를 저장합니다. 그 표가 Table이 되고 그 표의 각 항목이 Field가되고, 각 줄이 Record가 되는 것입니다. 그리고 각 줄에서 특정한 줄을 찾기위해 색인을 만들어 놓은 것이 바로 index입니다. 예를 들어 학생 성적을 관리하는 Table의 경우 ┏━━━┳━━━┳━━━┳━━━┳━━━┓ ┃학번 ┃이름 ┃ 영어 ┃수학 ┃국어 ┃ 2023. 9. 27.
델파이 리소스(Resource) 델파이 리소스(Resource) 리소스 파일 생성 리소스 파일은 바이너리 형태의 데이터로서 RCDATA라 부른다. 리소스 파일은 Res라는 확장자를 가지게 되는데 이 Res 파일을 만들기 위한 과정을 살펴 보자 Res 파일을 만들기 위해서는 Text로 작성된 RC 파일이 있어야 한다. 이 RC 파일은 Res 파일에 포함하고자 하는 데이터 이름과 데이터 식별자, 그리고 데이터로 구성된 Text 파일이다. RC 파일 WAVEFILE WAVE c:\WaveSound.wav 이렇게 작성된 것이 RC 파일이다. 여기서 'WAVEFILE'은 리소스를 호출할 때 쓰일 이름이며 'WAVE'는 이 리소스가 WAVE 파일임을 명시하는 것이며 맨 뒷부분은 실제로 리소스에 적재될 파일의 경로와 파일명으로 구성되어 진다. 이렇.. 2023. 9. 26.
델파이 컨트롤 반투명 드래그 이동 델파이 컨트롤 반투명 드래그 이동 윈도우 탐색기에서 리스트뷰의 헤더부분을 드래그해보면 약간 반투명하게 움직이는 것을 볼수 있습니다. 또는 아이콘을 드래그 할때도 원래의 아이콘이미지가 반투명하게 보이고 투명한부분은 그대로 투명하게 보이는 것을 경험하셨을 겁니다. 이걸 델파이에서 구현하려면 어떻게 해야 할까요? 가장 쉽게 생각해 볼수 있는게 배경화면의 그림을 얻어와서 그 위에 반투명 처리를 해서 아이콘을 그려주고 이렇게 합성한 그림을 배경화면에 다시 그려주는 일을 해야 할겁니다. 하지만 그렇게 되면 드래그하는 일에 CPU가 쉴새가 없게 됩니다. 그러면 방법은 없을까요? 다행이도 델파이에는 이런 기능을 할수 있도록 준비된 녀석이 있습니다. 바로 TImageList라는 녀석이죠!! 사용법 1. 우선 TImage.. 2023. 9. 12.
델파이 인쇄 출력 11편 델파이 인쇄 출력 Printers.pas의 사용법 TPrinter // 생성, 소멸 constructor Create; destructor Destroy; override; // 인쇄 제어 procedure Abort; procedure BeginDoc; procedure EndDoc; procedure NewPage; property Canvas: TCanvas ; //ReadOnly property Copies: Integer; property Orientation: TPrinterOrientation; property Title: string ; // 프린터 제어 procedure GetPrinter(ADevice, ADriver, APort: PChar; var ADeviceMode: THandl.. 2023. 9. 8.
델파이 인쇄 출력 10편 델파이 인쇄 출력 인쇄메모리(스와핑)최적화와 인쇄속도 인쇄를 하는 작업은 상당한 메모리를 요구합니다. 메모리가 부족하면 여러가지 반응이 나타나는데 "메모리가 부족합니다" 라는 메시지가 나오기도 하고 뒤의 몇페이지를 아예 안하고 멍청하게 있기도합니다. 처리속도도 어떻게 구현하느냐에 다라 많이 달라집니다. 1. 선 그리기 윈도가 실제로 선을 그리는 일은 없습니다. 시작점부터 끝점까지 계속원을 그려서 선처럼 보이게 하는것입니다. 그래서 선의 굵기가 굵어지면 원은 직경이 커지고 그만큼 속도가 엄청 느려집니다. 결론은 선을 굵게 그릴려면 차라리 속이 꽉찬 네모를 그리는것이 빠릅니다. 2. Brush.Style := bsClear; 을 쓰지 말자 바탕에 그림을 한장 깔고 Brush.Style := bsClear; .. 2023. 9. 7.
델파이 인쇄 출력 9편 델파이 인쇄 출력 미리보기 구현 미리 보기가 필요한가? 글꼴은 다들 아시다시피 트루타입방식을 사용합니다.(대부분...) 그런데 화면은 비트맵구조를 사용하게 되죠.. 예를들어서 '델파이체'라는 글꼴이 있다치고 그 글꼴의 문자중 'A'자의 크기가 가로로 300이고 세로로 400이라고 합시다. 이 델파이체 A자를 세로 사이즈를 10으로 해서 화면에 그립시다. 그러면 가로 크기는 얼마가 될까요? 400 : 10 = 300 : X 글꼴데이터 세로 : 화면에서 세로 = 글꼴데이터 가로 : 화면에서 가로 여기서 X 를 구하면 7.5가 되지요? (쭈압~ 왠 수학) 근디 화면은 비트맵구조기 땜시 7.5라는 것은 없고 반올림해서 8이 됩니다. 즉 세로가 10이면 가로는 8이되지요 다시 말해서 5대 4 비율이 됩니다. 그래.. 2023. 9. 6.
델파이 인쇄 출력 8편 델파이 인쇄 출력 그림 출력하기 사실 델파이에서 그림을 인쇄하는 일을 아주 쉽습니다. 그냥 그림출력함수나 Canvas.Draw 또는 Canvas.StretchDraw 만 가지고도 그릴 수 있습니다. 그러나 몇 가지 문제가 있습니다. 윈도를 16컬러로 세팅이 되어있는 상태에서 트루컬러로 되어있는 그림을 출력하면 그림은 자동으로 16컬러로 변환되어 그려집니다. 아주 몰골이 되고말지요~ 이유는 간단합니다. 출력을 할때 파레트를 따로 처리해 주지 않으면 자동으로 시스템의 파레트가 적용이 되기때문입니다. 그럼 어케 하느냐~ 파레트를 원래 그림이 가지고 있는 색으로 적용시켜서 출력을 하면 됩니다. 그렇게 할 수 있는 API함수가 있는데 바로 StretchDIBits입니다. 다음 예제는 StretchDIBits를 이.. 2023. 9. 5.
델파이 인쇄 출력 6편 델파이 인쇄 출력 음영 처리 기법 음영 처리 기법은 크게 두 가지가 있습니다. 1. RGB 색상을 이용한 음영 2. 브러시 패턴을 이용한 음영 표준 브러시 패턴을 이용한 방법 비트맵 브러시를 이용한 방법 첫번째, RGB 색상을 이용한 음영은 브러시 스타일을 bsSolid로 주고 브러시색을 적절히 조절해서 그냥 네모를 그리는것입니다. 상당히 간편하고도 편리하면서 깔끔하기때문에 가장 널리 사용합니다. 윈도용 아래아 한글에서 사용하기도합니다. 두번째, 브러시 패턴을 이용한 음영은 두가지가 있습니다. 그냥 표준 브러시패턴을 이용하는 방법과 비트맵 브러시를 이용하는 방법이 있는데 표준 브러시는 모양이 이쁘지 않기 때문에 거의 활용도가 떨어지고 대부분 비트맵브러시를 이용해서 처리합니다. MS워드에서 이 방법을 사용.. 2023. 9. 4.
델파이 인쇄 출력 5편 델파이 인쇄 출력 다음 세 가지를 중점적으로 다루겠습니다. 1. 라인단위로 출력하기 2. 박스(표)안에 출력하기 3. 무질서하게 출력하기 첫번째, 라인단위로 출력하기는 한 라인에 서로 다른 글꼴크기를 적용할때의 기법을 배우고 두번째, 박스안에 출력하기는 문서에서 표를 사용할때 각 셀에 문자를 중앙 또는 왼쪽, 오른쪽으로 정렬하는 방법에 대해서 배우고 세번째, 무질서하게 출력하기는 글꼴의 가로 세로 비율을 마음대로 조절하여 장평을 조절하는 방법과 문장을 여러 각도로 돌려서 출력하는 방법을 배우겠습니다. 어때요? 이 정도만 하면 문자 출력은 다 되겠죠? 1. 라인 단위로 출력하기 한 라인에 여러 크기의 폰트가 적용이될때 그냥 TextOut( 0, 0 ); 이라고 하면 모두 글꼴의 위부분을 기준으로 출력이 되.. 2023. 9. 1.
델파이 인쇄 출력 4편 델파이 인쇄 출력 인쇄루틴의 기본 형태 기준점 설정 등을 이용해서 전체 인쇄루틴이 갖추어야 할 기본적인 형태를 알아 보겠습니다. 대충 설명을 하면 이렇게 됩니다. 1. 인쇄를 시작한다. 2. 현재의 매핑모드를 변수에 저장하면서 새로운 매핑모드를 적용시킨다. 3. 현재의 기준점을 변수에 저장하면서 새로운 기준점을 적용시킨다. 4. 그린다. 5. 원래의 기준점을 복구한다. 6. 원래의 매핑모드를 복구한다. 7. 인쇄를 종료한다. 예제를 작성해 볼까요? // 그리는 루틴 procedure DrawPage( Canvas: TCanvas ); begin Canvas.Rectangle( 0, 0, 1000, -200 ); end; // 기준 점을 APoint로 바꾸고 현재의 기준점을 리턴한다. function Se.. 2023. 8. 30.
델파이 인쇄 출력 3편 델파이 인쇄 출력 매핑모드의 사용법 실제로 인쇄에서의 가장 핵심 부분은 매핑모드에 있습니다. 그리고 쓰고 하는것은 이미 누구나 다 아는 사실이고 별로 어려울것도 없으며 궂이 설명을 할 것도 없습니다. 그러나 대부분 매핑모드를 몰라서 인쇄루틴을 엉터리로 하거나 매번 그릴때마다 인자값을 프린터의 해상도에 맞게 재 계산을 해서 그리는것이 대부분입니다. 이제 이번 장의 몇 줄만 잘 배우시면 인쇄가 이렇게 쉽다는것을 알게 될겁니다. 매핑모드란? 그리기 함수들이 사용하는 인자값들의 단위를 픽셀, 밀리미터, 인치 혹은 사용자 정의 단위로 바꾸어 주며 그리기의 기준점을 변경하여 줍니다. 한 가지 예를 다시 들겠습니다. procedure TForm1.Button1Click(Sender: TObject); begin Pr.. 2023. 8. 29.
델파이 인쇄 출력 2편 델파이 인쇄 출력 TPrinter의 사용법 Printers.pas에는 다음과 같은 function이 하나 전역으로 선언되어있습니다. function Printer: TPrinter; 이것은 마치 Froms를 uses에 추가하면 자동으로 Application이나 Screen을 사용할 수 있듯이 uses에 Printers를 추가하면 Pritner라는 function을 사용할 수 있도록 되어있습니다. TPrinter는 다음과 같은 구조를 가지고 있습니다. // 생성, 소멸 constructor Create; destructor Destroy; override; // 인쇄 제어 procedure Abort; procedure BeginDoc; procedure EndDoc; procedure NewPage; p.. 2023. 8. 28.
델파이 인쇄 출력 1편 델파이 인쇄 출력 1편 TCanvas의 사용법 (Printer.Canvas) 용지에 뭔가를 그릴려면 Printer.Canvas부터 사용할 줄 알아야 합니다. TCanvas가 지원하지 않는 일부 함수를 제외하고는 대부분 Printer.Canvas를 이용해서 그릴것이기 때문입니다. TCanvas는 다음과 같은 구조를 가지고 있습니다. // 생성, 소멸 constructor Create; destructor Destroy; override; // 직선그리기 procedure LineTo(X, Y: Integer); procedure MoveTo(X, Y: Integer); procedure Polyline(const Points: array of TPoint); procedure PolyBezier(const.. 2023. 8. 25.
Drag and Drop(끌어서 놓기) Drag and Drop Drag and Drop(끌어서 놓기) 사용자가 마우스로 객체를 선택하여 다른 위치로 끌어서 놓는 인터랙션 기술을 의미합니다. 이를 통해 사용자는 애플리케이션 내의 요소를 직접 이동하거나 복사할 수 있습니다. 드래깅의 시작 모든 컨트롤에는 사용자가 컴퍼넌트의 드래깅을 시작했을 때 그것의 응답을 처리하는 방법을 지정하는 DragMode 프로퍼티가 있다. 만약 DragMode가 dmAutomatic 이라면 컨트롤 위에 커서를 놓고 마우스 버튼을 누르면 자동으로 드래깅이 시작된다. DragMode를 dmAutomatic로 설정하면 하면 일반적인 마우스의 작동을 방해 할 수 있기 때문에 DragMode를 디폴트값인 dmManual로 처리하는 방법을 선호하는 사람들이 많다. dmManua.. 2023. 7. 26.