본문 바로가기

Delphi Tip/출력15

프린터 목록 불러오기 / 기본프린터 불러오기 프린터 목록 불러오기 / 기본프린터 불러오기 uses Printers, Messages; function GetDefaultPrinter : string; var ResStr : array[0..255] of char; begin GetProfileString('Windows','device','',ResStr,255); Result := StrPas(ResStr); end; procedure SetDefaultPrinter(NewDefPrinter : string); var ResStr : array[0..255] of char; begin StrPCopy(ResStr,NewdefPrinter); WriteProfileString ('windows', 'device', ResStr); StrCopy (.. 2023. 11. 24.
델파이 인쇄 출력 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.
퀵레포트 추가 설치 퀵레포트 추가 설치 1. Component 메뉴 - Install Package - Add 선택 2. 델파이 bin 폴더 안에 dclqrt70.bpl 을 선택하여 설치 2022. 1. 19.
퀵레포트 -> ITF 변환 및 이미지 정보 변경 퀵레포트->ITF 변환 및 이미지 정보 변경 이번 프로시저 만드는데 고생좀 했다.. 전반적인 이미지 스터디와 꼼수?로 배움; 퀵레포트 -> BMP변환-> 이미지 방향설정-> TIF 정보입력 -> 저장 2022. 1. 18.
델파이7 에서 퀵리포트 추가하기 델파이7 에서 퀵리포트 추가하기 델파이7 메뉴에서 Component를 선택하시고, 하부 메뉴에서 Install Package를 선택합니다.. 거기서 Add 버튼을 누르신후..Delphi7디렉토리 밑에 Bin 디렉토리 밑에 있는 화일들 중에서 dclqrt70.bpl을 선택하시면 퀵레포트가 등록이 됩니다 2022. 1. 17.
퀵레포트 밴드에 빈데이터 추가하기 퀵레포트 밴드에 빈데이터 추가하기 퀵레포트로 레포트를 만들 경우 데이타가 적게는 1개에서 몇백개까지 나올 경우가 있다... 문제는 이게 아니다 양식에 맞게 레포트를 만들게 되면 밴드 같은 경우 데이터 수만큼 생기고 바로 Footer가 나와 레포트 형식이 짧거나 아니면 넘어가는 현상이 일어난다 머..다른 방법이 있을 수 있겠지만...나만의 방식으로 위기를 모면(?) 했다 =============================================== 양식지 데이터 수가 20개일경우... 데이터가 20개 미만일 경우 데이터 수만큼 디테일 밴드에 나온 후 바로 짤리는 요상한 형식이 나와버린다 자! 일단 요렇게 해보쟈!!! 일단 나는 밴드를 디비로 보았다 15개 데이타가 있을 경우 나는 15개의 데이터에 .. 2022. 1. 14.