delphi481 델파이 Self 델파이 Self Self 일반적으로 method가 있는 object (예: Form에는 Create method가 있다)의 reference 이다. 객체 지향 프로그래밍에서 "self"는 주로 현재 객체(인스턴스)를 가리키는 특별한 키워드 또는 식별자이다. 일반적으로 method가 있는 object (예: Form에는 Create method가 있다)의 reference 이다. Delphi에서는 "self" 대신에 "Self"라는 예약어를 사용합니다. "Self"를 사용하여 현재 객체의 속성 및 메서드에 접근하거나 다른 객체와 구분하기 위해 사용됩니다. 예를 들면, Button1 := TButton.Create(Self); 위의 예와 같은 경우에 Self는 Button의 Owner인 Form을 가리킨다... 2023. 9. 20. 델파이 컨트롤 반투명 드래그 이동 델파이 컨트롤 반투명 드래그 이동 윈도우 탐색기에서 리스트뷰의 헤더부분을 드래그해보면 약간 반투명하게 움직이는 것을 볼수 있습니다. 또는 아이콘을 드래그 할때도 원래의 아이콘이미지가 반투명하게 보이고 투명한부분은 그대로 투명하게 보이는 것을 경험하셨을 겁니다. 이걸 델파이에서 구현하려면 어떻게 해야 할까요? 가장 쉽게 생각해 볼수 있는게 배경화면의 그림을 얻어와서 그 위에 반투명 처리를 해서 아이콘을 그려주고 이렇게 합성한 그림을 배경화면에 다시 그려주는 일을 해야 할겁니다. 하지만 그렇게 되면 드래그하는 일에 CPU가 쉴새가 없게 됩니다. 그러면 방법은 없을까요? 다행이도 델파이에는 이런 기능을 할수 있도록 준비된 녀석이 있습니다. 바로 TImageList라는 녀석이죠!! 사용법 1. 우선 TImage.. 2023. 9. 12. 기간사이 특정요일 개수알아내기 기간사이 특정요일 개수알아내기 function CountWeek(StartDate, EndDate : TDate; CheckWeek : Integer) : Integer; var DayNum, StartWeek : Integer; begin DayNum := Trunc(Int(EndDate - StartDate)); // MATH Unit 사용을 하지 않았을 경우 if StartDate > EndDate then StartWeek := DayOfWeek(EndDate) else StartWeek := DayOfWeek(StartDate); // StartWeek := DayOfWeek(Max(StartDate,EndDate)); // MATH Unit 사용시 Result := DayNum div 7; i.. 2023. 9. 11. 델파이 인쇄 출력 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. 델파이 포인터 (Pointer) 11편 델파이 포인터 (Pointer) 11편 데이터 좌표에 의한 수정 포인터 C/C++ int* pNum; // integer pointer char* pText; // char pointer .. *pNum = 123456; *pText = 'C'; Delphi pNum: ^integer; // integer pointer pText: ^Char; // char pointer ... pNum^ := 123456; pText^ := 'C'; 델파이와 포인터 델파이에선 C/C++ 과 달리 포인터 타입에 주의 하여야 합니다. C/C++ : 어떤 타입의 포인터이든 대입 가능 int* pNum; char* pText; ... pNum = pText; pText = pNum; Delphi : 다른 타입의 포인터를 대입.. 2023. 8. 24. 델파이 포인터 (Pointer) 10편 델파이 포인터 (Pointer) 10편 ShellApi 를 이용할때 윈도우에서 사용하는 언어인 'C' 와 델파이의 'Pascal'의 포인터 다루는 방법이 달라 많은 혼동(나만?)을 일으킵니다. 특히나 파스칼에서는 포인터방법이 여러가지가 있어 햇갈리기 아주 좋습니다. 해서 한번 정리하여 보았습니다. 예제는 폴더를 찾아 지정하는 SHBrowseForFolder 를 이용하는 것으로 하였습니다. 1. 버퍼를 이용하는 방법 var Buffer : array[0..255] of char; begin pszDisplayName:= @Buffer; ....... MessageBox(handle, Buffer, '', MB_OK); end; 2. pChar 를 이용하는 방법 : 'C' 와 유사하지요 var Buffer:.. 2023. 8. 23. 델파이 포인터 (Pointer) 9편 델파이 포인터 (Pointer) 9편 포인터의 이해 1 포인터를 쉽게 이해하기 위해선 어셈블러를 알고 있다면 금방알수 있습니다. 그렇지 않다면 메모리에 대한 계념 자체를 이해하고 있다고 해도 금방 알수가 있죠. 그러지 않다면 배열 에 대한 이해를 알고 있다면 도움이 됩니다. 메모리로 설명 하자면 (윈도우는 32 비트메모리를 쓰므로 32 트로 갑니당) 00000000 2023. 8. 22. 델파이 포인터 (Pointer) 8편 함수 포인터 unit MainFrm uses FrmInt type TFrmMain = class(TForm) private FWinForm: IWin32Form; .... implementation uses WinNTFrm, Win9xFrm; procedure TFrmMain.FormCreate(Sender: TObject); begin if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then FWinForm := TFrmWin9x.Create else if Win32Platform = VER_PLATFORM_WIN32_NT then FWinForm := TFrmWinNT.Create else raise Exception.Create('This application ca.. 2023. 8. 21. 델파이 포인터 (Pointer) 7편 델파이 포인터 (Pointer) 7편 procedure TForm1.MyProcedure; var AStr : ^string; begin AStr^ := 'SAMPLE'; ShowMessage(AStr^); end; 위의 예제는 AStr이 메모리에 할당되지 않아서 에러가 난다고했습니다. 그렇다면 메모리에 어떻게 할당을 해야 할까요? New라고 하는 함수(프로시져임)를 사용합니다. 델파이 New함수는 도움말을 보시면 아시겠지만 동적변수(포인터의 값을 의미)에 포인터를 할당하는 함수 입니다. 그러니까 위의 예제를 에러가 나지않도록 하려면 다음과 같이 한줄 추가 하면 되겠네요. procedure TForm1.MyProcedure; var AStr : ^string; begin New(AStr); { 2023. 8. 11. 델파이 포인터 (Pointer) 6편 델파이 포인터 (Pointer) 6편 기초 강좌 포인터란 무엇일까요? 포인터는 한마디로 가리킨다는 의미입니다. 쉽게 다음과 같은 예를 많이 들죠. 저도 포인터에 대한 상투적인 예를 간략히 들면 다음과 같습니다. 선생님께서 민영이네 집에 가정 방문을 가려고 합니다. 그런데 집의 위치를 잘 몰라서 민영이의 짝인 형철이에게 민 영의 집이 어딘지 물었습니다. 그러자 형철이는 '저기'라고 말하면서 손가락으로 민영의 집을 가리켰습니다. 자. 여기서 선생님은 민영의 집을 모르지만 민영의 집을 알고 있는 형철이를 알고 있습니다. 형철이는 민영의 집을 손가락으로가리키로 있는데 바로 형철이가 포인터인 셈입니다. 많은 사람들이 포인터를 이렇게 이해 시키더군요. 어쨌든 포인터의 개념은 이쯤하고 델파이에서 포인터를 사용하는 방.. 2023. 8. 10. 델파이 포인터 (Pointer) 5편 델파이 포인터 (Pointer) 5편 5. 변수의 주소 지정 변수를 어떤 특정 주소에 위치시키거나 또는 어느 주소를 특정 자료형 단위 (워드, 바이트)로 다루는 방법에 대해서 살펴보기로 한다. absolute 터보 파스칼에서는 메모리의 주소를 변수를 사용하여 선언할 때부터 지정할 수 있도록 하는 absolute 라는 예약어를 제공하고 있다. 다음의 선언문을 살펴보자. var Keyboard : Byte absolute $0000:$0417; 이와 같이 선언하면 Keyboard 라는 변수는 1바이트를 차지하는 변수로써, 그 위치는 세그먼트 $0000 에서 옵셋 $0417 에 위치하게 된다. 이 선언문은 다음과 같이 선언될 수 있다. var Keyboard : ^Byte; begin Keyboard := P.. 2023. 8. 9. 이전 1 ··· 3 4 5 6 7 8 9 ··· 25 다음