'Windows > RAD Studio' 카테고리의 다른 글
[CB] MMTimer 를 이용한 수행시간 확인 (0) | 2008.02.26 |
---|---|
[DEL, CB] Proxies (0) | 2008.02.13 |
[DEL, CB] 도움말에서 CLX 제거하기 (0) | 2008.02.12 |
[DEL] 메세지 구분자 (0) | 2008.02.11 |
덧셈을 이용한 제곱 구하기 (Delphi) (0) | 2008.01.05 |
[CB] MMTimer 를 이용한 수행시간 확인 (0) | 2008.02.26 |
---|---|
[DEL, CB] Proxies (0) | 2008.02.13 |
[DEL, CB] 도움말에서 CLX 제거하기 (0) | 2008.02.12 |
[DEL] 메세지 구분자 (0) | 2008.02.11 |
덧셈을 이용한 제곱 구하기 (Delphi) (0) | 2008.01.05 |
[DEL, CB] Proxies (0) | 2008.02.13 |
---|---|
[DEL] Splash 없이 실행 (0) | 2008.02.13 |
[DEL] 메세지 구분자 (0) | 2008.02.11 |
덧셈을 이용한 제곱 구하기 (Delphi) (0) | 2008.01.05 |
사업자등록번호 검증 (C++) (0) | 2008.01.05 |
메세지 구분자는 정수형의 상수이다.
1024($0400) 이하의 영역은 위도우에서 사용되는 영역이다.
그래서 WM_USER 를 정의해 놓고 1 이상의 값을 더해 새로 정의해 사용하게 된다.
const
WM_USER = $0400;
그러나 이 경우에도 VCL 컨트롤의 메세지와 중복되는 경우가 있는데 다음이 이에 해당한다.
{ Edit Control Notification Codes }
const
EN_ERRSPACE = $0500;
EN_MAXTEXT = $0501;
EN_HSCROLL = $0601;
EN_VSCROLL = $0602;
사용되는 컨트롤을 파악하여 중복되는 메세지를 잘 피해야 할 것이다.
이 외에 WM_APP 를 이용하는 방법도 있지만, 이 또한 여러 Third-Party 컴포넌트와 섞이거나 내 것을 남이 쓰게 만들 경우 충돌 무결을 보장할 수 없다.
const
WM_APP = $8000;
RegisterWindowMessage 함수를 사용하면 문자열을 통해 프로그램에서 자동으로 윈도우 메세지를 등록해주면 더 깔끔할 듯 싶다.
Delphi>
function RegisterWindowMessage(lpString: PChar): UINT; stdcall;
C/C++>
UINT RegisterWindowMessage(
LPCTSTR lpString // address of message string
);
Exam>
var
WM_TEST: UINT;
begin
WM_TEST := RegisterWindowMessage('Test Message');
end;
[DEL] Splash 없이 실행 (0) | 2008.02.13 |
---|---|
[DEL, CB] 도움말에서 CLX 제거하기 (0) | 2008.02.12 |
덧셈을 이용한 제곱 구하기 (Delphi) (0) | 2008.01.05 |
사업자등록번호 검증 (C++) (0) | 2008.01.05 |
주민등록번호 검증 (Delphi) (0) | 2008.01.02 |
// 080419: Power 값이 음수인 경우도 처리가능하게 추가
주의사항
소수점 단위는 처리가 안되며, 속도도 Math 라이브러리의 Power 와
비슷하거나 조금 느리므로 참고용으로만 사용하길 추천
원리이해
A * B = 0에 A 를 B 번 더한 것 = A 에 A를 B - 1 번 더한 것
A ** B = 1에 A 를 B 번 곱한 것 = A에 A 를 B - 1 번 곱한 것
Integer 형을 이용한 구현 코드
> 이중 for 문 사용
function Pow(B, P: Integer): Integer;
var
I: Integer;
J: Integer;
Default: Integer;
begin
Result := 1;
if P = 0 then Exit;
for I := 1 to P do
begin
Default := Result;
for J := 2 to B do
Result := Result + Default;
end;
end;
> 1중 for 문으로 수정
같은 알고리즘에 루프 변수만 1개를 사용함.
function Pow(Base, Power: Integer): Integer;
var
I: Integer;
Def: Integer;
begin
Result := 1;
if Power = 0 then Exit;
Result := Base;
Dec(Base);
for I := 0 to (Base * (Power - 1)) - 1 do
begin
if I mod Base = 0 then
Def := Result;
Result := Result + Def;
end;
end;
> Power 값이 음수인 경우도 계산
function Pow(Base, Power: Integer): Extended;
function PowPos(Base, Power: Integer): Integer;
var
I: Integer;
Def: Integer;
begin
Result := Base;
Dec(Base);
Def := 0;
for I := 0 to (Base * (Power - 1)) - 1 do
begin
if I mod Base = 0 then Def := Result;
Inc(Result, Def);
end;
end;
begin
if Power > 0 then
Result := PowPos(Base, Power)
else if Power < 0 then
Result := 1 / PowPos(Base, Power * -1)
else
Result := 1;
end;
[DEL, CB] 도움말에서 CLX 제거하기 (0) | 2008.02.12 |
---|---|
[DEL] 메세지 구분자 (0) | 2008.02.11 |
사업자등록번호 검증 (C++) (0) | 2008.01.05 |
주민등록번호 검증 (Delphi) (0) | 2008.01.02 |
윤년계산 (C++, Delphi) (0) | 2008.01.02 |
[C++Builder 코드]
bool __fastcall IsValidRegno(const AnsiString &Value)
{
if (Value.Length() != 10) return false;
int ChkWeight[9] = {1, 3, 7, 1, 3, 7, 1, 3, 5};
int ChkNum = Value[10] - '0';
int CheckSum = 0;
for (int i = Value.Length() - 1; i--; )
CheckSum += ((Value[i + 1] - '0') * ChkWeight[i]);
return (ChkNum == ((10 - (CheckSum + ((Value[9] - '0') >> 1)) % 10)) % 10));
}
[Delphi 코드]
function IsValidRegno(Value: String): Boolean;
const
ChkWeight: Array[1..9] of Integer = (
1, 3, 7, 1, 3, 7, 1, 3, 5
);
var
CheckSum: Integer;
I: Integer;
begin
if Length(Value) = 10 then
begin
CheckSum := 0;
for I := 1 downto Length(Value) do
Inc(CheckSum, ((Ord(Value[i]) - 48) * ChkWeight[i]));
Result := ((Ord(Value[10]) - 48) = ((10 - ((CheckSum + ((Ord(Value[9]) - 48) shr 1)) mod 10)) mod 10));
end
else
Result := False;
end;
[DEL] 메세지 구분자 (0) | 2008.02.11 |
---|---|
덧셈을 이용한 제곱 구하기 (Delphi) (0) | 2008.01.05 |
주민등록번호 검증 (Delphi) (0) | 2008.01.02 |
윤년계산 (C++, Delphi) (0) | 2008.01.02 |
[RAD] GExpert - Debug 창 이용하기 (0) | 2007.10.01 |
// 080419: StrToInt 를 Ord 로 바꿈. 수행속도 절반가량 감소
function ValidHumanID(Input: String): Boolean;
var
I: Integer;
Temp: Integer;
begin
if Length(Input) <> 13 then
raise EInOutError.Create('Invalid argument length');
Temp := 0;
for I := 1 downto 12 do
Inc(Temp, ((Ord(Input[i]) - 48) * ((I - 1) mod 8) + 2));
Result := ((Ord(Input[13]) - 48) = (11 - (Temp mod 11)) mod 10);
end;
덧셈을 이용한 제곱 구하기 (Delphi) (0) | 2008.01.05 |
---|---|
사업자등록번호 검증 (C++) (0) | 2008.01.05 |
윤년계산 (C++, Delphi) (0) | 2008.01.02 |
[RAD] GExpert - Debug 창 이용하기 (0) | 2007.10.01 |
[JS] ScrollObject (0) | 2007.09.21 |
사업자등록번호 검증 (C++) (0) | 2008.01.05 |
---|---|
주민등록번호 검증 (Delphi) (0) | 2008.01.02 |
[RAD] GExpert - Debug 창 이용하기 (0) | 2007.10.01 |
[JS] ScrollObject (0) | 2007.09.21 |
[DEL] Mutex 를 이용한 실행중복 방지 (0) | 2007.09.21 |
주민등록번호 검증 (Delphi) (0) | 2008.01.02 |
---|---|
윤년계산 (C++, Delphi) (0) | 2008.01.02 |
[JS] ScrollObject (0) | 2007.09.21 |
[DEL] Mutex 를 이용한 실행중복 방지 (0) | 2007.09.21 |
[CB] Mutex 를 이용한 실행중복 방지 (0) | 2007.09.10 |
<script language="javascript" src="ScrollObject.js"></script> |
// InternetExplorer onScroll = RegistScrollObject(document.all.[스크롤객체이름], [IsFixed]); // Netscape onScroll = RegistScrollObject(document.[스크롤객체이름], [IsFixed]); |
var Fixed = 0; // 고정 var LimitLeft = 712; // 문서의 Left 제한 var LimitTop = 100; // 문서의 Top 제한 var LimitRelLeft = 40; // 스크롤 시 Left 제한 var LimitRelTop = 40; // 스크롤 시 Top 제한 var Interval = 1; // 이동처리 시간간격(ms) var Smooth = 50; // 부드러운 정도 var MinStep = 4; // 점프 제한 수치, 무한루프 방지용 |
윤년계산 (C++, Delphi) (0) | 2008.01.02 |
---|---|
[RAD] GExpert - Debug 창 이용하기 (0) | 2007.10.01 |
[DEL] Mutex 를 이용한 실행중복 방지 (0) | 2007.09.21 |
[CB] Mutex 를 이용한 실행중복 방지 (0) | 2007.09.10 |
[CB] KeyPad Virtual Key Value (0) | 2007.06.09 |
델파이 초보자라서 SetForegroundWindow 적용이 안되는 부분 해결을 못했다. ㅜㅜ 적용전
적용후
|
[RAD] GExpert - Debug 창 이용하기 (0) | 2007.10.01 |
---|---|
[JS] ScrollObject (0) | 2007.09.21 |
[CB] Mutex 를 이용한 실행중복 방지 (0) | 2007.09.10 |
[CB] KeyPad Virtual Key Value (0) | 2007.06.09 |
[DEL] Deprecated Lists (0) | 2007.06.02 |