-ns 옵션으로 실행하면 된다.

'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
[팁] 델파이 6에서 CLX도움말 제거하기...... (델마당)

도움말 참고 시 VCL 만 쓰기 때문에 선택 창이 매번 떠 귀찮다.
예전에 위의 팁으로 도움말을 제거했었는데 다시 해보려니 안된다. (되면 이 글은 무시)
Delphi 7, C++Builder 6 이라서 그런가...
Delphi 는 버젼이 다르다 쳐도 C++Builder 는 6 버젼으로 예전에 바꿨던 기억이 있다.

어쨌든 적용이 안되서 헤매다가 그냥 간단하게 해결봤다.
d7clx.hlp(Delphi 7), blx2clx.hlp(C++Builder 6) 파일을 Help 폴더에서 다른 곳으로 옮겼다.
아예 쓰지 않을 계획이면 지워도 무방할 것이다.

'Windows > RAD Studio' 카테고리의 다른 글

[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;



// 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;

'Windows > RAD Studio' 카테고리의 다른 글

[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;

'Windows > RAD Studio' 카테고리의 다른 글

[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;

'Windows > RAD Studio' 카테고리의 다른 글

덧셈을 이용한 제곱 구하기 (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
// 080419: 나눗셈 연산 제거

inline bool IsLeapYear(const int &Year)
{
    return ((Year % 100 != 0? Year % 4: Year % 400) == 0);
}

function IsLeapYear(Year: Integer): Boolean;
begin
  if Year mod 100 <> 0 then
    Result := ((Year % 4) = 0);
  else
    Result := ((Year % 400) = 0);
end;

'Windows > RAD Studio' 카테고리의 다른 글

사업자등록번호 검증 (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
디버깅 중 변수 정보 등 무언가를 알기위해 메세지를 출력할 경우가 있다.
어느 작업에나 필요하기 마련이다.
DDK 의 경우에는 DbgPrint 함수와 이의 매크로 함수인 KdPrint 의 역할이다.

CodeGear 도구인 C++Builder, Delphi 의 경우
편한 환경에서 사용하기 위하여 GExpert 를 설치하는 경우가 대부분이다.
이 GExpert 안에는 디버그 메세지를 출력하는 유닛이 포함되어있다.
(따로 디버깅용 유닛을 설치해서 사용하는 어리석음은 피하자.)

1. 유닛 포함 방법
C++Builder
#include "DbugIntf.hpp"

Delphi
uses
  DbugIntf;

2. 실행 방법
C++Builder
#ifdef _DEBUG
    if (FindWindow(L"TfmDebug", NULL) == NULL) StartDebugWin();
#endif

Delphi
  if FindWindow('TfmDebug', nil) = nil then StartDebugWin;

3. 디버그 메세지 출력
이 부분은 유닛을 참고하라.
숫자출력, 메소드 시작/종료, 문자, 날짜/시간 출력 등등 다양한 함수가 있다.

'Windows > RAD Studio' 카테고리의 다른 글

주민등록번호 검증 (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
사이드에 스크롤 하면 따라오는 조그마한 메뉴를 구현하는 방법

스크립트연결 (IE, NS 공통)
<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;  // 점프 제한 수치, 무한루프 방지용

델파이 초보자라서 SetForegroundWindow 적용이 안되는 부분 해결을 못했다. ㅜㅜ

적용전
program HttpDown;

uses
  Forms,
  FmHDMain in 'FmHDMain.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


적용후
program HttpDown;

uses
  Forms,
  SysUtils,
  Windows,
  Mutex in 'Mutex.pas',
  FmHDMain in 'FmHDMain.pas' {Form1};

{$R *.res}

const
  MutexName = 'JmLaunch';

var
  hMutex: HWND;
  ClassNames: array[0..0] of PAnsiChar = (
    'TFrmLMain'
  );

begin
  if Mutex.CheckMutex(MutexName) then
  begin
    Mutex.SetActiveWindows(ClassNames, SizeOf(ClassNames) div 4);
    Exit;
  end;

  try
    hMutex := Mutex.CreateSecurityMutex(MutexName);
    if hMutex = 0 then
    begin
      raise Exception.Create('Mutex 생성 실패');
    end;

    try
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    finally
      ReleaseMutex(hMutex);
    end;
  except
    on E: Exception do Application.ShowException(E);
  end;
end.

'Windows > RAD Studio' 카테고리의 다른 글

[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

+ Recent posts