본문 바로가기

델파이445

델파이 익명메소드 Part2 익명 메소드의 사용 익명 메소드는 다음의 예와 같이 일반적으로 어떤 것에 대입됩니다. 익명 메소드는 또한 함수에 의해 리턴되거나 메소드를 호출할 때 파라미터 값으로 전달될 수도 있습니다. 예를 들어, 아래는 바로 위에서 정의한 익명 메소드 변수 myFunc를 사용하 는 코드입니다. 익명 메소드 뿐만 아니라 메소드 참조도 메소드 변수에 대입될 수 있습니다. 예를 들면 다음 과 같습니다. 하지만, 그 반대는 되지 않습니다. 익명 메소드를 일반 메소드 포인터에 대입할 수는 없습니다. 메소드 참조는 매니지드 타입이지만 메소드 포인터는 언매니지드 타입입니다. 따라서 타입 안전성의 이유로 메소드 참조를 메소드 포인터로 대입하는 것은 지원되지 않습니다. 예를 들어, 이벤트는 메소드 포인터 값 속성이므로, 익명 메소드.. 2021. 5. 27.
델파이 익명메소드 Part1 델파이 익명메소드 Part1 이름이 시사하는 것처럼, 익명 메소드(anonymous method)는 이름이 연관되지 않은 프로시저나 함수 익명 메소드는 어떤 코드 블록을 변수에 대입될 수 있거나 메소드의 파라미터로 사용될 수 있는 엔티티로 취급합니다. 또한 익명 메소드는 그 메소드가 정의된 문맥에서 변수나 변수에 지정된 값을 가리킬 수도 있습니다. 익명 메소드는 단순한 문법으로 정의되고 사용될 수 있습니다. 익명 메소드는 다른 언어들의 클로저(closure) 문법과 유사합니다. 익명 메소드의 문법 익명 메소드는 일반 프로시저나 함수와 비슷하게 정의되지만 이름이 지정되지 않습니다. 예를 들어, 아래 함수는 익명 메소드로 정의된 함수를 리턴합니다. MakeAddr 함수는 이름 없이 선언된 함수, 즉 익명 메.. 2021. 5. 26.
델파이 배열 상수 델파이 배열 상수 다목적 웹 프로그래밍 언어 인 Delphi에서 배열 은 개발자가 일련의 변수를 동일한 이름으로 참조하고 숫자 (인덱스)를 사용하여 분할 수 있도록합니다. 대부분의 시나리오에서 배열을 변수로 선언하여 런타임에 배열 요소를 변경할 수 있습니다. 그러나 때때로 상수 배열 (읽기 전용 배열)을 선언해야합니다. 상수 또는 읽기 전용 변수의 값을 변경할 수 없습니다. 따라서 상수 배열 을 선언하는 동안 이를 초기화해야합니다. 세 개의 상수 배열 선언 이 코드 예제는 Days , CursorMode 및 Items 라는 세 개의 상수 배열을 선언하고 초기화 합니다. Days 는 6 개 요소로 구성된 string 형 배열입니다. Days [1]은 Mon 문자열을 반환합니다. CursorMode 는 두 .. 2021. 5. 25.
델파이 10 3 추가된 문법 델파이 10 3 추가된 문법 델파이 언어가 10.3 버전부터 로컬 변수 선언에 있어 훨씬 더 융통적으로 변합니다. 매우 핵심적인 기능 변화라고 볼 수 있습니다. 이번 업데이트는 본래 파스칼(Pascal) 언어의 핵심 개념을 깨는 변화이기는 합니다. 하지만 이 변화는 많은 장점을 제공하며, 이를 통해 불필요한 코드를 줄일 수 있습니다. 예전 스타일의 Var 블록 터보파스칼 1부터 지금까지 기존 파스칼 언어 규칙에 따라 모든 로컬 변수 선언은 함수(function), 프로시저(procedure), 메소드(method) 작성 전에 var 블록에 선언해야만 했습니다. procedure Test; var I: Integer; begin I := 22; ShowMessage (I.ToString); end; 인라인.. 2021. 5. 24.
MessageBox 사용법 데스크톱 (Windows) 응용 프로그램의 경우 메시지 (대화 상자) 상자를 사용하여 응용 프로그램 사용자에게 일부 작업을 수행해야 함, 일부 작업이 완료되었음을 알리거나 일반적으로 사용자의주의를 끌 수 있습니다. 에서 델파이사용자에게 메시지를 표시하는 방법에는 여러 가지가 있습니다. ShowMessage 또는 InputBox와 같이 RTL에서 제공되는 루틴을 표시하는 기성 메시지를 사용할 수 있습니다. 또는 (재사용을 위해) 자신 만의 대화 상자를 만들 수 있습니다 : CreateMessageDialog. 위의 모든 대화 상자의 일반적인 문제는 응용 프로그램이 활성화되어 있어야 사용자에게 표시된다는 것 입니다. "활성"은 응용 프로그램에 "입력 포커스"가있는 경우를 나타냅니다. 사용자의주의를 끌고 다른.. 2021. 5. 20.
FMX debugging Can't bind address, Address already in use FMX debugging Can't bind address, Address already in use (FMX 디버깅 주소를 바인딩 할 수 없습니다. 이미 사용중인 주소입니다.) 다음이 필요할 수 있습니다. IDE 다시 시작 adb.exe 종료 Windows 다시 시작 장치 다시 시작 위의 단계 중 일부만 수행 한 후 다시 디버그 할 수있는 경우도 있지만 모든 단계를 수행해야하는 경우가 많습니다. 모든 시도에 많은 시간이 걸리기 때문에 완전한 Windows 재시작 + 장치 재시작이 가장 빠른 방법이라는 것을 알았습니다. 10.3 리오에서는 안드로이드 4.x.x 버전을 지원하지 않습니다. 즉 5.0 이상을 지원하니 폰을 바꾸어 테스트를 해 보심이.... 델파이 버전 별 지원 가능한 안드로이드 버전 http.. 2021. 5. 19.
델파이 제네릭(Generic) 과 제너릭(Generic)을 사용한 예제 델파이 제네릭(Generic) 과 제너릭(Generic)을 사용한 예제 제너릭과 제너릭을 사용한 예제 제너릭이라는 단어는 자바등의 언어에서는 들어보거나 사용해 보신 분들도 있지만 델파이 개발자들은 아직 생소하거나 코드를 제대로 구현해 본적이 없는 분들도 있습니다. 또한 기존의 소스를 수정하시는 것이 번거롭다고 생각할수도 있습니다. 그래서 이 자료에서는 델파이 2009버전부터 추가되어 사용되는 제너릭의 전반적인 개념과 델파이에서 사용되는 제너릭 컬렉션 등을 소개해 보도록 하겠습니다. 제너릭이 무엇인지 설명하기 전에 델파이에서 제너릭을 사용하지 않았던 시점의 코드를 한 번 살펴 보도록 하겠습니다. 제너릭을 사용하지 않은 선언 및 호출 프로시저와 함수들을 선언할 때 우리는 항상 프로시저, 함수 등의 매개변수 .. 2021. 5. 19.
델파이 제네릭(Generic) 문법 변경 사항 델파이 제네릭(Generic) 문법 변경 사항 아래의 변경 사항들은 제네릭 혹은 제네릭 타입을 지원하기 위한 것들입니다. 2021. 5. 18.
델파이 제네릭(Generic) 클래스 변수 표준함수 델파이 제네릭(Generic) 클래스 변수 표준함수 제네릭 타입 내에서 정의된 클래스 변수는 타입 파라미터에 의해 타입이 인스턴스화될 때마 다 인스턴스화됩니다. 다음의 코드는 TFoo.FCount 및 TFoo.FCount가 단 한번 인스턴스화되고 이들은 서로 다른 변수라는 것을 보여줍니다. 표준함수와 문법의 변경 사항 다음은 제네릭을 지원하기 위한 표준 함수의 변경 사항들입니다. 예제는 다음과 같은 형식입니다. 표준 함수들: 2021. 5. 18.
IE캐시를 모두 지우기 IE캐시를 모두 지우기 uses WinInet; procedure DeleteIECache; var lpEntryInfo: PInternetCacheEntryInfo; hCacheDir: LongWord; dwEntrySize: LongWord; begin dwEntrySize := 0; FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize); GetMem(lpEntryInfo, dwEntrySize); if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize; hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntryS.. 2021. 5. 14.
델파이 제네릭(Generic) 용어 델파이 제네릭(Generic) 용어 ■플랫폼 요구 사항들과 차이점들 델파이의 제네릭은 .NET 2.0 및 그 이후 버전, 그리고 네이티브 Win32 컴파일러에서 지원 됩니다. 이들 플랫폼들에서 지원되는 기능들에는 약간의 차이들이 있습니다. ■ 런타임 타입 정보(RTTI) Win32에서, 제네릭과 메소드는 RTTI 정보를 갖지 않지만 인스턴스화된 타입은 RTTI 정보 를 갖습니다. 인스턴스화된 타입은 제네릭과 파라미터들의 집합의 조합입니다. ■ 인터페이스 GUID Win32에서, 인스턴스화된 인터페이스 타입은 인터페이스 GUID를 갖지 않습니다. ■ 인터페이스 내의 파라미터화된 메소드 Win32에서, 파라미터화된 메소드(타입 파라미터와 함께 선언된 메소드)는 인터페이스 내 에서 선언될 수 없습니다. .NE.. 2021. 5. 12.
델파이 제네릭(Generic) 개요 델파이 제네릭(Generic) 개요 제네릭, 혹은 제네릭 타입이라는 용어들은 타입으로 파라미터화될 수 있는 기반 내의 것들 의 집합을 설명합니다. 제네릭이라고 말했을 때 제네릭 타입과 제네릭 메소드(제네릭 프로 시저와 제네릭 함수)를 의미하기도 합니다. 제네릭은 알고리즘(프로시저나 함수 등)이나 데이터 구조(클래스, 인터페이스, 레코드 등) 를 그 알고리즘 혹은 데이터 구조가 사용하는 하나 이상의 구체적인 타입으로부터 관계를 끊는 것을 허용하는 추상화 방법들의 집합입니다. 그 정의에서 다른 타입들을 사용하는 메소드나 데이터 타입은 하나 이상의 구체적 타입을 타입 파라미터로 대체시킴으로써 더 일반화시킬 수 있습니다. 그런 후 그런 타입 파라미터 를 메소드나 데이터 구조 선언의 타입 파라미터 리스트에 추가하.. 2021. 5. 12.
델파이 인터페이스 델파이 인터페이스 인터페이스는 무엇인가?, 인터페이스 정의하기, 인터페이스를 구현하기. 델파이에서, "inteface"라는 키워드는 두개의 다른 뜻으로 쓰입니다. OOP의 용어로는, 인터페이스를 '구현이 없는 클래스'라고 생각할 수 있습니다. 델파이 unit의 정의로는, interface section은 유닛의 코드중 public section을 선언하는 데 쓰입니다. 이글은 OOP입장에서의 인터페이스를 설명할 것입니다. 돌처럼 단단한 어플리케이션을 만들고 싶고, 코드를 유지보수하기 쉽고, 재사용 가능하고, 유연한 방법으로 만들고 싶다면, 델파이의 OOP적 품성이 당신의 가는 길의 70%를 도와줄 겁니다. 인터페이스들을 정의하고, 그 인터페이스들을 구현하는 것이 나머지 30%를 도와줄 겁니다. < Abs.. 2021. 5. 11.
델파이 다중 동적 배열 델파이 다중 동적 배열 laBuffer : array [0..9, 0..19] of Integer ​ var laBuffer: array of array of Integer; I: Integer; begin SetLength(laBuffer, 10); for I := 0 to 9 do SetLength(laBuffer[I], 20); end; 2021. 5. 11.
델파이 TThread 사용 길잡이 델파이 TThread 사용 길잡이 초보자를 위한 TThread 사용 길잡이 질답 게시판을 보다 보면 쓰레드에 관한 질문이 많이 올라 오는데, 특히 초보자분들이 쓰레드의 사용법을 잘 모르고 계신 경우가 많은 것 같아, 언제 한 번 써야겠다고 생각하고 있었는데, 오늘따라 일도 손에 잘 안 잡히고 해서 한번 정리해 봅니다.... 언제 쓰레드가 필요한가? 사실 대부분의 프로그램에서는 굳이 쓰레드를 사용할 일이 없습니다. 설계 시점에서 과연 쓰레드를 써야 하는 건지를 먼저 고민해 보십시오. 타이머로도 충분히 처리할 수 있는 것을 굳이 쓰레드를 사용할 필요는 없다는 것입니다. 쓰레드 사용이 꼭 필요한 부분 중 하나는 분산처리를 필요로 하는 프로젝트입니다. 요즘의 PC들은 멀티코어가 기본입니다. 우리의 델파이는 워낙.. 2021. 5. 10.
델파이 예외처리 try except on E: Exception do ShowMessage(E.Message); end; 2021. 5. 6.
Delphi OOP와 C++과의 차이 [5] Delphi OOP와 C++과의 차이 [5] Exception Handling ================== C++과 델파이에서의 예외처리를 비교하기 위해서 13월과같이 유효하지않은 입력을 했을때의 Exception Handling을 처리하는 방법을 살펴보자. 컴파일러는 볼랜드 C++ 4.5 를 이용했다. #include #include // 유효하지않은 월 입력의 에러코드 #define ErrorCodeInvalidMonth 100 // 예외 에러코드핸들링을 위한 크래스 선언 class Exception { private: int m_ErrorCode; public: Exception(int ErrorCode) { m_ErrorCode = ErrorCode; } int GetErrorCode() {.. 2021. 4. 30.
Delphi OOP와 C++과의 차이 [4] Delphi OOP와 C++과의 차이 [4] Message Hook ============ 델파이에서의 메시지 후킹을 알아보기전에 C++과 비교하는 의미로써 MFC를 이용한 간단한 예제를 올린다. 다음 소스는 메시지 맵핑테이블을 이용해 서 마우스이벤트를 후킹한다. #include #include //---- MainWindow Frame Class class CTestWnd : public CFrameWnd { public: CTestWnd(); virtual ~CTestWnd(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); DECLARE_MESSAGE_MAP() }; BEGIN_MESSAGE_MAP(CTestWnd, CFrameWnd) ON_WM_.. 2021. 4. 29.
Delphi OOP와 C++과의 차이 [3] Delphi OOP와 C++과의 차이 [3] Virtual Method ============== 버추얼함수는 선조의 메소드를 후손에서 오버라이딩해서 사용하게 할 수있 도록해주는 C++이 갖는 가장 큰 장점인 Polymorphic Behavior 메카니즘을 제공해준다. 델파이는 C++과 마찬가지로 호출될 함수의 포인 터를 갖는 VMT(Virtual Method Table)을 생성한다. 그러나 델파이는 추가 적으로 런타임시에 힙으로부터 VMT를 생성해주는 Dynamic Virtual Method 를 제공한다. VMT가 런타임시에 동적으로 생성되는것만 다르고, C++의 버 추얼함수하고는 같은 기능을 갖는다. 이 기능은 실행화일상에 VMT 테이블 이 생성되는것을 피해서 화일 사이즈를 작게 만들도록해준다. C+.. 2021. 4. 28.
Delphi OOP와 C++과의 차이 [2] Delphi OOP와 C++과의 차이 [2] Access Method ============= 보통 C++에서는, private 멤버를 참조하기 위해 Get..., Set...으로 시작 하는 메소드를 두게된다. class MyClass { private: int m_privateInt; public: int GetPrivateInt() const; void SetPrivateInt(); // range checking }; void foo() { MyClass myobject; int MyInt; MyInt = meobject.GetPrivateInt(); myobject.SetPrivateInt(1); }; 델파이에서는 access method 메카니즘에 의해서 보다 편하게 사용 할 수 있는 방법이 제.. 2021. 4. 27.