소스 편집중에 변수 선언이 필요하다면 커서 움직여서 코딩하지 말고 변수를 적고 아래의 키를 눌러본다.

  • Shift + Ctrl + V: 변수 선언 하기
  • Shift + Ctrl + D: 클래스 멤버 변수 선언하기

Shift + Ctrl + V

Shift + Ctrl + D


주의) CnPack 같은 플러그인에서 단축키를 설정할 경우 위의 키와 중복되면 안될 수 있음, 그럴땐 단축기 중복을 해제할 것.

저작자 표시 비영리 변경 금지
Posted by whitekid
TAG Delphi, IDE

아마 윈도우 XP에서인가 리스트 뷰에 그룹 기능이 들어갔습니다. 탐색기에 그룹 기능이 들어간것 보면 알수있죠. 그런데 역시나 델파이는 이거 지원해 주지 않습니다. 가려운 곳으 알아서 긁어야죠.

TListView를 상속해서 클래스 하나 만들었고 여기다 Groups라는 프러퍼티를 만들어 델파이스럽게 작업해 봤습니다. 아래 코드를 보면 대충 사용 방법을 알 수 있을 겁니다. 하지만 뭐.~ 이게 사용방법으 전부다이긴 하지만 ^^

  ListView1.GroupView := True;

  ListView1.Groups.Add.Header := 'Test group 1';
  ListView1.Groups.Add.Header := 'Test group 2';
  ListView1.Groups.Add.Header := 'Test group 3';

  if ListView1.Groups.Count > 0 then
    for Item in ListView1.Items do
      Item.Group := ListView1.Groups[Item.Index mod ListView1.Groups.Count];

이거 하면서 희안한 문제에 봉착했었는데요. 그룹의 헤더 텍스트를 변경하기 위해서 아무리 ListView_SetGroupInfo()를 이용하려고 해도 이녀석이 텍스트가 바뀌지 않습니다. 물론 문서에 아무리 뒤져봐도 안된다는 내용은 없고 따로 뭔가 해야한다는 내용도 없는데 말입니다.

결국 MS의 멍청한 버그구나하고는 헤더 텍스트를 변경하는 경우는 기존 Group을 제거하고 다시 만드는 수고스러운 작업을 해야했고, 이렇게 작업하니 그냥 술술 잘됩니다. 근데, 이게 헤더 텍스트만 그런게 아니고 헤어 정렬도 그렇더군요. 아마도 비스타에는 이런 버그가 수정되었겠지요?


덧) 델파이 2009에서는 TLVItem 구조체가 업데이트 되어서 그룹 정보를 설정할 수 있게 되네요. 그래서 Unit1.pas에서 설정한 구조체는 필요 없을지도 모릅니다.

저작자 표시 비영리 변경 금지
Posted by whitekid

StretchBlt를 이용해서 이미지를 확대 출력하면 계단현상이 발생합니다. 이를 GDI의 함수만 이용해서 halftone으로 출력할 수 있군요. 이런걸 인제서야 발견하다니. 그래도 Graphics32의 resampler보다는 거칩니다.

계단 현상 이미지

halftone으로 출력한 이미지

소스는 아주 간단합니다.

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  Dest: TRect;
  SrcBitmap: TBitmap;
begin
  SrcBitmap := TBitmap.Create;
  SrcBitmap.SetSize(Image1.Picture.Width, Image1.Picture.Height);
  SrcBitmap.Canvas.Draw(0, 0, Image1.Picture.Graphic);
  try
    with Sender as TPaintBox do
    begin
      if HalftoneCheck.Checked then
      begin
        SetStretchBltMode(Canvas.Handle, STRETCH_HALFTONE);
        SetBrushOrgEx(Canvas.Handle, 0, 0, nil);
      end;

      Dest := ClientRect;
      StretchBlt(Canvas.Handle, 0, 0, Dest.Right, Dest.Bottom,
                 SrcBitmap.Canvas.Handle, 0, 0, SrcBitmap.Width, SrcBitmap.Height,
                 SRCCOPY);
    end;
  finally
    SrcBitmap.Free;
  end;
end;

실행 파일 및 소스는 여기

저작자 표시 비영리 변경 금지
Posted by whitekid
TAG Delphi, GDI