본문 바로가기

delphi507

FreeAndNil을 사용한 메모리 해제와 포인터 초기화 FreeAndNil을 사용한 메모리 해제와 포인터 초기화 델파이에서 객체를 메모리에서 해제한 뒤 포인터를 nil로 초기화하지 않으면, 이후 해당 포인터를 접근하려 할 때 오류(Access Violation)가 발생할 수 있습니다. FreeAndNil은 이 두 과정을 한 번에 처리해주는 안전한 도구입니다. uses System.SysUtils; procedure FreeAndNilExample; var Obj: TStringList; begin Obj := TStringList.Create; try Obj.Add('Delphi is powerful!'); finally FreeAndNil(Obj); // 메모리 해제 + 포인터 nil 처리 end; if Obj .. 2025. 5. 1.
Pos 함수를 활용한 문자열 내 위치 검색 Pos 함수를 활용한 문자열 내 위치 검색 델파이의 Pos 함수는 특정 문자열이 다른 문자열 내 어디에 위치하는지를 알려주는 함수입니다. 검색 기능, 유효성 검사, 문자열 파싱 등 다양한 곳에서 활용할 수 있습니다. uses System.SysUtils; procedure PosExample; var Text, SubStr: string; Index: Integer; begin Text := 'Welcome to the Delphi world!'; SubStr := 'Delphi'; Index := Pos(SubStr, Text); ShowMessage('위치: ' + IntToStr(Index)); // 결과: 16 end; 실행 결과: "위치: 16" ('Delphi'.. 2025. 4. 30.
Length를 이용한 배열과 문자열 길이 확인 Length를 이용한 배열과 문자열 길이 확인 델파이에서는 Length 함수를 사용해 배열의 크기나 문자열의 길이를 쉽게 구할 수 있습니다. 이는 반복문 작성, 데이터 유효성 검사, 문자열 처리 등에 매우 기본적이면서 중요한 역할을 합니다. uses System.SysUtils; procedure LengthExample; var SampleText: string; Numbers: array of Integer; begin SampleText := 'Hello Delphi!'; ShowMessage('문자열 길이: ' + IntToStr(Length(SampleText))); // 결과: 13 SetLength(Numbers, 5); ShowMessage('배열 크기: ' +.. 2025. 4. 29.
Copy 함수를 사용한 문자열 일부 추출 Copy 함수를 사용한 문자열 일부 추출 델파이에서 문자열의 일부분을 추출할 때 Copy 함수를 사용하면 매우 쉽고 빠르게 원하는 부분을 잘라낼 수 있습니다. 텍스트 처리, 데이터 분석, 포맷 변환 등 다양한 상황에서 유용하게 활용됩니다. uses System.SysUtils; procedure CopyExample; var OriginalText, ExtractedText: string; begin OriginalText := 'Welcome to Delphi World!'; ExtractedText := Copy(OriginalText, 12, 6); // 12번째 문자부터 6글자 추출 ShowMessage('추출된 텍스트: ' + ExtractedText); end; Copy.. 2025. 4. 28.
FindComponent를 활용한 동적 컴포넌트 접근 FindComponent를 활용한 동적 컴포넌트 접근 델파이에서는 FindComponent를 이용해 런타임 중 컴포넌트 이름을 문자열로 찾아 접근할 수 있습니다. 폼에 많은 컴포넌트가 있을 때 동적으로 제어하거나, 이름 규칙에 따라 그룹 작업을 할 때 유용합니다. procedure SetLabelCaptions; var I: Integer; Lbl: TLabel; begin for I := 1 to 5 do begin Lbl := TLabel(FindComponent('Label' + IntToStr(I))); if Assigned(Lbl) then Lbl.Caption := '항목 ' + IntToStr(I); end; end; FindComponent.. 2025. 4. 26.
IfThen을 사용한 간결한 조건 처리 IfThen을 사용한 간결한 조건 처리 델파이의 IfThen 함수는 짧고 간결하게 조건에 따라 값을 선택할 수 있게 해주는 함수입니다. 전통적인 if..then..else 구문보다 한 줄로 표현할 수 있어 코드가 훨씬 깔끔해집니다. uses System.StrUtils; procedure IfThenExample; var UserLevel: Integer; ResultText: string; begin UserLevel := 2; ResultText := IfThen(UserLevel = 1, '관리자', '일반 사용자'); ShowMessage('사용자 권한: ' + ResultText); end; IfThen(조건, 참일 때 값, 거짓일 때 값) 형식 문자열 뿐 아니라 .. 2025. 4. 25.
QuotedStr를 사용한 안전한 문자열 포장 QuotedStr를 사용한 안전한 문자열 포장 SQL 쿼리나 JSON 문자열 생성 시 문자열을 따옴표로 감싸야 할 경우가 자주 있습니다. 이때 QuotedStr 함수를 사용하면 자동으로 작은따옴표(')를 감싸고 내부에 있는 따옴표도 이스케이프 처리해줍니다. uses System.SysUtils; procedure QuotedStrExample; var UserInput, SQL: string; begin UserInput := 'O''Reilly'; SQL := 'SELECT * FROM Users WHERE Name = ' + QuotedStr(UserInput); ShowMessage(SQL); end; "SELECT * FROM Users WHERE Name = 'O''Rei.. 2025. 4. 23.
SameText를 활용한 대소문자 구분 없는 문자열 비교 SameText를 활용한 대소문자 구분 없는 문자열 비교 문자열 비교 시 대소문자를 구분하지 않고 비교하고 싶다면 SameText 함수를 사용하면 됩니다. = 연산자보다 더 명확하고 안정적으로 조건을 처리할 수 있어 사용자 입력 비교 등에 매우 유용합니다. uses System.SysUtils; procedure CompareTextDemo; var Input1, Input2: string; begin Input1 := 'Delphi'; Input2 := 'delphi'; if SameText(Input1, Input2) then ShowMessage('같은 문자열입니다.') else ShowMessage('다른 문자열입니다.'); end; SameText(A, .. 2025. 4. 22.
IncludeTrailingPathDelimiter로 경로 끝에 슬래시 추가하기 IncludeTrailingPathDelimiter로 경로 끝에 슬래시 추가하기 파일 또는 폴더 경로를 조합할 때 슬래시(\) 누락으로 인해 문제가 생기는 경우가 많습니다. 델파이의 IncludeTrailingPathDelimiter 함수는 경로 끝에 슬래시가 없으면 자동으로 추가해줘 경로 연결 시 안전하게 사용할 수 있습니다. uses System.SysUtils; procedure JoinFolderPath; var BasePath, FullPath: string; begin BasePath := 'C:\MyApp\Data'; FullPath := IncludeTrailingPathDelimiter(BasePath) + 'Backup.txt'; ShowMessage('전체 경로.. 2025. 4. 18.
Trim, TrimLeft, TrimRight로 공백 제거하기 Trim, TrimLeft, TrimRight로 공백 제거하기사용자 입력, 파일 처리, 문자열 비교를 할 때 앞뒤 공백이 문제를 일으킬 수 있습니다. 델파이에서는 Trim 관련 함수를 통해 문자열의 공백을 손쉽게 제거할 수 있어 데이터 정제에 매우 유용합니다. uses System.SysUtils; procedure TrimExample; var RawText, CleanedText: string; begin RawText := ' Hello Delphi! '; CleanedText := Trim(RawText); ShowMessage('[' + CleanedText + ']'); // 결과: [Hello Delphi!] end; Trim: 문자열 양쪽 끝 공백 제거 Tr.. 2025. 4. 17.
ChangeFileExt를 사용한 파일 확장자 변경하기 ChangeFileExt를 사용한 파일 확장자 변경하기 ChangeFileExt 함수는 파일 경로의 확장자를 쉽게 변경할 수 있게 해주는 유틸리티입니다. 예를 들어 .txt 파일을 .bak 파일로 바꾸거나, 특정 작업 후 저장 포맷을 바꿔야 할 때 매우 유용합니다. uses System.SysUtils; procedure ChangeExtensionDemo; var OriginalFile, NewFile: string; begin OriginalFile := 'C:\Backup\data.txt'; NewFile := ChangeFileExt(OriginalFile, '.bak'); ShowMessage('변경된 파일명: ' + NewFile); end; 기존 경로에서 확장자만 바.. 2025. 4. 16.
ExtractFileExt를 사용한 파일 확장자 추출 ExtractFileExt를 사용한 파일 확장자 추출 파일 경로에서 확장자를 따로 분리하고 싶을 때는 ExtractFileExt 함수를 사용하면 매우 간단합니다. 파일 유형 판단이나 확장자 필터링, 조건 분기 등에 자주 쓰입니다. uses System.SysUtils; procedure ShowFileExtension; var FilePath, Extension: string; begin FilePath := 'C:\Users\Documents\report.pdf'; Extension := ExtractFileExt(FilePath); // ".pdf" ShowMessage('확장자: ' + Extension); end; ExtractFileExt는 경로에서 확장자만 추출함 (점 .. 2025. 4. 15.
Now와 FormatDateTime을 활용한 현재 날짜 및 시간 포맷 출력 Now와 FormatDateTime을 활용한 현재 날짜 및 시간 포맷 출력   델파이에서 Now 함수는 현재 날짜와 시간을 반환합니다.  이를 FormatDateTime 함수와 함께 사용하면 다양한 형식으로 날짜와 시간을  손쉽게 표시할 수 있습니다. 로그 기록, UI 표기, 파일명 생성 등에 자주 활용됩니다. uses   System.SysUtils; procedure ShowCurrentDateTime; var   CurrentDateTime: string; begin   CurrentDateTime := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);   ShowMessage('현재 시간: ' + CurrentDateTime); end; ● 'yyyy', 'mm', '.. 2025. 4. 14.
Screen.Cursors를 이용한 마우스 커서 변경 Screen.Cursors를 이용한 마우스 커서 변경  사용자에게 작업 진행 중임을 시각적으로 알려주고 싶을 때  마우스 커서를 바꾸는 것이 좋은 방법입니다.  Screen.Cursors를 사용하면 특정 작업 중에는 '모래시계', 완료 후에는 기본 커서로 되돌리는 등 UX 향상에 도움이 됩니다. uses   Vcl.Forms, Vcl.Controls, Vcl.Dialogs; procedure LongRunningTask; begin   Screen.Cursor := crHourGlass;  // 모래시계 커서 표시   try     Sleep(3000);  // 3초간 작업     ShowMessage('작업 완료!');   finally     Screen.Cursor := crDefault;  // .. 2025. 4. 12.
ForceDirectories로 중첩된 폴더 자동 생성하기 ForceDirectories로 중첩된 폴더 자동 생성하기파일을 저장할 때 필요한 폴더가 없으면 오류가 발생할 수 있습니다.  이때 ForceDirectories 함수를 사용하면 다단계 폴더도  한 번에 생성할 수 있어 매우 유용합니다.  특히 백업 폴더나 사용자 디렉토리를 미리 생성해야 할 때 좋습니다. uses   System.SysUtils; procedure CreateFolderStructure; var   FolderPath: string; begin   FolderPath := 'C:\MyApp\Data\Backup\2025\04\11';   if ForceDirectories(FolderPath) then     ShowMessage('폴더가 성공적으로 생성되었습니다!')   else   .. 2025. 4. 11.
TThread.Queue를 활용한 안전한 UI 업데이트 TThread.Queue를 활용한 안전한 UI 업데이트델파이에서 스레드 작업을 할 때  직접 UI 컴포넌트에 접근하면 오류가 발생할 수 있습니다.  이때 TThread.Queue를 사용하면 UI 스레드에서 안전하게  코드를 실행할 수 있습니다.  백그라운드 작업 중 UI에 메시지를 띄우거나  데이터를 갱신할 때 매우 유용합니다. uses   System.Classes, Vcl.Dialogs; procedure StartBackgroundTask; begin   TThread.CreateAnonymousThread(procedure   begin     Sleep(3000); // 3초간 작업 수행     TThread.Queue(nil, procedure     begin       ShowMessage.. 2025. 4. 10.
Application.ProcessMessages의 역할과 주의점 Application.ProcessMessages의 역할과 주의점 델파이에서 Application.ProcessMessages는  현재 대기 중인 Windows 메시지를 즉시 처리하도록 하는 함수입니다.  주로 루프나 지연 작업 중 UI가 멈추지 않도록 할 때 사용됩니다.  하지만 과도한 사용은 오히려 성능과 안정성에 부정적인 영향을 줄 수 있어  신중하게 써야 합니다. procedure TForm1.Button1Click(Sender: TObject); var   I: Integer; begin   for I := 1 to 100 do   begin     Label1.Caption := Format('진행 중: %d%%', [I]);     Application.ProcessMessages; // U.. 2025. 4. 8.
TFormatSettings를 사용한 지역화된 숫자/날짜 포맷 처리 TFormatSettings를 사용한 지역화된 숫자/날짜 포맷 처리 델파이에서 숫자나 날짜 형식을 지역 설정에 따라  다르게 출력해야 할 경우 TFormatSettings를 사용하면 유용합니다.  특히 다국어 지원이나 사용자 맞춤 포맷이 필요할 때 매우 효과적입니다. uses   System.SysUtils; procedure ShowLocalizedDateAndNumber; var   FS: TFormatSettings;   FormattedDate, FormattedNumber: string; begin   FS := TFormatSettings.Create('fr-FR');  // 프랑스 지역 설정   FormattedDate := FormatDateTime('dd mmmm yyyy', Date, .. 2025. 4. 7.
Record Helper를 사용한 레코드 기능 확장 Record Helper를 사용한 레코드 기능 확장  Delphi의 Record Helper 기능을 활용하면  기존 레코드 타입에 메서드나 프로퍼티를 추가할 수 있어,  객체지향 방식의 코드처럼 레코드를 활용할 수 있습니다.  특히 수학, 날짜, 좌표 등 간단한 구조체 데이터에  기능을 부여할 때 유용합니다. type   TPoint = record     X, Y: Integer;   end;   TPointHelper = record helper for TPoint     function ToString: string;     function DistanceTo(const AOther: TPoint): Double;   end; { TPointHelper } function TPointHelper.T.. 2025. 3. 26.
익명 메서드(Anonymous Method) 활용하기 익명 메서드(Anonymous Method) 활용하기 익명 메서드는 이름 없이 즉석에서 정의할 수 있는 함수 또는 프로시저입니다.콜백 함수나 이벤트 핸들링을 단순화하는 데 유용합니다. uses   System.SysUtils; procedure ExecuteWithCallback(Callback: TProc); begin   ShowMessage('작업을 시작합니다...');   Callback;  // 전달된 익명 메서드 실행   ShowMessage('작업이 완료되었습니다!'); end; procedure Test; begin   ExecuteWithCallback(procedure   begin     ShowMessage('중간 작업 진행 중...');   end); end;  포인트:TProc .. 2025. 3. 20.