delphi481 델파이 포인터 (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. 델파이 암호화 델파이 암호화 데이터의 암호화는 보안의 가장 기본적인 형태이다. 그 동안 보안은 어느 군사작 전에서나 이용되는 용어로 여겨진게 사실이지만, 갈수록 시스템이 외부에 노출되 는 (특히 인터넷등의 네트워크망에서) 상황에서 데이터의 적절한 암호화는 아주 중요한 사안이 되고 있다. 여러분이 주변에서 쉽게 구할 수 있는 암호화 알고리즘들이 있고, 그것은 완벽에 가깝다. 여러분이 사용하고 있는 ID의 암호 역시 그런 알고리즘에 기반을 두고 암호화된다. 하지만, 이런 것들은 암호화에만 치중한 것으로 해독기능이 없다. 즉, 암호화 된 데이터를 다시 원본 데이터로 추출해 내는 역변환은 불가능한 것이다. 시스템의 운영자도 해당 사용자 ID의 암호를 변환해 원본 암호를 뽑아내는 것이 불가능하다. 여러분이 ID를 입력했을 때,.. 2023. 7. 13. 가상키 코드(Virtual Keys) 가상키 코드(Virtual Keys) OnKeyDown등에서 이용되는 Key값은 VK_* 형태를 지니는 상수로 정의되어 있다. 이 상수들 중 특정 키 값들을 몰라 해메는 경우가 있어 정리해 본다. 자판의 'A'에서 'Z'까지의 키보드는 VK_A부터 VK_Z까지로 구성되고, 자판의 '0'에서 '9'까 지의 값은 VK_0에서 VK_9와 같다. 이 값들은 문자의 ASCII값과 동일하다. 그 외 나머지 값은 아래와 같다. 이중 VK_Copy등 이용되지 않는 키 값(즉, 키보드로 누 를 수 없는 값)도 있다. 상수의 이름이 그대로 자판의 이름을 나타내므로 별도의 설명은 붙이지 않았다. VK_LButton = $01; VK_RButton = $02; VK_Cancel = $03; VK_MButton = $04; V.. 2023. 7. 11. 가변 데이터의 저장 기법 가변 데이터의 저장 기법 혹시 이런 경우에 어떻게 하시나요? 우선 스트링을 10개를 저장해야 합니다. 물론 하나의 파일에 말이죠. 당연히 10개의 스트링의 길이는 가변이겠죠? 자.. 어떻게 하면 가변의 스트링을 파일에 저장하고 고스란히 불러올수 있을까요? 또 한가지 조건을 덧붙인다면 스트링의 갯수의 제한을 두지 않는다면... ^^. 어떻게든 방법이 있겠죠? 어떤방법을 동원하든지 해결을 할수 있겠지만 새로운 방법을 소개합니다. 아주 손쉽게 가변길이의 데이터를 저장하고 불러올수 있는 방법입니다. 첫번째 방법 1 컴포넌트를 저장하고 불러오는 기능을 약간 변형하는 것입니다. 즉 우리가 저장하려는 가변의 스트링을 컴포넌트의 프로퍼티로 놓게되면 컴포넌트를 저장할때 데이터도 함께 .. 2023. 7. 10. Hook(훅) SetWindowsHookEx Hook(훅) SetWindowsHookEx SetWindowsHookEx 함수는 Windows 운영 체제에서 훅(Hook)을 설치하기 위해 사용되는 함수입니다. 훅은 시스템 내에서 발생하는 이벤트를 감지하고 해당 이벤트에 대한 처리를 수행하는 데 사용됩니다. 예를 들어, 키보드 이벤트, 마우스 이벤트, 윈도우 메시지 등을 감지하고 원하는 동작을 수행할 수 있습니다. SetWindowsHookEx 함수는 다음과 같은 매개변수를 가지고 있습니다 idHook: 설치할 훅의 유형을 지정하는 매개변수로, 훅의 종류에 따라 다른 상수 값을 사용합니다. 예를 들어, WH_KEYBOARD는 키보드 이벤트를 감지하는 훅을 설치하는 상수입니다. lpfn: 훅 프로시저(Hook Procedure)로서 호출될 함수의 포인터.. 2023. 7. 7. 웹 브라우져 URL주소 실행 웹 브라우져 URL주소 실행 첫번째 방법 Windows API 함수 중 하나인 ShellExecute 함수를 이용합니다. 예제 uses ShellAPI; procedure OpenWebPage(const URL: string); begin ShellExecute(0, 'open', PChar(URL), nil, nil, SW_SHOWNORMAL); end; procedure TForm1.Button1Click(Sender: TObject); begin OpenWebPage('사이트 주소') end; 두번째 방법 제가 예전에 프로그램에서 특정 url 로 이동할때 shellexecute 를 사용했을텐데요. 더 간단한 방법이 있습니다. 볼랜드 사이트서 본겁니다. un.. 2023. 7. 6. 이전 1 ··· 4 5 6 7 8 9 10 ··· 25 다음