WindowShake 함수를 수정하여 메신저 창 흔들기 따라하기.




갑자기 탐색기 검색이 동작을 하지 않아서 만들었다.
하위 디렉토리 구조를 전부 탐색하여 존재하는 파일에 대하여
시작지점 하위에 확장자 이름으로 폴더를 만들고
이곳에 구분할 수 있는 이름으로 파일을 복사함.

단, 1차 하위 폴더명으로 구분을 하므로 2차 이하에 중복파일이 존재 할 경우 하나는 무시됨.

p.s: 다 하고나니 탐색기 검색이 동작을 하여 허탈함.


폼의 크기를 변경할 때 내부 컨트롤이 폼 크기 안에서 다 보여지지 않을 경우 자동으로 스크롤이 생긴다. (TScrollingWinControl 의 기능)
이때, 6버전 이하의 경우 폼의 스킨이 윈도우에 설정 된 스킨이 아닌 XP 스킨 비슷한 것으로 바뀐다. (Delphi7 에서는 발생하지 않아 6버전 이하라고 추측함)
이에 대한 해결책은 호환 모드를 변경하여 실행시 하위 OS 호환 모드로 실행하는 것으로,
레지스트리에 키를 하나 만들어 주는 것으로 해결된다.
(그래도, 최고의 해결책은 Aero 를 지원하는 상위버전(최신 버전이 가장 좋을 듯)의 개발툴을 사용하는 것이다.) 

아래는 실행 시 자동으로 실행파일을 WinXP SP3 호환 모드로 바꿔주는 코드이다.


bool __fastcall IsWordCompleted(const String &AValue)
{
    for (int i = AValue.Length() + 1; --i > 0; )
        if (AValue[i] == -92)
            return false;
    return true;
}

자음 또는 모음 만 있는 글자는 LeadByte 가 FFFFFFA4(-92) 가 되므로 이를 판단하면 된다.
Console mode application 에서는 main 함수의 인자로 argv, argc 가 넘어오는데 이를 사용할 수 있다. 이에 해당하는 VCL Applicatoin 에서의 변수명은 _argv, _argc 다.

새 프로젝트를 생성하면 프로젝트명.res 파일이 있는데 이를 Image Editor 에서 직접 편집하면 가능된다. 기본 아이콘은 32x32 크기로 이를 16x16 로 축소시켜 TaskBar 등에 나타내게 되는데 16x16 크기의 아이콘을 미리 만들어 놓아도 된다.


TEdit 의 Style 에 ES_NUMBER 를 추가하면 된다.
아래는 코드 상에서 컨트롤을 바꿔서 처리하는 예제다.


class TEdit : public Stdctrls::TEdit
{
    typedef Stdctrls::TEdit inherited;

protected:
    virtual void __fastcall CreateParams(TCreateParams &Params)
    {
        inherited::CreateParams(Params);
        Params.Style |= ES_NUMBER;
    }
}

이렇게 하면 아쉽게도 실수('.' 포함 숫자) 처리가 되지 않는다.
직접 숫자 처리를 해 주거나 TEdit.OnKeyPress 에서 '.' 입력 시 SelText = "." 을 해주면 된다. 하지만 이 방법은 Beep 음이 나서 추천하지 않는다.
같은 방법으로 숫자 이외의 특정 문자를 입력 가능하게 할 수 있지만 Beep 음이 난다.
이 방법은 정수처리에만 적용하길 추천한다.


OnNewWindow2 이벤트에서 ppDisp 을 원하는 브라우저로 바꿔줌으로써 가능하다.

(예제 파일은 C++Builder 6.0 코드만 첨부)






procedure DrawBitmap(ATarget: TCanvas; ASource: TGraphic);
var
  mfPrint: TMetafile;
  mfCanvas: TMetafileCanvas;
begin
  mfPrint := TMetafile.Create;
  try
    mfCanvas := TMetafileCanvas.Create(mfPrint, 0);
    Try
      mfCanvas.Draw(0, 0, ASource);
    finally
      mfCanvas.Free;
    end;
    ATarget.Draw(0, 0, mfPrint);
  finally
    mfPrint.Free;
  end;
end;



+ Recent posts