본문 바로가기

Delphi134

델파이 레코드 클래스 성능 비교 델파이 레코드 클래스 성능 비교 전통적으로 구조체는, 그러니까 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.
초를 시간 분 초 형식으로 리턴 초를 시간 분 초 형식으로 리턴 //초를 입력하면 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.
델파이 기본함수 델파이 기본함수 procedure read(v1,v2,v3....); procedure readln(v1,v2,v3...); 값을 입력받은 후 다음 행으로 이동 procedure write(v1,v2,....); procedure writeln(v1,v2...); 값을 출력한 후 다음 행으로 이동 function chr(x):char; x(아스키 코드값)에 해당하는 문자로 변환 function ord(x):integer; x(문자)에 해당하는 순서. 즉 아스키코드값 리턴 function int(X: Extended): Extended; 실수값의 소숫점이하를 버리고 정수부분만 취한다. Int(32.45) ← 32.0 function trunc(X: Extended): Int64; 실수값의 소숫점이하를 버리.. 2021. 7. 15.
델파이 GetLastError() 함수 델파이 GetLastError() 함수 Windows 시스템 함수를 호출하는 과정에서 오류가 발생하면 NULL을 리턴하지만 그 원인은 파악할수 없다. 원인을 파악하기 위해서는 시스템 함수뒤에 GetLastError 함수를 호출하여 그 함수의 오류에 해당하는 에러 코드를 리턴(정상일시 0 리턴)받아서 이를 MSDN 에서 참조해야 한다. 하지만 여기서 더 나아가 에러 코드를 해석해 문자열로 만들어주는 함수를 사용한다면 MSDN 을 참조하는 번거로움을 덜 수 있다. ShowMessage(SysErrorMessage(GetLastError)); 2021. 7. 14.
델파이 문자열 관련 함수 델파이 문자열 관련 함수 AnsiCompareText SysUtils Unit 문법 function AnsiCompareStr(const S1,S2:string):Integer; 두 개의 문자열 S1과 S2를 비교하되 대소문자를 구분하지 않고 비교한다. S1과 S2문자열이 같으면 0을 리턴하며 S1이>면 음수의 값을 리턴하며 S1>S2이면 양수를 리턴한다. 문자열끼리의 비교는 문자열을 이루는 각 문자의 문자 코드를 비교하여 수행된다. AnsiLowerCase SysUtils Unit 문법 function AnsiLowerCase(const S: string): string; 문자열 내부의 대문자를 모두 소문자로 바꾼다. 영문자 이외의 글자는 영향을 받지 않는다. 문자 변환은 현재 설치된 언어 드라이버의 .. 2021. 7. 13.
델파이 Delphi FileExists 델파이 Delphi FileExists 파일 존재 여부 Result => True , False Contents 1 Description 2 VCL Code Snippet 3 FMX Code Snippet 4 Uses procedure TForm1.Button1Click(Sender: TObject); var FileName: string; begin Filename:= Edit1.Text; if SysUtils.FileExists(FileName) then begin if MessageDlg(('Do you really want to delete ' + ExtractFileName(FileName) + '?'), mtConfirmation, [mbYes, mbNo], 0, mbNo) = IDYes th.. 2021. 7. 11.
델파이 Delphi Fillchar 델파이 Delphi Fillchar 1. Fillchar(Buffer, Sizeof(Buffer), 0); 는 Buffer를 0으로 채우는 일을 합니다. 2. Sizeof(Buffer)는 버퍼의 크기를 구해서 리턴합니다. 3. Bytes := Comport2.Read(Buffer, Count); 는 COM2로 들어온 데이타를 Count만큼 Buffer에 읽어오라는 명령으로 생각됩니다. Byte에는 실제로 읽은 데이타 량이 리턴될 겁니다. 2021. 7. 9.
델파이 유용한 함수정리 7탄 델파이 유용한 함수정리 7탄 JPEG, String 사용하는 방법 MYJPEG JPEG C:\DownLoad\MY.JPG StringTable begin 1, "DPSC" 2, "Tips" 3, "Source Code" 4, "Interviews, reviews, and articles" end ARJ EXEFILE C:\UTILS\ARJ.EXE WAVEFILE WAVE c:\WaveSound.wav MAINICON ICON "MainIcon.ico" uses Jpeg; procedure LoadJPEGFromRes(TheJPEG : string; ThePicture : TPicture); var ResHandle : THandle; MemHandle : THandle; MemStream : TMemor.. 2021. 7. 8.
델파이 유용한 함수정리 6탄 델파이 유용한 함수정리 6탄 외부 프로그램 위치 이동하기 procedure TFrm_wiseFNUpdateMain.Fnwindowpos; var WinPlac: TWindowPlacement; iRight, iBottom: Integer; begin H:= FindWindow('TfrmValuewise',nil); if (H > 0) and IsWindowVisible(H) then begin FillChar(WinPlac, SizeOf(WinPlac), 0); WinPlac.length := SizeOf(WinPlac); GetWindowPlacement(H, @WinPlac); // 윈도우즈가 표준상태일때의 좌표를 구한다 iRight := WinPlac.rcNormalPosition.Right - W.. 2021. 7. 7.
델파이 유용한 함수정리 5탄 델파이 유용한 함수정리 5탄 전체경로 폴더생성 function ForceDirectories(Dir: string): Boolean; or procedure pCreateDir(sPath: string); var s: string; sList: TStrings; i: Integer; begin s:= sPath; if DirectoryExists(s) then Exit; sList:= TStringList.Create; try while pos('\',s) > 0 do begin sList.Add(Copy(s,1,Pos('\',s))); Delete(s,1,Pos('\',s)); end; if Length(s) > 0 then sList.Add(s); s:= ''; for i:= 0 to sList.Co.. 2021. 7. 6.
델파이 유용한 함수정리 3탄 델파이 유용한 함수정리 3탄 초를 시분초로 분할 function ssTohhnnss(value: double): string; var r, r1,r2: double; begin r:= Value; r1:= Trunc(r / 60); //분 r2:= Trunc(r1 / 60); //시 r:= r - (r1 * 60); r1:= r1 - (r2 * 60); result:= FloatToStr(r2) + '시 ' + FloatToStr(r1) + '분 ' + FloatToStr(r) + '초'; end; 초값으로 정지하기 TTime없이 선언부 procedure Sleep(SleepSecs : Integer); 코딩부 procedure TForm1.Sleep(SleepSecs : Integer); var Sta.. 2021. 7. 2.
델파이 문자열을 거꾸로 변환하는 함수 델파이 문자열을 거꾸로 변환하는 함수 ReverseString(Str:String) Delphi 7 이후 버전에만 가능 System.StrUtils.ReverseString 상위까지 : System.StrUtils 델파이 function ReverseString ( const AText : string ) : string ; / * 오버로드 * / ; 속성 유형 시계 출처 단위 부모의 함수 공공의 System.StrUtils.pas System.StrUtils.hpp System.StrUtils System.StrUtils 기술 지정된 문자열의 반대를 반환합니다. ReverseString 은 AText에서 지정한 문자열을 역순으로 반환합니다. 2021. 7. 1.
델파이 BitBlt 함수 설명 델파이 BitBlt 함수 설명 일단 폼에 메모를 하나 붙이시구요... 버튼도 하나 붙이세요... 글구... 버튼의 OnClick 이벤트에다가 아래와 같이 코딩하시구요... procedure TForm1.Button1Click(Sender: TObject); var FBitmap: TBitmap; FDC: hDC; begin FDC := GetDC(Memo1.Handle); FBitmap := TBitmap.Create; FBitmap.LoadFromFile('C:\aaa.bmp'); BitBlt ( FDC, 0, 0, Width, Height, FBitmap.Canvas.Handle, 0, 0, SRCAND ); ReleaseDC(Handle, FDC); FBitmap.Free; end; 2021. 6. 30.
델파이 ord chr 함수 델파이 ord chr 함수 mpassword := mpassword + chr(ord(copy(vpassword,i,1))+1); --> Copy(..)함수는 String형을 되돌려줍니다. 그런데 Ord(..) 함수는 Ordinal 형을 요구합니다. 그러므로 당연히 에러가 나겠죠. Ordinal 형은 0-255 까지의 서수값을 나타냅니다. 보통 1Byte 짜리 Char형을 인자로 받아들입니다. 아래와 같이 적용하셔야 합니다. 문자열도 넓게보면 문자의 배열이므로 아래와 같이 그 위치의 문자값을 받아 Ord(..)함수로 BYTE형의 값으로 바꿔 님께서 하실려는것처럼 +1을 하셔서 Chr(..) 함수로 다시 문자로 바꾼것입니다. mpassword := mpassword + chr(ord(vpassword[i].. 2021. 6. 29.