델파이 파이어댁 tDataSet.Distinct 중복 데이터 제외하기

​예를 들어 0, 0, 1, 1, 1, 2, 2의 데이터를 0, 1, 2로 출력하려면 데이터베이스의 distinct 명령을 이용한다. 파이어댁 메모리 테이블의 경우에도 같다. 쿼리를 이용해도 되지만 tFDMemTable의 인덱스 프라퍼티를 이용할 수도 있다. tFDIndex는 tDataSet.Indexes를 컬렉션으로 하는 컬렉션 아이템이다. 리스트 아이템을 다루듯 하면 된다.

c#과 델파이의 정수 나누기 결과 차이

델파이의 경우 단순하다. 무엇을 무엇으로 나누던 그 결과를 그대로 반환한다. 예를 들어 1/2를 정수 변수에 반환하려 하면 오류로 처리된다. 그러나 c#에서는 복잡하다. 정수를 정수로 나누면 정수 즉 몫만 반환한다. For the operands of integer types, the result of the / operator is of an integer type and equals the quotient of the two operands rounded…

델파이 마우쓰 클릭 제어하기

아래 코드는 마우쓰의 왼쪽 버튼을 클릭하게 하는 예제다. 마우쓰를 손으로 움직이지 않고 제어해야 할 때 필요하다. mouse_event는 윈도우즈 api에 있는 함수인데 이 api가 통째로 델파이에 임포트되어 있어서 편하게 쓸 수 있다. MOUSEEVENTF_LEFTDOWN 같은 상수들도 따로 선언할 필요 없다. 누르는 명령을 실행한 뒤에는 이어서 떼는 동작도 실행을 해야 하는 거에 유의한다.

델파이 마우쓰 포인터 이동하기

아래의 코드는 모니터의 특정 위치로 마우쓰 포인터를 움직이는 예제다. 패러미터들은 각각 x와 y의 좌표이고 전자가 음수인 건 매인 모니터의 왼쪽에 있는 모니터라서 그렇다.

델파이 마우쓰 포인터 좌표 구하기

마우쓰 포인터가 폼 밖으로 나간 때 디스플래이 차원의 위치를 구해야 할 때가 있다. 예를 들어 특정 위치로 포인터를 움직이게 하고 거기를 클릭하게 하려고 하는 작업을 할 때다. 어딘가로 포인터를 보내려면 그 전에 가야 할 곳의 좌표를 알아야겠지. 불법 트래이딩 애플리캐이션을 쓸 때 매수나 매도를 더 편하게 하려고 해당 버튼들을 자동으로 클릭하게 할 때 유용하다. 일반적인…

c# round와 반올림

round의 뜻 round는 반올림이라는 뜻이 아니라 ‘특정 자리의 수를 올리거나 내려서 어림수로 만든다’는 의미로 동사다. ‘어림수’라는 명사로는 쓰이지 않는다. 명사인 어림수는 round number/figure라고 한다. 일부 영한사전들에는 반올림이라고 나와 있지만 이는 틀리다. round는 가까운 수로 바꿀 수 있고 먼 수로도 바꿀 수 있다. 컴퓨터 프로그래밍을 하다 보면 round towards zero라는 걸 만나게 되는데 이때에는 ‘내림floor‘이나 ‘버림truncate‘이…

델파이 파이어댁 메모리 테이블 tFDMemTable

메모리 테이블 데이터베이스 서버를 써야 할 정도로 데이터의 크기가 크지 않다면 메모리 테이블이 좋은 대안이다. 그러나 메모리 테이블을 이용하는 건 서버를 이용하는 거보다 편할 뿐 성능은 다른 문제다. 이름 그대로 데이터를 메모리에서만 이용하고 마는 경우는 드물고 메모리 테이블을 이용해도 파일로 저장하고 읽고를 하게 마련이다. 이 부분에서 메모리 테이블을 이용하는 것과 데이터베이스 서버를 이용하는 것에 원칙적인…

델파이 cng를 이용한 암호화와 복호화

윈도우즈를 설치하면 CryptoAPI와 CNGcryptography api: next generation라는 암호화/복호화cryptography 라이브러리를 이용할 수 있다. CryptoAPI는 오래 전에 나온 거로 crypt32.dll을 이용하면 되고 cng는 그 이름에서 알 수 있듯이 차세대 라이브러리로 마이크로소프트가 현재 밀고 있는 거다. bcrypt.dll과 ncrypt.dll을 이용하면 되며 이들 모두 windows/system32 폴더에 있다. cng의 bcrypt는 바이너리 암복호화에 이용되고 ncrypt는 서버와 클라이언트 사이의 메시지 암복호화에 이용된다. cng는 다양한…

c# DateTime과 TimeSpan으로 날짜와 시간 제어하기

DateTime .네트의 날짜와 시간은 델파이의 그것들에 비하면 좀 특이하다. 델파이의 날짜와 시간은 모두 double인데 .네트의 DataTime은 구조체이며 이거로는 제어를 충분히 할 수 없어서 TimeSpan이라는 구조체도 같이 써야 한다. DateTime은 시점이고 TimeSpan은 길이다. double에 비해 구조체의 용량이 더 크고 작동에도 부하가 크겠지만 그 차이가 얼마나 될지는 모르겠다. .네트의 구조체는 인스턴스가 만들어진 때 그 크기가 특정되지 않으므로…