Programming/Delphi

Delphi Remove PageControl Border 델파이 페이지컨트롤 테두리 없애기

통통만두 2016. 1. 20. 12:49
반응형

델파이에서 PageControl을 사용하다가 보면 Tab의 Visible 속성을 False로 해놓을 경우에 테두리가 존재해서 신경이 많이 쓰였습니다. 그렇다고 PageControl이나 TabSheet의 속성에 Border을 None로 처리하는 Propery 같은 것이 없었고, 따로 처리할려니 영 찝찝하고.. (결국에는 따로 처리하긴 했습니다. ㅠ_ㅠ)


이렇게 말씀드려도 비개발자분이시거나 저 테두리를 지금 처음(?)보셨다는 개발자분들은.. 이게 뭐 대수냐고 하실지 모르겠지만 은근히 거슬립니다. Client 내부의 Width, Height 도 8 픽셀정도씩 차이가 나기 때문에 이미지 등이나 Width, Height 가 고정된 프로그램에서는 확실히 영향이 있습니다.



위의 화면에 PageControl의 테두리 보이시나요? 다음 화면과 비교해보시죠~





차이점이 느껴지시나요? 전 테두리가 없는 것이 훨씬 보기가 좋네요^^

그렇다면 Source 나갑니다~


// 우선 선언부에 요로코롬 선언을 합니다.
private    
    FOldTabProc : TWndMethod;
    procedure TabWndProc(var Msg: TMessage);

// Form의 Create 이벤트에 아래와 같이 작성을 합니다.
procedure TfrmMain.FormCreate(Sender: TObject);
begin
  FOldTabProc := pageMain.WindowProc;
  pageMain.WindowProc := TabWndProc;
end;

// TabWndProc 함수를 작성하면 -끗-
procedure TfrmMain.TabWndProc(var Msg: TMessage);
begin
  FOldTabProc(Msg);

  // uses commctrl
  if Msg.Msg = TCM_ADJUSTRECT then
  begin
    PRect(Msg.LParam)^.Left := 0;
    PRect(Msg.LParam)^.Right := pageMain.ClientWidth;
    Dec(PRect(Msg.LParam)^.Top, 4);
    PRect(Msg.LParam)^.Bottom := pageMain.ClientHeight;
  end;
end;



반응형