본문 바로가기

Delphi134

Delphi Open ToolsAPI (3) Delphi Open ToolsAPI 모듈의 정의 모듈을 쉽게 표현하자면 대표 파일을 가진 편집 단위라고 보면 된다. 프로젝트 그룹, 프로젝트, 유닛, 폼유닛등이 모두 모듈이다. 하나 혹은 그 이상의 파일이 하나의 모듈을 구성한다. 폼이 있는 유닛이 대표적인 경우인데 예를들어 Unit1.pas는 Unit1.dfm와 함께 두개의 파일로 구성되어 있으며 대표파일은 Unit1.pas다. 프로젝트나 프로젝트 그룹등도 하나의 모듈로 취급된다. 모듈을 찾거나 여는 등의 작업은 파일명을 통해 이루어지는데 이를 대표파일이로 정의하자 (이를 지칭할만한 뚜렷한 이름이생각나지 않는다) . 대표파일로는 *.pas, *.bpg, *.dpr,*.dpk가 있다. 델파이에 프로젝트 그룹과 프로젝트가 로드된 상태에서 모듈의 파일명을 .. 2023. 12. 26.
Delphi Open ToolsAPI (2) Delphi Open ToolsAPI Delphi Open ToolsAPI 메뉴의 OnClick등의 이벤트는 오브젝트의 메쏘드를 필요로 한다. 따라서 무작정 빈 유닛을 기준으로 삼아 작성하기 보다는 DataModule을 기반으로 하는 것이 좋다. 혹은 자신이 아예 새로운 오브젝트 클래스를 작성할 생각이라면 그렇게 해도 좋다. 여하간 이벤트가 필요하거나 혹은 컴퍼넌트가 필요한 경우 메인모듈은 오브젝트를 기반으로 작성하는 것이 좋다. 필자가 제시하는 방법은 DataModule이 메인 모듈이 되고 기타 옵션적용등을 위해 필요한 폼은 메인모듈에서 생성해서 보여주는 것이다. 될 수 있으면 Form을 메인모듈로 잡지 않는 것이 좋다. DataMoudle 보다 리소스를 더 많이 잡아먹을 것이기 때문이다. 다음의 사항.. 2023. 12. 19.
Delphi Open ToolsAPI Delphi Open ToolsAPI 자고 일어나면 빌딩이 선다. 이 새삼스럽지 않은 기적은 철골구조와 조립식 컨크리트에 의해 이루어진다. 철골이 올라가는가 하면 금새 벽이 붙여지고 며칠 안가 빌딩이 완성된다. 이런 조립형태의 접근방식은 빠른 결과물을 보게 해준다. 이런 조립형태의 개발방식은 RAD(고속개발)툴의 근간을 이루고 있다. 델파이에서 조립식 컨크리트의 역할은 컴퍼넌트가 담당한다. 그리고 굳건하게 이런 컴퍼넌트 중심의 개발환경을 뒷받침하고 있는 철골구조가 바로 IDE(통합개발환경)이다. 보다 빠르고 시각화된 개발환경을 제공하기 위해서 일찌감치 IDE(통합개발환경)라는 위대한 환경을 제시해 왔다. IDE를 통해 단순 컴파일러가 아니라 개발툴이라는 당시로서는 진보적 개념을 처음 도입한 것은 볼랜드였.. 2023. 12. 14.
윈도우 사용자 이름 알아내기 윈도우 사용자 이름 알아내기 function GetCurrentUserName : string; const cnMaxUserNameLen = 254; var sUserName : string; dwUserNameLen : DWord; begin dwUserNameLen := cnMaxUserNameLen-1; SetLength(sUserName, cnMaxUserNameLen); GetUserName(PChar(sUserName), dwUserNameLen); SetLength(sUserName, dwUserNameLen); Result := sUserName; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(GetCurren.. 2023. 11. 17.
최상위 윈도우 얻기 최상위 윈도우 얻기 현재 윈도우상에서 최상위에 떠있는 이름을 알려주는 함수 function OKTopWindowText: string; var WinName: array[0..144] of char; begin FillChar(WinName, 145, 0); GetWindowText(GetForegroundWindow, WinName, 144); SetLength(Result, StrLen(WinName)); Result := StrPas(WinName); end; 2023. 11. 1.
델파이 숫자 한글변환 델파이 숫자 한글변환 첫번째 함수 function IntToHanguel( Value: Int64 ) : String; const NumberChar: array['0'..'9'] of String = ( '영','일','이','삼','사','오','육','칠','팔','구' ); LevelChar: array[0..3] of String = ( '', '십','백','천' ); DecimalChar: array[0..5] of String = ( '','만','억','조','경','현' ); var S : String; UseDecimal : Boolean; i, Level: Integer; begin Result := ''; S := IntToStr( Value ); UseDecimal := Fals.. 2023. 10. 27.
델파이 메소드 포인터(Method Pointer) 델파이 메소드 포인터(Method Pointer) 프로시저 형 (Procedural Type) : C 언어의 함수 포인터와 유사한 개념. 정수나 문자열 변수 뿐 아니라 프로시저를 변수로 사용할 수 있다. type TestProc = procedure (var Param: Integer); 다음과 같이 선언된 프로시저 형의 변수 TestProc이 있다. 이것은 레퍼런스에 의해 전달되는 정수 파라미터의 프로시저 형의 변수를 뜻한다. 이 프로시저 형은 정확하게 같은 파라미터를 갖는 루틴이면 어느 것과도 호환이 된다. procedure DoubleProc (var Value: Integer); begin Value := Value * 2; end; procedure TripleProc (var Value: In.. 2023. 10. 24.
델파이 동적 2차원 배열 델파이 동적 2차원 배열 델파이 동적 2차원 배열 런타임 시에 크기를 조정할 수 있는 배열을 의미 2차원 배열을 저장할 변수를 선언합니다. 예를 들어, 다음과 같이 선언할 수 있다 var MyArray: array of array of Integer; 배열을 생성하려면 SetLength 함수를 사용한다. 예를 들어, 3x3 크기의 배열을 생성하려면 다음과 같이 할 수 있다 SetLength(MyArray, 3, 3); 배열에 접근하려면 행과 열 인덱스를 사용한다. 예를 들어, 배열의 원소에 접근하려면 다음과 같이 할 수 있다 MyArray[0][0] := 1; MyArray[0][1] := 2; MyArray[1][0] := 3; // 이런 식으로 계속해서 배열을 초기화할 수 있습니다. 배열 크기를 동적.. 2023. 9. 25.
델파이 Parameter 델파이 Parameter Parameter 일반적으로 함수나 메서드로 전달되는 값이라고 한다. 이것은 함수나 메서드가 실행될 때 필요한 정보를 전달하고 결과를 반환하는 데 사용되며, 파라미터는 함수나 메서드의 정의에 포함되며 해당 함수나 메서드를 호출할 때 전달해야 하는 값들을 명시적으로 지정한다. 파라미터는 함수나 메서드의 매개변수로도 알려져 있다. function myfunc ( a : String ; const b : String; var c : TButton; out d : integer; ) : integer; 1) 'a' : 아무 선언없이 쓰인 경우로 'a'는 function 내에서 선언된 local 변수처럼 사용된다. 2) const 'b' : function 내에서 b는 상수로 사용된다. .. 2023. 9. 22.
델파이 Application 델파이 Application TApplication TApplication type 으로, 프로그램 그 자신으로 생각할 수 있다. Delphi 어플리케이션의 주요 실행 및 관리를 담당합니다. Delphi는 GUI (그래픽 사용자 인터페이스) 기반 애플리케이션을 개발하기 위한 강력한 통합 개발 환경(IDE)이며, TApplication은 이 환경에서 GUI 애플리케이션을 작성할 때 핵심 역할을 한다. Dpr(프로젝트 파일) 과 개발환경 내 Project -> options -> Application에서 Title, Help File, Icon 등을 지정해 줄 수 있다. [일반사항] - 전체중 일부로 특정한 것만을 기록했다. Property - ExeName : String ; - 경로를 포함한 실행파일 명.. 2023. 9. 21.
델파이 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.
델파이 Owner 와 Parent 델파이 Owner 와 Parent 델파이 "Owner"와 "Parent"는 객체 지향 프로그래밍 개념 중에서 객체 간의 관계를 정의하는 데 사용되는 중요한 개념이다 Owner (소유자) "Owner"는 주로 컴포넌트와 관련이 있습니다. 컴포넌트는 Delphi 응용 프로그램에서 재사용 가능한 코드 조각을 나타내며, 시각적 또는 비시각적으로 폼 또는 다른 컴포넌트에 배치될 수 있다. Owner 컴포넌트는 다른 컴포넌트를 소유하고 관리하는 컴포넌트입니다. 예를 들어, 폼(Form)은 여러 컴포넌트를 소유하고 해당 컴포넌트들을 폼 위에 배치합니다. Owner-ownee(소유자-소유물) 관계에서, 소유자 컴포넌트가 소유물 컴포넌트의 생명주기를 관리하며, 소유물이 소유자를 참조할 수 있습니다. 주요 메서드와 속성 .. 2023. 9. 13.
기간사이 특정요일 개수알아내기 기간사이 특정요일 개수알아내기 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.
델파이 포인터 (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.