본문 바로가기

분류 전체보기1065

델파이 포인터 (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.
델파이 포인터 (Pointer) 4편 델파이 포인터 (Pointer) 4편 4. 포인터 관련 함수 지금까지 한 것만으로는 포인터 변수를 어디에 어떻게 쓰는지 상당히 궁금할 것이다. 포인터 변수의 실제 응용은 다음에 다루기로 하고 여기서는 일단 포인터 변수에 관련된 나머지 사항에 대해 좀 더 알아 보기로 하자. 물론 지금까지 이해한 것만으로도 동적 자료 구조를 대충 구현할 수 있지만, 이 절에서 설명하는 내용을 이해하면 프로그램을 작성할 때 도움이 많이 될 것이다. 이 절에서 설명할 내용은 좀 전문적이고 하드웨어나 어셈블리어에 대한 기초지식을 요구하므로, 필요하다면 어셈블러 서적을 참조해 가면서 보기 바란다. 1) IBM PC 의 메모리 구조 포인터 형은 메모리에 저장된 다른 자료가 있는 곳을 가리키는 형이다. 그런데 그 포인터 변수가 어디를.. 2023. 8. 8.
델파이 포인터 (Pointer) 3편 델파이 포인터 (Pointer) 3편 3. 포인터 변수에 대한 연산 포인터는 다른 변수를 가리키는 값이기 때문에, 포인터에 대한 연산은 일반 자료에 대한 연산과는 상당히 다르다. 이것을 이해하지 못하면 포인터를 이용하는 프로그램을 짤 수 없을 뿐더러 허투루 짰다가는 프로그램이 폭주하기 십상이다. 이 절에서는 포인터를 이용한 연산의 기본 개념을 잡아 보기로 한자. 포인터를 이용할 때는 항상 포인터가 가리키는 값과 포인터 그 자체를 구분하는 것이 매우 중요하다. 예를 들어 var p, q : ^Integer; 을 생각해 보자. New(p); New(q); p^ := 10; q^ := 20; 위 문장은 먼저 p 와 q 에 기억장소를 할당한다. 그런 다음 p 가 가리키는것 (p^) 에 10 을 지정하고, q 가.. 2023. 8. 7.
델파이 포인터 (Pointer) 2편 델파이 포인터 (Pointer) 2편 기억 장소의 할당과 해제 1) New 와 Dispose 첫번째에서는 포인터 변수를 선언하기만 하고 그것이 가리키는 것에 대해서는 따로 언급하지 않았다. 그래서 포인터 변수를 선언하면 자동으로 그것이 가리키는 것도 같이 생긴다고 생각하는 사람들이 있는데, 절대로 그렇지 않다. 첫번째에서 p 를 선언하고 곧장 p^ 를 썼지만, 실제로 그렇게 하면 십중팔구 시스템이 폭주할 것이다. 아까도 말했지만 포인터 변수는 다른 어떤 곳을 가리키는 값을 가진다. 포인터 변수를 처음 선언했을 때 그 값이 무엇인지 알 수 없다. 언뜻 생각하면 처음 선언했을 때 nil 이 될 것 같지만, 실제로는 어떤 값을 가지고 있으나 이보다 더욱 중요한 것은, 실제로 p 가 가리키는 것 (p^) 이 존.. 2023. 8. 4.
델파이 포인터 (Pointer) 1편 델파이 포인터 (Pointer) 1편 포인터형을 이용한 자료 구조를 흔히 동적 자료 구조하고 하는데, 이것은 정적인 자료 구조인 배열이나 레코드 등의 자료형의 크기가 컴파일 시에 이미 결정되어 할당되는데 비하여 포인터를 이용한 자료형은 프로그램의 수행 중에 크기를 바꿀 수 있기 때문에 붙여진 이름이다. 동적 자료 구조는 흔히 고급 프로그래밍 언어를 배우면서 자칫 넘지 못하는 장애물이다. 여기서는 포인터의 기본적인 개념과 간단한 응용 사례를 다룬다. 1. 포인터의 개념 1) 왜 동적인 자료 구조를 이용해야 하는가? 왜 동적인 자료 구조를 이용해야 하는가? 이에 대한 대답을 얻기 위해 리스서에 따라 늘어 놓은 것이다. 따라서 리스트는 다음과 같이 하나의 배열로 표현할 수 있을 것이다. var List : a.. 2023. 8. 3.
태스크바 (taskbar) 에서 숨기기 태스크바 (taskbar) 에서 숨기기 To do this you will need to: 1.Select the View -> Project Source, from Delphi's main menu. 2.Add the Windows unit to the uses clause. 3.Add Application.ShowMainForm := False; to the line after "Application.Initialize;". 4.Add: ShowWindow(Application.Handle, SW_HIDE); to the line before "Application.Run;" Your main project source file should now look something like this: pro.. 2023. 8. 1.
시스템 날짜바꾸기 시스템 날짜바꾸기 방법 1 시스템의 날짜를 바꾸는 방법은 아래와 같이 윈도우 API를 사용하면 간단히 바꿀수 있습니다. procedure TForm1.ChgSysDateTime(ADateTime: TDateTime); var sys_time: TSystemTime; begin sys_time.wYear := StrToInt(FormatDateTime('yyyy', ADateTime)); sys_time.wMonth := StrToInt(FormatDateTime('m', ADateTime)); sys_time.wDay := StrToInt(FormatDateTime('d', ADateTime)); sys_time.wHour := StrToInt(FormatDateTime('h', ADateTime)); .. 2023. 7. 27.
Drag and Drop(끌어서 놓기) Drag and Drop Drag and Drop(끌어서 놓기) 사용자가 마우스로 객체를 선택하여 다른 위치로 끌어서 놓는 인터랙션 기술을 의미합니다. 이를 통해 사용자는 애플리케이션 내의 요소를 직접 이동하거나 복사할 수 있습니다. 드래깅의 시작 모든 컨트롤에는 사용자가 컴퍼넌트의 드래깅을 시작했을 때 그것의 응답을 처리하는 방법을 지정하는 DragMode 프로퍼티가 있다. 만약 DragMode가 dmAutomatic 이라면 컨트롤 위에 커서를 놓고 마우스 버튼을 누르면 자동으로 드래깅이 시작된다. DragMode를 dmAutomatic로 설정하면 하면 일반적인 마우스의 작동을 방해 할 수 있기 때문에 DragMode를 디폴트값인 dmManual로 처리하는 방법을 선호하는 사람들이 많다. dmManua.. 2023. 7. 26.
델파이 컴포넌트(Component) 마무리 델파이 컴포넌트(Component) 마무리 RAD의 특징이 바로 프로퍼티 '+' 표시가 붙은 프로퍼티 만들기 이번에는 프로퍼티의 이름앞에 '+'가 붙어서 내용이 전개되는 것을 어떻게 처리하는지 보도록 합시다. ① 집합형..(set) 우선 폼에 있는 BorderIcons를 보세요.. 이녀석도 이름앞에 '+'가 있죠? 두번클릭하면 내용이 전개가 되면서 이름앞에 '-'로 바뀌지요. 앗.. 그런데 이녀석은 Font등에서 보던 녀석과는 약간 다른 특성이 있네요. 내용들이 모두 Boolean형으로 되어있지요? 그럼.. 이녀석의 헬프를 보도록 합시다. type TBorderIcon = (biSystemMenu, biMinimize, biMaximize, biHelp); TBorderIcons = set of TBor.. 2023. 7. 25.
델파이 컴포넌트(Component) 7편 델파이 컴포넌트(Component) 7편 오브젝트 인스펙터(Object Inspector) 프로퍼티 탭을 보시면 어떤 녀석은 그냥 edit으로 되어 있구 어떤 녀석은 ComboBox로, 또 어떤녀석은 이름앞에 '+'가 붙어서 내용을 전개해서 볼수 있도록 되어 있음을 볼수 있을겁니다. 또, 특별한 경우 '...'버튼을 눌러서 대화상자를 호출해서 프로퍼티를 조작하는 경우도 있죠.. 그밖에 프로퍼티에 대해서 자세히 알아보도록 합시다. 우선 Edit로 나타나는 경우에는 어떤값을 입력할수 있었나요? Name, Caption, Hint등의 경우 문자를 입력할수 있게 됩니다. Left, Right, Tag등의 경우 숫자만을 입력할수 있게 되죠.. 거꾸로 생각하면 오브젝트 인스펙터에 Edit으로 나타나게 하려면 프로퍼.. 2023. 7. 24.
델파이 컴포넌트(Component) 6편 델파이 컴포넌트(Component) 6편 프로퍼티(Property) 델파이는 참으로 재미있는 방법으로 클래스를 지원합니다. 그 중 하나가 바로 프로퍼티라는 녀석이죠. OOP의 몇가지 대표적인 특징중에 캡슐화(정보은닉)이라는 것이 있죠? OOP에서는 클래스 내부에서 다루는 데이터는 밖으로 드러나지 않아야 된다는 것이죠 내부에서 다루는 변수는 직접 조작할수가 없고, 함수를 통해서만이 값을 참조하고 바꿀수 있게 되어있습니다. 예를 들면 클래스 내부에서 쓰이는 변수중에 'fMyAge'라는 것이 있다구 합시다. 전형적인 C++언어에서는 fMyAge라는 녀석을 private안에 숨겨둘 것입니다. 그리고 다음과 같은 함수로 fMyAge를 조작할수 있도록 하겠죠. C++에서의 변수접근법 i := GetMyAge(); .. 2023. 7. 21.
델파이 컴포넌트(Component) 5편 델파이 컴포넌트(Component) 5편 이번에는 이벤트 핸들러에 들어가는 매개변수의 형(type)과 갯수를 마음대로 바꿔서 사용할수 있도록 해봅시다. 우선 TNotifyEvent의 정의부터 보도록 합시다. type TNotifyEvent = procedure (Sender: TObject) of object; 위의 형식에다가 그대로 대입만 해주면 되겠지요? 참, 참고로 '... of object'를 보도록 하죠. 지금까지 함수포인터 얘기를 자주 했지요? 그런데 'of object'는 왜 붙어야 할까요? 결론부터 얘기하자면 'of object'를 덧붙임으로서 TNotifyEvent는 객체(object)의 함수포인터가 됩니다. 즉 일반 함수포인터의 선언시에는 'of object'가 빠지게 됩니다. 그럼 우.. 2023. 7. 20.
델파이 컴포넌트(Component) 4편 델파이 컴포넌트(Component) 이벤트 추가 우선 이벤트를 받아오는 함수에 대해서 알아야 할 것입니다. WM_MOUSEMOVE이벤트가 발생할때 반응하는 함수를 만들어 보도록 합시다. 우선 윈도우 메시지를 처리하는 함수를 다음은 Controls.pas의 함수의 선언입니다. procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE; 지금까지 보아오던 함수와는 조금 다르죠? 뒤에 있는 'message WM_MOUSEMOVE'는 'WM_MOUSEMOVE'이벤트를 받아서 처리를 하겠다는 의미일테구요. 매개변수로 들어간 Message는 처리할 메시지의 값이 들어가겠지요? 그럼 이 함수의 실체를 보도록 합시다 procedure TControl... 2023. 7. 19.
델파이 컴포넌트(Component) 3편 델파이 컴포넌트(Component) 3편 속성 우선 우리의 버튼에 특성을 주어 봅시다. 가장 눈에 잘띄는 속성은 Caption일 겁니다. constructor TMyButton.Create( AOwner : TComponent ); begin inherited Create(AOwner); // 생성시에 할일... Caption := '눌러봐!'; Font.Name := 'fixedsys'; Font.Size := 9; Width := 200; Height := 150; end; 이상과 같이 Create함수를 바꿔보고 컴포넌트를 다시 컴파일 합시다. 컴포넌트의 컴파일은 패키지에서 'Compile'버튼을 누르면 됩니다. 패키지는 기본적으로 'Dclusr30.dpk'를 사용하게 되는데 'Component'메뉴.. 2023. 7. 18.
델파이 컴포넌트(Component) 2편 델파이 컴포넌트(Component) 2편 생성(Create)과 해제(Destroy) 솔직해 컴포넌트는 이 두가지만 잘 해주면 거의 끝난것이라고 할수 있습니다. 많은 분들이 이 두가지를 잘못해서 컴포넌트와의 싸움에서 쓴잔을 마시고 계신줄 알고 있습니다. 가령 폼위에 컴포를 올려놓기는 했는데 삭제하려면 엑세스가 바이얼레이션한다는 보기싫은 메시지를 토해놓는다던지, 델파이가 종료가 안된다던지, 혹은 아주 보기 드믈게 윈도우가 다운된다던지 하는 일의 대부분은 Create와 Destroy를 잘못해서 생기는 일입니다. 하지만 절대 어려운 일이 아닙을 미리 밝혀드립니다. 먼저 강좌에서 만든 'MyButton.pas'를 봅시다. 많이 보던 코드들이 나와 있죠? 처음 보는 함수가 하나 만들어져 있음을 볼수 있습니다. 바로.. 2023. 7. 17.
델파이 컴포넌트(Component) 1편 델파이 컴포넌트(Component) 1편 델파이에서의 컴포넌트(Component)는 재사용 가능한 UI 요소를 나타내는 객체입니다. 컴포넌트는 시각적인 디자인 요소와 그에 대한 동작 및 속성을 포함할 수 있으며, 델파이 애플리케이션 개발에서 중요한 역할을 합니다. 델파이의 컴포넌트는 시각적인 요소를 담당하는 시각 컴포넌트(Visual Component)와 비시각적인 요소를 담당하는 비시각 컴포넌트(Non-Visual Component)로 구분할 수 있습니다. 시각 컴포넌트(Visual Component) 시각 컴포넌트는 사용자 인터페이스(UI)의 일부를 구성하는 요소로, 폼(Form) 위에 배치되어 시각적으로 표현됩니다. 버튼, 레이블, 리스트 박스, 텍스트 상자 등과 같은 UI 컨트롤들이 시각 컴포넌트.. 2023. 7. 14.