delphi494 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. [1편] VCL 컴포넌트란? 개요 및 기본 개념 VCL 컴포넌트 1. VCL(Visual Component Library)이란?VCL(Visual Component Library)은 Delphi에서 제공하는 UI 컴포넌트 라이브러리로, Windows 애플리케이션을 쉽게 개발할 수 있도록 다양한 UI 요소를 제공합니다. Delphi 개발 환경에서는 VCL을 활용하여 폼 기반(Form-based) 애플리케이션을 제작하며, 코드 작성 없이 드래그 앤 드롭 방식으로 UI를 구성할 수 있습니다.✔ VCL을 사용하면?UI 개발 속도 향상: 컴포넌트를 배치하고 속성을 조정하는 것만으로 UI 제작이 가능복잡한 UI 요소를 쉽게 구성: TButton, TEdit, TPanel 등 다양한 컴포넌트 제공강력한 Windows 네이티브 지원: 윈도우즈 환경에 최적화된 U.. 2025. 2. 17. 상속이란? 상속이란 상속은 객체지향 프로그래밍(OOP)의 꽃이라 불릴 만큼 중요한 개념입니다.여러 클래스가 공통적으로 가지는 요소를 상위 클래스(부모 클래스) 에 정의한 후, 이를 하위 클래스(자식 클래스) 가 물려받아 재사용하는 방식입니다. ✅ 주요 특징코드 중복 방지: 동일한 기능을 여러 클래스에서 반복적으로 구현할 필요 없음.유지보수 용이: 부모 클래스의 변경 사항이 하위 클래스에도 자동 반영됨.확장성 강화: 상속받은 클래스를 기반으로 새로운 기능을 쉽게 추가 가능. 🔹 클래스의 정규화 (Normalization)객체지향 설계에서 중복 요소를 제거하는 과정입니다. 📌 예제❌ 정규화 전: 각 관리자 클래스가 중복된 로그인() 메소드를 개별적으로 구현✅ 정규화 후: 관리자추상클래스에서 로그인()을 정의하고,.. 2025. 2. 10. Frame을 활용한 최종 통합 및 실행 Frame을 활용한 최종 통합 및 실행 이제까지 Frame을 활용하여 폴더 탐색, 파일 목록 정리, 이미지 표시 기능을 각각 독립적으로 구현하는 방법을 알아봤습니다.이번 포스팅에서는 이 모든 Frame을 하나로 통합하여완전한 Image Viewer 프로그램을 실행하는 과정을 살펴보겠습니다. Frame을 활용한 최종 구조우리가 구현한 Image Viewer는 아래와 같은 3개의 주요 Frame을 포함합니다:TfrFolder Frame폴더 트리 탐색 기능 담당선택된 폴더의 이미지 파일 목록을 TfrImageList에 전달TfrImageList Frame전달받은 이미지 파일 목록을 정렬하여 나열클릭하면 선택된 이미지를 강조 표시TfrImage Frame개별 이미지를 표시하고 선택 이벤트를 처리이제 이 Fra.. 2025. 1. 30. Frame 활용 실습 주요 구현 코드 Frame 활용 실습 주요 구현 코드 이번 포스팅에서는 Delphi에서 Frame을 활용하여 실제로 구현하는 주요 코드를 살펴보겠습니다.이를 통해 Frame을 활용한 프로그래밍이 얼마나 강력하고 효율적인지 체험할 수 있습니다.특히, 코드 작성의 흐름과 중요한 메서드의 동작 방식을 중심으로 설명하겠습니다. Frame 활용 실습 목표폴더 탐색 및 파일 로딩사용자가 특정 폴더를 선택하면 해당 폴더의 파일 목록을 불러옵니다.이미지 표시 및 정렬선택된 파일 중 이미지를 화면에 정렬하여 표시합니다.독립적인 코드 관리Frame을 활용하여 각 기능을 분리해 관리합니다. Frame의 주요 메서드 구현1. 폴더 탐색 기능 (TfrFolder)폴더 트리 구조를 탐색하고, 선택된 폴더의 파일 목록을 가져오는 역할을 합니다. .. 2025. 1. 24. Delphi에서 Frame 추가 및 설정하기 Delphi에서 Frame 추가 및 설정하기 프로그래밍에서 Frame은 독립적인 UI 요소를 구성하고 관리하는 데 매우 유용합니다.이번 포스팅에서는 Delphi IDE에서 Frame을 추가하고 설정하는 방법을 단계별로 설명하겠습니다.이를 통해 Frame 기반 프로젝트를 시작하는 데 필요한 기본기를 익힐 수 있습니다. Frame 추가하기Delphi에서 Frame을 추가하는 방법은 간단합니다.새 프로젝트 생성Delphi IDE에서 File > New > VCL Forms Application을 선택합니다.기본적으로 생성된 폼(Form)은 Form1이라는 이름을 가집니다.Frame 추가File > New > Other... 메뉴를 선택합니다.Delphi Files > Frame을 선택한 뒤, 새 Frame.. 2025. 1. 23. Frame 구조 설계와 분업화 Frame 구조 설계와 분업화 프로그래밍에서 코드의 분업화와 모듈화는 프로젝트의 성공을 좌우하는 중요한 요소입니다. Frame을 활용하면 기능별로 코드를 독립적으로 관리하고 분업화할 수 있습니다. 이번 포스팅에서는 Frame 구조 설계와 분업화 방법을 소개합니다.Frame을 활용한 구조 설계의 필요성하나의 폼(Form)에 모든 기능을 구현하면 코드가 복잡해지고, 수정이나 확장이 어려워집니다. 이와 같은 문제를 해결하기 위해 Frame을 사용하면 다음과 같은 이점이 있습니다:독립적 기능 관리각 Frame이 특정 역할만 담당하여 코드가 간결해집니다.코드 가독성 향상기능별로 분리된 코드 구조로 인해 읽고 이해하기가 쉬워집니다.유지보수 용이성특정 기능을 수정할 때 해당 Frame만 변경하면 됩니다.Frame .. 2025. 1. 15. Frame을 활용한 Image Viewer 개발 Frame을 활용한 Image Viewer 개발 이번 포스팅에서는 Frame을 활용하여 간단한 Image Viewer를 개발하는 방법을 알아보겠습니다. 기존에 복잡하게 작성된 코드를 Frame으로 분리하고, 효율적으로 관리할 수 있는 구조로 만드는 과정을 살펴봅니다. 왜 Image Viewer에 Frame을 활용해야 할까요?Image Viewer는 폴더 탐색, 파일 로딩, 이미지 표시 등의 기능을 포함한 프로그램입니다. 기존 방식으로 코드를 작성하면:모든 코드가 하나의 폼(Form)에 작성되어 복잡도가 증가합니다.기능별로 나눠지지 않아 유지보수가 어려워집니다.하지만 Frame을 활용하면:코드 분업화: 폴더 탐색, 파일 로딩, 이미지 표시 기능을 각각의 Frame으로 나눌 수 있습니다.가독성 향상: 각 .. 2025. 1. 6. Frame을 활용한 간단한 프로그램 예제 Frame을 활용한 간단한 프로그램 예제 프로그래밍에서 간결하고 효율적인 코드 작성은 매우 중요합니다. 특히, 한 화면에 여러 기능이 필요하거나 중복 작업을 줄이고 싶을 때, Frame은 훌륭한 해결책이 될 수 있습니다. 이번 포스팅에서는 Frame을 사용한 간단한 프로그램 예제를 통해 실전 활용법을 알아보겠습니다.Frame을 사용하지 않은 경우의 문제점Frame을 사용하지 않으면 모든 기능을 하나의 폼(Form)에 구현해야 합니다. 이 경우:코드가 한 곳에 집중되어 가독성이 떨어집니다.동일한 기능을 여러 폼에서 사용해야 할 때 코드 중복이 발생합니다.유지보수 시 특정 기능만 수정하려 해도 다른 코드에 영향을 줄 가능성이 큽니다.이런 문제를 해결하기 위해 Frame을 활용하면 코드의 캡슐화와 재사용성.. 2025. 1. 5. 프로그래머라면 알아야 할 Frame 활용의 기본 개념 프로그래머라면 알아야 할 Frame 활용의 기본 개념 프로그래밍을 하다 보면 한 화면에서 다양한 기능을 그룹화해야 할 때가 많습니다. 특히, 하나의 폼(Form)에 여러 컴포넌트를 추가하게 되면 코드가 복잡해지고 유지보수가 어려워질 수 있습니다. 이런 경우, TFrame을 활용하면 보다 효율적으로 화면을 설계하고 코드를 관리할 수 있습니다.Frame이란 무엇인가요?Frame은 Delphi에서 제공하는 유용한 UI 설계 도구로, 하나의 폼을 여러 개로 나눠 작업할 수 있도록 도와줍니다. 쉽게 말해, **"재사용 가능한 미니 폼"**이라고 할 수 있습니다. Frame을 사용하면 각 기능별로 코드를 캡슐화하고 독립적으로 관리할 수 있어, 코드의 가독성과 유지보수성을 크게 향상시킬 수 있습니다.Frame을 왜.. 2025. 1. 4. 한글(2Byte)문자열 깨지지 않게 자르기 한글(2Byte)문자열 깨지지 않게 자르기 WideString 을 사용하자한글을 자를때 깨진 1Byte 문자를 WideString 변수에 넣었다가String 변수로 되받아서 Trim 처리를 하면 깨진 문자가 정리되어 이걸 활용 이 예제는 C++Builder 에서도 동일하게 적용 procedure TForm1.Button1Click(Sender: TObject);varTextString, TextTrim: String;TempWide: WideString;LenthCnt: Integer;beginTextString := Trim(Edit1.Text); //원본문자열LenthCnt := StrToIntDef(Edit2.Text,7); //문자열 자를 위치 if ( Length(TextString) > .. 2024. 7. 8. 프로그램 디버그(Debug) 메시지를 찍기 프로그램 디버그(Debug) 메시지를 찍기 프로그램 작성시 디버깅을 특정상황에서 showmessage 를 통해 하는 경우도 있지만..델파이의 result 창에서 나타나게 하는 방법은 OutputDebugString 을 이용해 문자열을 출력하는 것이다. 2024. 7. 6. 해당날짜 몇 주차인지 알아내기 해당날짜 몇 주차인지 알아내기 uses System.DateUtils function myGetWeekNo(paToday:TDateTime):Word;varvWeekNo : word;vDTstart : TDate;beginvDTstart := EncodeDate( YearOf(paToday), MonthOf(paToday), 01 );vWeekNo := WeekOfTheYear(paToday) - WeekOfTheYear(vDTstart) +1;if Not (vWeekNo IN [1..6]) then //12월 31일이 월요일인경우 리턴값이 65xxx를 예방하기 위함vWeekNo := 6;Result := vWeekNo;end; 2024. 7. 5. 델파이 포인터 사용 팁 델파이 포인터 사용 팁 ShellApi 를 이용할때 윈도우에서 사용하는 언어인'C' 와 델파이의 'Pascal'의 포인터 다루는 방법이 달라많은 혼동(나만?)을 일으킨다. 특히나 파스칼에서는 포인터방법이여러가지가 있어 햇갈리기 아주 좋다. 그래서 한번 정리하여 보았다.예제는 폴더를 찾아 지정하는SHBrowseForFolder 를 이용하는 것으로 하였다. 1. 버퍼를 이용하는 방법var Buffer: array[0..255] of char; beginpszDisplayName:= @Buffer; .......MessageBox(handle, Buffer, '', MB_OK); end; 2. pChar 를 이용하는 방법 : 'C' 와 유사var Buffer: pChar;beginGetMem(Buffer, 2.. 2024. 7. 4. 이전 1 2 3 4 ··· 25 다음