본문 바로가기

Delphi Tip/컴포넌트31

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.
TMemo(메모장) 스트링(string) 입력 속도개선 TMemo(메모장) 스트링(string) 입력 속도개선  메모장에서 문자를 바꾸거나 할경우 메모장의 내용을String에 옮긴 다음 해당 작업을 하고다시 메모장으로 불러들일때 별생각없이 아래와 같이 한다. (예)iStr:= Memo1.Lines.Text;iStr:= StringReplace(iStr, 'a', 'b', []) ;Memo1.Lines.Text:= iStr; 그런데 메모장의 내용이 많울 경우(스트링의 크기가 클)에는Memo1.Lines.Text:= iStr; 에서 엄청 많은 시간을 먹는다. 개선방법 var iMemStream: TMemoryStream;iStr: string;beginiStr:= Memo1.Lines.Text;iStr:= StringReplace(iStr, 'a', 'b', [.. 2024. 6. 28.
컴포넌튼 만들기(초간단) 컴포넌튼 만들기 TLabel 을 상속받어, 기본 Default 배경이 검은색으로 설정되는 컴포넌트입니다. unit BlackLabel; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TBlackLabel = class(TLabel) private { Private declarations } protected { Protected declarations } public constructor create(aOwner: TComponent); override; published { Published declarations } end; procedure Register; i.. 2023. 11. 29.
동적으로 메뉴(TMenuItem) 만들고 클릭 이벤트 만들기 동적으로 메뉴(TMenuItem) 만들고 클릭 이벤트 만들기 아래와 같이 popMenuSkin MenuItem에 서브 MenuItem을 동적으로 추가할 수 있다. // Create Dynamic MenuItem var skinCount: Integer; MI: array of TMenuItem; begin skinCount := 3 for i := popMenuSkin.Count - 1 downto 0 do popMenuSkin.Remove(popMenuSkin.Items[i]); SetLength(MI, skinCount); for i := 0 to skinCount do begin MI[i] := TMenuItem.Create(Self); MI[i].Caption := IntToStr(i); MI[i.. 2023. 10. 31.
델파이 콤보박스(TComboBox)의 팝업리스트 가로폭 늘리기 델파이 콤보박스(TComboBox) procedure TMain_Form.ComboBox1DropDown(Sender: TObject); begin SendMessage( TComboBox( Sender ).Handle, CB_SETDROPPEDWIDTH, 300, 0 ); end; 추가 TiP 콤보박스 글자까지 확인해서 글자의 최대값으로 컴보박스 크기를 조절하는것입니다. procedure TForm1.AdjustDropDownWidth(Sender: TObject); var j,i,ItemWidth, IW: Integer; begin For j := ComponentCount-1 Downto 0 do Begin ItemWidth := 0; If (Components[j] is TCombobox) The.. 2023. 10. 26.
델파이 타이머(TTimer) Interval 시간오차 해결방법 델파이 타이머 델파이에서 컴포넌트로 제공되는 TTimer의 경우에는 정확한 시간에 맞게 콜백을 하지 않는다. Interval 을 1/1000 초까지 조정할 수 있지만 실제로 호출되는 것은 1/18.2 초 단위로 끊어 지게 되기때문이다. 만약 TTimer로 MP3 플레이어나 동영상 재생기를 만든다면 어떻게 될까 ? MP3 음향이 정확한 박자로 재생하지 못할 것이고 동영상도 프레임이 정확하지 못해서 눈이 상당히 피로해질 거다. 하지만 지금 소개하는 타이머를 쓰게 되면 1ms 의 오차정도만을 허용하는 고급의 타이머가 생성되게 됩니다. 어려운 내용이 아니기 때문에 그냥 소스에 주석을 붙이는 차원으로 끝내겠습니다. 그리고 dfm 의 내용도 Text 로 뒤에 첨가하였으니 직접 폼을 만들어서 테스트 해보면 된다 폼에.. 2023. 10. 11.
델파이 컨트롤 반투명 드래그 이동 델파이 컨트롤 반투명 드래그 이동 윈도우 탐색기에서 리스트뷰의 헤더부분을 드래그해보면 약간 반투명하게 움직이는 것을 볼수 있습니다. 또는 아이콘을 드래그 할때도 원래의 아이콘이미지가 반투명하게 보이고 투명한부분은 그대로 투명하게 보이는 것을 경험하셨을 겁니다. 이걸 델파이에서 구현하려면 어떻게 해야 할까요? 가장 쉽게 생각해 볼수 있는게 배경화면의 그림을 얻어와서 그 위에 반투명 처리를 해서 아이콘을 그려주고 이렇게 합성한 그림을 배경화면에 다시 그려주는 일을 해야 할겁니다. 하지만 그렇게 되면 드래그하는 일에 CPU가 쉴새가 없게 됩니다. 그러면 방법은 없을까요? 다행이도 델파이에는 이런 기능을 할수 있도록 준비된 녀석이 있습니다. 바로 TImageList라는 녀석이죠!! 사용법 1. 우선 TImage.. 2023. 9. 12.
델파이 컴포넌트(Component) 마무리 델파이 컴포넌트(Component) 마무리 RAD의 특징이 바로 프로퍼티 '+' 표시가 붙은 프로퍼티 만들기 이번에는 프로퍼티의 이름앞에 '+'가 붙어서 내용이 전개되는 것을 어떻게 처리하는지 보도록 합시다. ① 집합형..(set) 우선 폼에 있는 BorderIcons를 보세요.. 이녀석도 이름앞에 '+'가 있죠? 두번클릭하면 내용이 전개가 되면서 이름앞에 '-'로 바뀌지요. 앗.. 그런데 이녀석은 Font등에서 보던 녀석과는 약간 다른 특성이 있네요. 내용들이 모두 Boolean형으로 되어있지요? 그럼.. 이녀석의 헬프를 보도록 합시다. type TBorderIcon = (biSystemMenu, biMinimize, biMaximize, biHelp); TBorderIcons = set of TBor.. 2023. 7. 25.
델파이 컴포넌트(Component) 7편 델파이 컴포넌트(Component) 7편 오브젝트 인스펙터(Object Inspector) 프로퍼티 탭을 보시면 어떤 녀석은 그냥 edit으로 되어 있구 어떤 녀석은 ComboBox로, 또 어떤녀석은 이름앞에 '+'가 붙어서 내용을 전개해서 볼수 있도록 되어 있음을 볼수 있을겁니다. 또, 특별한 경우 '...'버튼을 눌러서 대화상자를 호출해서 프로퍼티를 조작하는 경우도 있죠.. 그밖에 프로퍼티에 대해서 자세히 알아보도록 합시다. 우선 Edit로 나타나는 경우에는 어떤값을 입력할수 있었나요? Name, Caption, Hint등의 경우 문자를 입력할수 있게 됩니다. Left, Right, Tag등의 경우 숫자만을 입력할수 있게 되죠.. 거꾸로 생각하면 오브젝트 인스펙터에 Edit으로 나타나게 하려면 프로퍼.. 2023. 7. 24.
델파이 컴포넌트(Component) 6편 델파이 컴포넌트(Component) 6편 프로퍼티(Property) 델파이는 참으로 재미있는 방법으로 클래스를 지원합니다. 그 중 하나가 바로 프로퍼티라는 녀석이죠. OOP의 몇가지 대표적인 특징중에 캡슐화(정보은닉)이라는 것이 있죠? OOP에서는 클래스 내부에서 다루는 데이터는 밖으로 드러나지 않아야 된다는 것이죠 내부에서 다루는 변수는 직접 조작할수가 없고, 함수를 통해서만이 값을 참조하고 바꿀수 있게 되어있습니다. 예를 들면 클래스 내부에서 쓰이는 변수중에 'fMyAge'라는 것이 있다구 합시다. 전형적인 C++언어에서는 fMyAge라는 녀석을 private안에 숨겨둘 것입니다. 그리고 다음과 같은 함수로 fMyAge를 조작할수 있도록 하겠죠. C++에서의 변수접근법 i := GetMyAge(); .. 2023. 7. 21.
델파이 컴포넌트(Component) 5편 델파이 컴포넌트(Component) 5편 이번에는 이벤트 핸들러에 들어가는 매개변수의 형(type)과 갯수를 마음대로 바꿔서 사용할수 있도록 해봅시다. 우선 TNotifyEvent의 정의부터 보도록 합시다. type TNotifyEvent = procedure (Sender: TObject) of object; 위의 형식에다가 그대로 대입만 해주면 되겠지요? 참, 참고로 '... of object'를 보도록 하죠. 지금까지 함수포인터 얘기를 자주 했지요? 그런데 'of object'는 왜 붙어야 할까요? 결론부터 얘기하자면 'of object'를 덧붙임으로서 TNotifyEvent는 객체(object)의 함수포인터가 됩니다. 즉 일반 함수포인터의 선언시에는 'of object'가 빠지게 됩니다. 그럼 우.. 2023. 7. 20.
델파이 컴포넌트(Component) 4편 델파이 컴포넌트(Component) 이벤트 추가 우선 이벤트를 받아오는 함수에 대해서 알아야 할 것입니다. WM_MOUSEMOVE이벤트가 발생할때 반응하는 함수를 만들어 보도록 합시다. 우선 윈도우 메시지를 처리하는 함수를 다음은 Controls.pas의 함수의 선언입니다. procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE; 지금까지 보아오던 함수와는 조금 다르죠? 뒤에 있는 'message WM_MOUSEMOVE'는 'WM_MOUSEMOVE'이벤트를 받아서 처리를 하겠다는 의미일테구요. 매개변수로 들어간 Message는 처리할 메시지의 값이 들어가겠지요? 그럼 이 함수의 실체를 보도록 합시다 procedure TControl... 2023. 7. 19.
델파이 컴포넌트(Component) 3편 델파이 컴포넌트(Component) 3편 속성 우선 우리의 버튼에 특성을 주어 봅시다. 가장 눈에 잘띄는 속성은 Caption일 겁니다. constructor TMyButton.Create( AOwner : TComponent ); begin inherited Create(AOwner); // 생성시에 할일... Caption := '눌러봐!'; Font.Name := 'fixedsys'; Font.Size := 9; Width := 200; Height := 150; end; 이상과 같이 Create함수를 바꿔보고 컴포넌트를 다시 컴파일 합시다. 컴포넌트의 컴파일은 패키지에서 'Compile'버튼을 누르면 됩니다. 패키지는 기본적으로 'Dclusr30.dpk'를 사용하게 되는데 'Component'메뉴.. 2023. 7. 18.
델파이 컴포넌트(Component) 2편 델파이 컴포넌트(Component) 2편 생성(Create)과 해제(Destroy) 솔직해 컴포넌트는 이 두가지만 잘 해주면 거의 끝난것이라고 할수 있습니다. 많은 분들이 이 두가지를 잘못해서 컴포넌트와의 싸움에서 쓴잔을 마시고 계신줄 알고 있습니다. 가령 폼위에 컴포를 올려놓기는 했는데 삭제하려면 엑세스가 바이얼레이션한다는 보기싫은 메시지를 토해놓는다던지, 델파이가 종료가 안된다던지, 혹은 아주 보기 드믈게 윈도우가 다운된다던지 하는 일의 대부분은 Create와 Destroy를 잘못해서 생기는 일입니다. 하지만 절대 어려운 일이 아닙을 미리 밝혀드립니다. 먼저 강좌에서 만든 'MyButton.pas'를 봅시다. 많이 보던 코드들이 나와 있죠? 처음 보는 함수가 하나 만들어져 있음을 볼수 있습니다. 바로.. 2023. 7. 17.
델파이 컴포넌트(Component) 1편 델파이 컴포넌트(Component) 1편 델파이에서의 컴포넌트(Component)는 재사용 가능한 UI 요소를 나타내는 객체입니다. 컴포넌트는 시각적인 디자인 요소와 그에 대한 동작 및 속성을 포함할 수 있으며, 델파이 애플리케이션 개발에서 중요한 역할을 합니다. 델파이의 컴포넌트는 시각적인 요소를 담당하는 시각 컴포넌트(Visual Component)와 비시각적인 요소를 담당하는 비시각 컴포넌트(Non-Visual Component)로 구분할 수 있습니다. 시각 컴포넌트(Visual Component) 시각 컴포넌트는 사용자 인터페이스(UI)의 일부를 구성하는 요소로, 폼(Form) 위에 배치되어 시각적으로 표현됩니다. 버튼, 레이블, 리스트 박스, 텍스트 상자 등과 같은 UI 컨트롤들이 시각 컴포넌트.. 2023. 7. 14.
델파이 DSPack MP4 델파이 DSPack MP4 delphi dspack mp4 델파이 컴포넌트중 영상을 재생하고 컨트롤할수있는 컴포넌트 DSPack 이라는놈이 있다~! 허나 데모판을 보면 모두 AVI나 모 처음듣는 확장자를 볼수도있지만 모두 영상 관련 확장자이다!!! 간단하게 설명하겠다~! Filtergraph와 videowindow를 폼에 놓고 filtergraph를 video window에 연결하고 renderfile을 호출했다... FFDShow가 이미 설치되어 있고 작동하지 않을 때 자동으로 ffdshow를 선택하도록 필터 그래프를 설정하는 방법을 알려주실 수 있습니까 ? 그래프 빌더는 RenderFile메소드에 전달하는 파일을 렌더링하기 위한 적절한 필터를 선택해야 합니다 . 그것이 내가 언급한 자동적인 방법입니다.. 2021. 11. 11.