본문 바로가기

delphi481

하드디스크 시리얼번호 변경 샘풀 하드디스크 시리얼번호 변경 샘풀 Re:How can I change serial number of Hard Disk ? Getting and setting a disks serial number - by Borland Developer Support Staff Technical Information Database TI475D.txt Getting and setting a disks serial number Category :General Programming Platform :All Product :Pascal All Description: The following program shows how to read and write the serial number on a disk drive. It use.. 2021. 8. 19.
델파이 USB 인식 델파이 USB 인식 USB를 꽂거나 뺏을 때 이벤트 발생 해당 이벤트가 발생하면 처리하는 함수 구현 방법 1. 이벤트 발생 시 파라미터로 받을 데이터 타입 선언 type TWMDeviceChange = packed record Msg : Cardinal; Event: Word; dwData: Longword; Result : LongInt; end; 2. 메인 Form 클래스 안에 함수 선언 TfrmMain = class(TForm) public procedure WMDeviceChange(var Msg: TWMDeviceChange); message WM_DEVICECHANGE; end; 3. 함수 기능 구현 procedure TfrmMain.WMDeviceChange(var Msg: TWMDevice.. 2021. 8. 18.
델파이 ESC키 누르면 폼닫기 델파이 ESC키 누르면 폼닫기 먼저 Form.KeyPreview = True 로 변경 후 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_ESCAPE then Close; end; 2021. 8. 16.
델파이 마우스 아래의 윈도우 핸들 구하기 델파이 마우스 아래의 윈도우 핸들 구하기 // 아래처럼 타이머를 사용하지 않고 마우스 후킹을 사용하면 좀더 간결한 프로그램을 만들 수 있습니다 // SetWindowsHookEx(WH_MOUSE,...) 를 찾아보세요 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private.. 2021. 8. 15.
델파이 마우스 위치의 컨트롤 델파이 마우스 위치의 컨트롤 // 마우스 포인터 위치의 콘트롤(콤포넌트)의 이름을 폼의 Caption에 // 출력하는 예로 아래의 Label1, Edit1, Memo1, Button1 등은 임의로 // 올려놓으시고 테스트 해보세요 // Panel 안에 있는 콘트롤도 구분할 수 있습니다 unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Memo1: TMemo; Button1: TButton; private { Private declarations } proce.. 2021. 8. 14.
델파이 하드디스크 시리얼 알아내기 델파이 하드디스크 시리얼 알아내기 function TF_Main.ReadHDDSerial: String; var MC, FL, PDW : DWord; begin GetVolumeInformation( nil, nil, 0, @pdw, mc, fl, nil, 0 ); Result := IntToStr(pdw); end; 2021. 8. 13.
델파이 모니터 전원 컨트롤 델파이 모니터 전원 컨트롤 // 전원상태를 절전모드로 유지한다. SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 1); // 전원을 원래상태로 둔다. SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1); // 전원을 아예 shut off 시킨다. SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2); 2021. 8. 12.
델파이 윈도우 메세지 받는 방법 델파이 윈도우 메세지 받는 방법 - 보내는 통신규약은 아래와 같다고 가정. SendMessage(FindWindow(nil, 'frmDebug'), WM_USER+123, 0, lParam(LongInt(메세지))); 혹은 PostMessage 1. TApplicationEvents 이용 2. 폼에디터에 TApplicationEvents 를 하나 박아넣음 3. 박아넣은 TApplicationEvents 의 OnMessage 함수를 만든다 아래와 같은 모양으로. procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin if Msg.message=WM_USER+123 then begin Memo1.Lines.. 2021. 8. 11.
델파이 WM_USER 메시지 델파이 WM_USER 메시지 윈도우 시스템은, 메시지구동 시스템이죠. 모든 이벤트는 메세지의 발생에 의해서 처리됩니다. 리스트박스 윈도우, 콤보박스윈도우등 모든 이런 각각의 윈도우들은 내부적 메시지처리에의해 원하는 동작을 하게 되는데, 이런 메시지외에 사용자 정의 메시지가 필요할때가 많죠. 예를들어, 콤보에 값이 변경될때, 부모에게 뿐 아니라, 다른곳에도 알려줄 필요가 있거나 할때요. ​ 그러면, 메시지의 값을 아무렇게나 정의해서 사용할수 없죠. #define WM_MY_TEST 100 처럼, 이런식으로 선언한다면, 이미 100이라는 값은 시스템이 내부적으로 예약해서 사용하는 메시지 상수일 수가 있습니다. 그래서, 사용자가 사용해도 되는 구역을 만들어뒀는데 그게 0x400 값부터 , 0x7FFF 까지 입.. 2021. 8. 10.
델파이 윈도우 폼에서 특정 부분 투명 델파이 윈도우 폼에서 특정 부분 투명 특정 폼의 내부가 투명하게 보이도록 하는 기능을 보여줍니다. 이 기능은 폼의 TransparencyKey 속성을 이용해 구현합니다. 간단한 캡처 프로그램을 만들다가 찾은 기능을 소개해볼까 합니다. 폼 안의 영역을 투명하게 해서 아래에 있는 UI가 보이도록 하는 기능입니다. 폼에 구멍을 뚫자 다음과 같은 작업을 해 준다 : 1. 폼에 Panel 개체를 배치하고, 배경색을 붉은 색으로 준다. (BackColor 속성을 Red로 설정한다.) 2. 폼의 TransparencyKey 속성을 Red로 준다. 투명화된 부분을 클릭하면, 클릭에 대한 이벤트로 현재 폼의 아래에 있는 윈도우가 받게 된다는 것을 알 수 있다. 2021. 8. 9.
델파이 쓰레드(Thread)의 기초 델파이 쓰레드(Thread)의 기초 쓰레드.. 아직 윈32하에서, 그리고 빌더에서(혹은 델파이에서 쓰레드)를 써보지 않으신 분들은 이 쓰레드라는 녀석에 대해 상당한 본능적인 공포를 가지고 계신 분도 있을겁니다. (사실 접니다... --) 도스시절에 멀티쓰레드 어플을 만드는 것은 거의 예술의 경지였죠. 아주 가끔씩 통신망에 올라오는 '멀티쓰레드 XXX' 혹은 '멀티태스킹 XXX'를 볼때마다 (여기서 XXX를 이상하게 해석하지 마세요..) 제 눈은 존경과.. 시기와.. 경외감에 차다 못해 두려움마저... 흑흑~~~ 하쥐만~! 지금은 X나 X나(포유류 이름) 맘만 먹으면 아무라도 쓰레드를 만들고 \또 재밌게 갖고 놀다가 없애버릴 수 있는 아주 부담없는 개념이 되었죠. 물론 api 수준의 쓰레드 지원도 볼만합니.. 2021. 8. 7.
델파이 레코드 클래스 성능 비교 델파이 레코드 클래스 성능 비교 전통적으로 구조체는, 그러니까 c++의 스트럭트는 변수들만 담을 수 있어 왔다. 그러나 최근의 델파이나 .넷은 구조체에 프라퍼티와 메떠드도 담을 수 있게 되어서 구조적으로 클래스와 차이가 없어졌다. 그러나 기능적으로는 이들 사이에 큰 차이가 있는데 구조체는 밸류 타입이고 클래스는 레퍼런스 타입이다. 일반적으로 구조체보다는 클래스를 쓰는 게 좋다. 구조체를 메떠드의 매개변수로 설정하거나 아래 예제처럼 List.Items로 접근하면 이 값이 내부적으로 복사되므로 부하가 커진다. 주소로 직접 접근할 수 없으니 일단 가져다 놓고 쓰는 거다. 물론 매개변수 앞에 var를 붙이거나 리스트를 아래 예제처럼 이용하면 이런 문제를 피할 수 있기는 하다. 클래스는 레퍼런스 타입이므로 포인터.. 2021. 8. 5.
델파이 TDictionary / TObjectDictionary 델파이 TDictionary TObjectDictionary 사용 완료후 아이템 메모리 해제 델파이 2009에 새로 추가된 TDictionary 클래스 입니다. 우선 클래스는 Generics.Collections 에 들어 있습니다. 소스를 보시면 TDictionary 이런 형태로 정의가 되어 있습니다. 사용법은 hash table과 거의 흡사하다고 보시면 됩니다. key값과 value가 변경될때 이벤트도 발생 시켜 주기 때문에 이벤트를 연결해서 사용할 수도 있습니다. hash table과 검색 속도를 비교해 봤는데 데이터가 많아질수록 이 클래스가 빨랐습니다. 뭐 hash table도 데이터가 많아질때 좋은 속도를 낸다는 점에서는 비슷하기는 하지만 어쨌든 제가 테스트한 hash table과 Dictiona.. 2021. 8. 4.
델파이 클래스 메소드 사용방법 델파이 클래스 메소드 사용방법 ( 1 ) 아래와 같이 class를 하나 만들어봅니다. * 일반 메소드는 function, procedure로 시작하지만 클래스 메소드는 function, procedure 앞에 class라고 붙이기만 하면 됩니다. ( 2 ) 위에서 만든 클래스를 사용하는 예제 프로그램을 작성해봅니다. ( 3 ) 실행 결과입니다. 간단한 예제를 통해서 일반 메소드와 class 예약어를 함수나 프로시져 앞에 붙인 클래스 메소드 (Class Method)의 차이점을 파악해봤습니다. 보통 class를 선언할 때는 TMyClass라고 T를 앞에 붙이는데 간혹 어떤 소스를 붙이면 인스턴스 생성 없이 T가 붙은 클래스의 메소드를 바로 호출하는 게 보입니다. 이런 경우는 클래스 메소드를 선언해놓고 호출.. 2021. 8. 3.
델파이의 클래스 헬퍼(helper) 델파이의 클래스 헬퍼(helper) 델파이의 최근 버전에 추가되었지만 개발자들이 잘 모르고 있는 기능들이 꽤 많은데요. 숙련된 델파이 개발자들까지도 델파이 7 이하까지의 문법에만 익숙한 경향이 있습니다. 하지만 구버전 문법으로 구버전처럼 사용한다면 최신 버전을 사용하는 장점이 반감되지 않겠습니까. 그래서, 델파이 개발자들이 잘 모르고 있는 아주 유용한 기능들을 시간이 되는 대로 하나씩 소개해볼까 합니다. 이번에 소개하는 클래스 헬퍼는 델파이 2006에서 추가된 언어 기능으로, 기존의 클래스를 수정하지도 상속하지도 않고 클래스의 기능을 확장할 수 있게 해줍니다. 클래스를 많이 다루는 경력 개발자분들은 이 말만 듣고도 우와~ 할 것 같습니다. 이런 필요가 있는 경우가 꽤 흔하거든요. 클래스 헬퍼 자체도 하나.. 2021. 8. 2.
Delphi 간단하게 키보드이벤트 발생하기 Delphi 간단하게 키보드이벤트 발생하기 윈도우API를 이용하여 키보드를 간단하게 제어해 보겠습니다. Keybd_Event(Ord('K'), MapVirtualKey(Ord('K'), 0), 0, 0); Keybd_Event(VK_ESCAPE, MapVirtualKey(VK_ESCAPE), 0), 0, 0); //첫번째 파라미터 : 키보드의 가상 키코드 //두번째 파라미터 : 키보드의 하드웨어 스캔코드 //세번째 파라미터 : 키보드의 상태제어 //참조 https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-keybd_event 키보드 클릭 Keybd_Event(VK_ESCAPE, MapVirtualKey(VK_ESCAPE), 0), .. 2021. 7. 26.
초를 시간 분 초 형식으로 리턴 초를 시간 분 초 형식으로 리턴 //초를 입력하면 0시간 0분 0초 식으로 리턴한다 //ex: 4600 -> 1시간 16분 40초 function GetTimeToStr(sec : double) : string; function GetDigit(num : integer):string; var sss : string; begin sss := inttostr(num); if length(sss) = 1 then result := '0' + sss else result := sss; end; function LeftStr(const Str: string; Size: Word): string; begin LeftStr := Copy(Str,1,Size) end; var rsec, hhour, mmin, ssec.. 2021. 7. 22.
델파이 RTF (Rich Text Format) 사용방법 델파이 RTF (Rich Text Format) 사용방법 서식있는 텍스트 형식 의 약자인 RTF 란? 서식있는 텍스트 파일과 일반 텍스트 파일의 혼합 텍스트 파일과 달리 RTF 파일은 굵게, 기울임 꼴, 밑줄, 글 머리 기호, 다른 글꼴 및 텍스트 양쪽 맞춤과 같은 일부 서식 지정 기능을 제공합니다. 그러나 전체 워드 프로세서에있는 모든 기능을 제공하지는 않습니다. RTF 편집기의 예는 Microsoft WordPad입니다. 그러나 모든 텍스트 또는 워드 프로세서 프로그램은 RTF 문서를 만들 수있는 위에서 언급 한 서식 지정 기능을 사용하여 문서를 만들 수 있습니다. 일반 텍스트를 RTF 파일로 변환하는 방법 WordPad 또는 Microsoft Word와 같은 RTF 편집기에서 파일 일반 텍스트 파일.. 2021. 7. 21.
델파이 JSON to Object 한줄 델파이 JSON to Object 한줄 uses REST.JSON; // Also new System.JSON TFoo = class private FFee : Integer; FFoo : string; published property Foo : String read FFoo write FFoo; property Fee : integer read FFee write FFee; end; procedure TForm1.Button1Click(Sender: TObject); var Foo: TFoo; begin Foo := TFoo.Create; try Foo.Foo := 'Hello World'; Foo.Fee := 42; Memo1.Lines.Text := TJson.ObjectToJsonString(F.. 2021. 7. 20.
델파이 프로시저와 함수 델파이 프로시저와 함수 https://youtu.be/gIbjirw-UUQ 독립적인 문장(프로그램 코드) 블록, 코드를 독립(분리)하고 재사용 가능 프로시저 procedure 프로시저이름(매개변수 목록); { 선언부 : 구현부에서 사용할 변수,상수,타입 지정 } begin { 구현부 } end; porcedure TForm1.WriteLog(AValue: string); var S: string; begin S := FormatDateTime('HH:NN:SS', Now) + ' ' + AValue; Memo1.Lines.Add(S); end; begin...end 사이의 구현부 실행, 매개변수로 받은 데이터 사용 가능 구현부에서 사용할 변수(var), 상수(const), 타입(type) 선언부에 선언 .. 2021. 7. 19.