Your wish is my command

whitekid's blog

Archive for the ‘MadeByKidd’ tag

TimeSync: Windows7에서 안되는 문제

without comments

SyncTime 이라는 컴퓨터의 시간을 타입서버와 맞춰주는 개인적으로 만든 프로그램이 있었지요.

그런데 Windows 7으로 업그레이드한 후 작동을 하지 않습니다. 아주아주 간단한 프로그램인데 말입니다.

뒤져보니 SetLocalTime API가 SE_SYSTEMTIME_NAME 이라는 권한을 필요하다고 하네요. Windows Vista 이후 부터는 시간이라는 것도 시스템 자원이라는 개념으로 들어갔다는군요.

그래서 이 권한을 획득하고 처리했는데… 안됩니다. 뭐냐고.. Indy에서도 확인해보니 SE_SYSTEMTIME_NAME 권한을 획득하고 처리하고 있지요. 하라는데로 다 했는데 SetLocalTime 호출하면 오류가 납니다.

뒤져보니 사용자가 SetLocalTime을 호출할 이유가 없다라는 답도 있었지만, 필요에 따라서는 시간을 맞춰줄 필요가 있는데 말입니다. 위 링크에 이야기 언급한 서비스로 만드는건 배보다 배꼽이 큽니다.

생각하다가 그냥 서비스까지 동원해서 작업해버리기로 했습니다. 덕분에 설치하는 것이 조금 복잡해 지긴 했습니다. 이렇게 복잡해지니 단순 실행파일만 가지고는 안되서 셋업본으로 만들었습니다.

설치 및 다운로드는 TimeSync 페이지를 보세요.

Written by whitekid

November 3rd, 2010 at 9:04 pm

Posted in Uncategorized

Tagged with ,

pgdbx4 0.4 Release: dbExpress driver for PostgreSQL

without comments

그간 방치해뒀던 PostgreSQL용 dbExpress 드라이버를 오늘 좀 수정했습니다.

  • Boolean 형태가 잘 안가져오던 문제
  • BYTEA/TEXT 타입이 Next를 해도 다음 row를 가져오지 못하던 문제
  • 기타 기억안나는 자잘한 것…

자세한 내용은 pgexp4 페이지를 참고하세요.

Written by whitekid

November 1st, 2010 at 10:41 pm

TLinkLabel에 WordWrap 적용하기

without comments

TLinkLabel은 사용하기 따라서 상당히 유용합니다. 근디 WordWrap이 없군요. 이게 없으니깐 AutoSize를 줘도 한줄로 길게 쭈욱 나와버립니다. TLabel의 WordWrap과 같이 동작하면 참 편하겠는데 말이지요. 어찌 되었건 아래처럼 MaxWidth 변수가 사용되는 부분만 몇줄 추가하면 원하는데로 됩니다.

procedure TnxLinkLabel.AdjustBounds;
var
  DC: HDC;
  SaveFont: HFont;
  TextSize: TSize;
  Parsed: string;
  MaxWidth: Integer;
begin
  if not (csLoading in ComponentState) and FAutoSize then
  begin
    if CheckWin32Version(6) and UseThemes then
    begin
      if HandleAllocated then
      begin
        if FWordWrap then
          MaxWidth := ClientWidth else
          MaxWidth := MaxInt;

        SendGetStructMessage(Handle, LM_GETIDEALSIZE, MaxWidth, TextSize);
        SetBounds(Left, Top, TextSize.cx + (GetSystemMetrics(SM_CXBORDER) * 4),
          TextSize.cy + (GetSystemMetrics(SM_CYBORDER) * 4));
      end;
    end
    else

TCustomLinkLabel.AdjustBounds를 단 몇 줄 수정하면 되는데, AdjustBounds가 virtual로만 되어있어도 편한데 그게 아니라서 이렇게 수정만 해서는 안됩니다. 그렇다고 vcl을 직접 다시 컴파일하기도 그렇고..

결국은 TCustomLinkLabel, TLinkLabel을 모두 몽땅 가져다가 새 이름으로 콤포넌트를 등록해버렸군요. 찝찝하지만 Go~

Written by whitekid

August 26th, 2010 at 5:11 pm

Posted in Uncategorized

Tagged with ,

wslib v2

without comments

wslib v2가 릴리스 되었습니다.

TwsListView에서 컬럼을 클릭하면 자동으로 정렬하는 옵션을 추가했네요. 리스트뷰 정렬에 이제 코딩이 하나도 필요없습니다.

덧) 버전을 r2에서 v2로 변경했습니다. Google code 위키에서 r2를 SubVersion revision으로 인식하고 바로 거기로 링크를 해버리네요.

Written by whitekid

July 11th, 2010 at 11:14 am

Posted in Uncategorized

Tagged with ,

시간 동기화하기

without comments

월요일 아침엔 회의가 있습니다. 컴퓨터 시간으로 확인하고 가보니.. 헉. . 지각입니다. 이놈의 컴퓨터 시간이 늦어진거죠. 뭔 이런 일이.. 저기 있는 아날로그 시계는 정확한데, 항상 앞에두고 보는 시계가 부정확합니다.

그래서 시간 동기화하는 툴 만들었습니다. Indy를 이용하니 소스도 23줄 밖에 안됩니다. 뭐 Indy가 다하니깐요.

program TimeSync;

uses
  Windows,
  SysUtils,
  IdSNTP;

{$R *.res}

begin
  try
    with TIdSNTP.Create(nil) do
    try
      Host := '2.kr.pool.ntp.org';
      SyncTime;
    finally
      Free;
    end;
  except
    on E: Exception do
      MessageBox(0, PChar(E.Message), 'Error', MB_ICONEXCLAMATION);
  end;
end.

시작 프로그램에 등록해야겠습니다.

추가: 10.11.02

Window Vista, Windows 7에서는 동작하지 않습니다. MSDN에 보면 SetLocalTime이 SE_SYSTEMTIME_NAME 권한이 필요하다고 되어있지요. 그래서 그렇게 해주고 했는데 안됩니다. ㅡㅡ, 그래서 Indy 소스도 뒤져봤는데 Indy도 SE_SYSTEMTIME_NAME 권한을 획득하고 처리하고 있습니다. 그래도 안됩니다.

결국 관리자 권한에서 실행하는 수 밖에 없군요.

찾아보면서 본 글중에 하나는 “도데체 일반 사용자가 시간을 조종할 필요가 뭐가있냐?”라는 건데, 해주고픈 말은 야 이눔아 내 컴퓨터 시간이 잘못되어있다니깐!!!! 그래서 정확한 시간으로 맞추고 싶다고!!!!

Written by whitekid

March 29th, 2010 at 1:09 am

Posted in Uncategorized

Tagged with , , , ,