Delphi Tip276 TryStrToDate로 문자열 → 날짜 안전하게 변환하기 TryStrToDate로 문자열 → 날짜 안전하게 변환하기 델파이에서 사용자가 입력한 문자열을 날짜로 변환할 때 StrToDate를 쓰면 형식이 맞지 않으면 예외가 발생합니다. 이럴 경우 프로그램이 중단될 수 있어 위험합니다. TryStrToDate를 사용하면 예외 없이 변환 여부를 체크할 수 있어 유효성 검사에 매우 유용합니다. uses System.SysUtils; procedure ShowValidDate(const S: string); var D: TDate; begin if TryStrToDate(S, D) then ShowMessage('올바른 날짜입니다: ' + DateToStr(D)) else ShowMessage('잘못된 날짜 형식입니다: ' + S).. 2025. 7. 8. TIniFile로 손쉬운 설정 파일 관리하기 TIniFile로 손쉬운 설정 파일 관리하기 델파이 애플리케이션에서 사용자 환경설정이나 간단한 데이터를 파일에 저장할 때 INI 파일은 가볍고 편리한 방식입니다. TIniFile 클래스를 이용하면 레지스트리나 복잡한 DB 없이도 Key=Value 형태로 손쉽게 읽고 쓸 수 있습니다. 설정 파일은 텍스트 에디터로도 바로 수정 가능하므로 디버깅과 유지보수 측면에서도 유리합니다. uses System.IniFiles, System.SysUtils; procedure SaveAppSettings; var Ini: TIniFile; FileName: string; begin FileName := ChangeFileExt(Application.ExeName, '.ini'); Ini :=.. 2025. 7. 7. TStringList로 정렬된 문자열 관리하기 TStringList로 정렬된 문자열 관리하기델파이에서 TStringList는 문자열 목록을 관리하는 데 매우 유용한 클래스입니다. 특히 Sorted 속성과 Duplicates 속성을 조합하면 자동 정렬과 중복 허용 여부를 제어할 수 있어 데이터를 효율적으로 다룰 수 있습니다. procedure TForm1.SortingStringList; var SL: TStringList; i: Integer; begin SL := TStringList.Create; try SL.Sorted := True; // 자동 정렬 활성화 SL.Duplicates := dupIgnore; // 중복 항목 무시 SL.Add('Banana'); SL.Add('Appl.. 2025. 7. 3. 이벤트 핸들러를 동적으로 연결하기 이벤트 핸들러를 동적으로 연결하기 델파이에서는 버튼 클릭이나 체크박스 변경 같은 이벤트에 대한 처리를 디자인 타임뿐만 아니라 런타임에서도 동적으로 설정할 수 있습니다. 이 기능은 UI 구성 요소를 동적으로 생성하거나 동작을 유연하게 제어할 때 유용합니다. procedure TForm1.DynamicButtonClick(Sender: TObject); begin ShowMessage('동적으로 연결된 버튼 클릭 이벤트!'); end; procedure TForm1.FormCreate(Sender: TObject); var NewButton: TButton; begin NewButton := TButton.Create(Self); NewButton.Parent := Self; Ne.. 2025. 7. 2. FormatSettings로 로컬 날짜/숫자 포맷 제어하기 FormatSettings로 로컬 날짜/숫자 포맷 제어하기Delphi에서 날짜나 숫자, 통화 형식을 다룰 때 FormatSettings 레코드를 활용하면 글로벌 환경에서 유연한 포맷 지정이 가능합니다. 특히 사용자 시스템 설정을 무시하고 앱 내 고정 포맷을 유지할 때 유용합니다. uses System.SysUtils; procedure UseCustomFormat; var FS: TFormatSettings; Value: Currency; Formatted: string; begin Value := 1234567.89; FS := TFormatSettings.Create; FS.CurrencyString := '₩'; FS.ThousandSeparator := ','; .. 2025. 6. 18. EnumWindows API를 사용해 실행 중인 모든 윈도우 핸들 가져오기 EnumWindows API를 사용해 실행 중인 모든 윈도우 핸들 가져오기 델파이 프로그래밍에서 Windows.pas에 정의된 EnumWindows API는 현재 실행 중인 모든 윈도우의 핸들을 열거할 때 유용합니다. 이를 통해 외부 프로세스의 윈도우 정보를 가져오거나 UI 자동화를 구현할 수 있습니다. uses Winapi.Windows, Winapi.Messages, System.SysUtils; function EnumWindowsProc(Wnd: HWND; LParam: LPARAM): BOOL; stdcall; var Title: array[0..255] of Char; begin GetWindowText(Wnd, Title, Length(Title)); if IsWindow.. 2025. 6. 10. ExtractFilePath와 ExtractFileName으로 파일 경로 쉽게 분리하기 ExtractFilePath와 ExtractFileName으로 파일 경로 쉽게 분리하기델파이에서 파일 전체 경로를 다룰 때 ExtractFilePath와 ExtractFileName을 사용하면 파일의 경로와 이름을 손쉽게 분리할 수 있습니다. 로그, 설정 파일 저장, 파일 이름 변경 등 파일 처리 로직에서 자주 사용됩니다. uses System.SysUtils; procedure SplitFilePath; var FullPath, PathOnly, FileOnly: string; begin FullPath := 'C:\Projects\MyApp\config.ini'; PathOnly := ExtractFilePath(FullPath); FileOnly := ExtractFileNam.. 2025. 6. 6. FormatFloat으로 숫자 형식을 자유롭게 지정하기 FormatFloat으로 숫자 형식을 자유롭게 지정하기델파이에서는 FormatFloat 함수를 사용하여 실수나 숫자를 원하는 형식으로 문자열로 변환할 수 있습니다. 통화 표시, 자리수 지정, 천 단위 쉼표 삽입 등 다양한 출력 포맷을 손쉽게 제어할 수 있습니다. uses System.SysUtils; procedure FormatNumbers; var Value: Double; begin Value := 1234567.89; ShowMessage('통화 형식: ' + FormatFloat('#,##0.00', Value)); ShowMessage('소수점 제거: ' + FormatFloat('#,##0', Value)); ShowMessage('고정 소수점 4자리: ' + Fo.. 2025. 5. 30. Application.ProcessMessages의 올바른 사용법 Application.ProcessMessages의 올바른 사용법델파이에서는 긴 작업 도중 UI를 멈추지 않게 하려고 Application.ProcessMessages를 자주 사용하지만, 잘못 사용하면 예상치 못한 문제(재진입, 이벤트 중복 처리 등)를 일으킬 수 있습니다. 적절한 시점과 조건을 고려한 사용이 중요합니다. procedure DoHeavyTask; var I: Integer; begin for I := 1 to 10000 do begin // 무거운 처리 (예시용 지연) Sleep(1); if I mod 1000 = 0 then Application.ProcessMessages; end; ShowMessage('작업 완료!'); end.. 2025. 5. 29. CreateDir와 ForceDirectories의 차이 이해하기 CreateDir와 ForceDirectories의 차이 이해하기 폴더를 생성할 때 CreateDir는 단일 디렉터리만 만들 수 있는 반면, ForceDirectories는 존재하지 않는 중간 경로까지 포함하여 전체 폴더 구조를 한 번에 생성해줍니다. 상황에 따라 올바른 함수를 선택하는 것이 중요합니다. uses System.SysUtils; procedure CreateDirectoryDemo; var SimplePath, NestedPath: string; begin SimplePath := 'C:\Temp\Logs'; NestedPath := 'C:\Temp\Logs\2025\05\26'; if CreateDir(SimplePath) then ShowMessage('단.. 2025. 5. 26. StringReplace로 문자열 다중 치환 처리하기 StringReplace로 문자열 다중 치환 처리하기 델파이의 StringReplace 함수는 문자열 내 특정 텍스트를 다른 텍스트로 교체할 수 있는 강력한 기능입니다. 반복적 치환이나 대소문자 무시 기능까지 지원해 다양한 텍스트 변환 작업에 적합합니다. uses System.SysUtils; procedure ReplaceTextDemo; var Original, Modified: string; begin Original := 'Delphi는 정말 좋은 Delphi 개발 도구입니다.'; Modified := StringReplace(Original, 'Delphi', 'Object Pascal', [rfReplaceAll, rfIgnoreCase]); ShowMessage(Mod.. 2025. 5. 16. 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. 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. AnsiUpperCase와 AnsiLowerCase로 대소문자 변환 AnsiUpperCase와 AnsiLowerCase로 대소문자 변환 문자열을 대문자 또는 소문자로 변환할 때 AnsiUpperCase와 AnsiLowerCase 함수를 사용하면 빠르고 간편하게 처리할 수 있습니다. 로케일에 민감하지 않은 문자열 비교나 정렬을 할 때 특히 유용합니다. uses System.SysUtils; procedure ConvertCaseExample; var Original, UpperStr, LowerStr: string; begin Original := 'Delphi Is Great!'; UpperStr := AnsiUpperCase(Original); LowerStr := AnsiLowerCase(Original); ShowMessage('대문자:.. 2025. 4. 24. 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. ExtractFileName과 ExtractFilePath를 함께 활용한 경로 분리 ExtractFileName과 ExtractFilePath를 함께 활용한 경로 분리 파일 경로를 다룰 때 전체 경로에서 파일명과 폴더 경로를 따로 분리해야 할 일이 많습니다. 델파이에서는 ExtractFileName과 ExtractFilePath 함수를 함께 사용하면 간단하게 처리할 수 있습니다. uses System.SysUtils; procedure SplitFilePath; var FullPath, OnlyFile, OnlyPath: string; begin FullPath := 'C:\Projects\MyApp\Report.pdf'; OnlyFile := ExtractFileName(FullPath); OnlyPath := ExtractFilePath(FullPath); .. 2025. 4. 21. 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. 이전 1 2 3 4 ··· 14 다음