C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[70618] 감사합니다. 냉무..
땅주인 [heaven2] 3213 읽음    2014-01-04 14:27
둘리.CSIEDA 님이 쓰신 글 :
: 그림을 보니 docking 을 사용하여 특정 폼을 docking 한 형태군요.
:
: 그리고 원하시는 부분이 drag bar를 제거하고 싶으신거군요.
:
: docking할 경우 drag bar가 자동적으로 만들어져서 그렇습니다.
:
: 오래전에 저도 이문제를 해결하기 위하여 한참 찾아보았으나 제가 내린 결론은
:
: docking 되는 것이 내부적으로 drag bar를 만들고 그 drag bar height가 절대로 VCL에 의존해서는 0 이 될수 없음을 알게 되었습니다.
:
: 그래서 저는 panel을 상속받아 drag bar height을 0을 허락 하도록 만들어 사용한 적이 있습니다.
:
: 아래 부분은 제가 만든 코드 같은데요.. 오래되서 쩝...
:
: C/C++ 프로그래머이지, Delphi 코더가 아니고 , 요즘은 사용하지 않고 있는것이라 코드가 영 그렀습니다만,,,, 혹시나 해서 올립니다.
:
:
: unit cDockPanelUnit;
: 
: 
: interface
: 
: uses
:   Windows, SysUtils, Classes, Controls, ExtCtrls, Graphics;
: type
:   TXPDockTree = class(TDockTree)
:   protected
:     property DockSite;
:   public
:     GrabberSize: Integer;
:     procedure AdjustDockRect(Control: TControl; var ARect: TRect); override;
:     procedure PaintDockFrame(Canvas: TCanvas; Control: TControl; const ARect: TRect); override;
:     procedure PaintSite(DC: HDC); override;
:     constructor Create(DockSite: TWinControl);
:   end;
: type
:   TC6DockPanel = class(TPanel)
:   private
:     { Private declarations }
:   protected
:     { Protected declarations }
:   public
:     { Public declarations }
:     DockingManager: TXPDockTree;
:     constructor Create(Owner: TWinControl);
:     procedure SetGrabberSize(size: Integer);
:   published
:     { Published declarations }
:   end;
: 
: 
: procedure Register;
: 
: implementation
: 
: constructor TC6DockPanel.Create(Owner: TWinControl);
: begin
:   inherited Create(Owner);
:   DockingManager := nil;
: end;
: 
: procedure TC6DockPanel.SetGrabberSize(size: Integer);
: begin
:   self.UseDockManager:=false;
:   if(DockingManager<>nil) then
:   begin
:     DockingManager.Free;
:   end;
: 
:   DockingManager := TxpDockTree.Create(self);
:   DockingManager.GrabberSize := size;
:   self.DockManager := DockingManager;
:   //TXPDockTree.Create(self);
:   self.UseDockManager:= true;
: 
: end;
: 
: constructor TXPDockTree.Create(DockSite: TWinControl);
: begin
:   inherited Create(DockSite);
:   GrabberSize := 10;
: end;
: 
: procedure TXPDockTree.AdjustDockRect(Control: TControl; var ARect: TRect);
: begin
:   if DockSite.Align in [alTop, alBottom] then
:     Inc(ARect.Left, GrabberSize)
:   else
:     Inc(ARect.Top, GrabberSize);
: end;
: 
: procedure TXPDockTree.PaintDockFrame(Canvas: TCanvas; Control: TControl; const ARect: TRect);
: 
:   procedure DrawCloseButton(Left, Top: Integer);
:   var
:     R: TRect;
:   begin
:     {
:     R := Rect(Left + 1, Top + 1, Left + GrabberSize - 3, Top + GrabberSize - 3);
:     with Canvas do begin
:       Rectangle(R);
:       MoveTo(Left + 4, Top + 4);
:       LineTo(Left + GrabberSize - 6, Top + GrabberSize - 6);
:       MoveTo(Left + GrabberSize - 7, Top + 4);
:       LineTo(Left + 3, Top + GrabberSize - 6);
:     end;
:     }
:   end;
: 
: var
:   R: TRect;
:   Title: String;
: begin
:   R := ARect;
:   R.Bottom := R.Top + GrabberSize;
:   with Canvas do begin
:     if (Control.Tag = 0) then begin
:       Brush.Color := clBtnFace;
:       Pen.Color := clBtnShadow;
:       Font.Color := clBtnText;
:     end else begin
:       Brush.Color := clActiveCaption;
:       Pen.Color := clActiveCaption;
:       Font.Color := clCaptionText;
:     end;
:     FillRect(R);
:     Rectangle(R.Left, R.Top, R.Right, R.Bottom);
:     {
:     if (Control is TPanel) then begin
:       Font.Name := (Control as TPanel).Font.Name;
:       Title := (Control as TPanel).Caption;
:     end else begin
:       Title := Control.ClassName;
:     end;
:     }
:   end;
:   {
:   with ARect do begin
:     Canvas.TextOut(Left + 3, Top + 1, Title);
:     if Control.Tag <> 0 then Canvas.Pen.Color := clCaptionText;
:     if DockSite.Align in [alTop, alBottom] then
:       DrawCloseButton(Left + 1, Top + 1)
:     else
:       DrawCloseButton(Right - GrabberSize + 1, Top + 1);
:   end;
:   }
: end;
: 
: { Borland Code BEGIN }
: procedure TXPDockTree.PaintSite(DC: HDC);
: var
:   Canvas: TControlCanvas;
:   Control: TControl;
:   I: Integer;
:   R: TRect;
: begin
:   Canvas := TControlCanvas.Create;
:   try
:     Canvas.Control := DockSite;
:     Canvas.Lock;
:     try
:       Canvas.Handle := DC;
:       try
:         for I := 0 to DockSite.ControlCount - 1 do
:         begin
:           Control := DockSite.Controls[I];
:           if Control.Visible and (Control.HostDockSite = DockSite) then begin
:             R := Control.BoundsRect;
:             AdjustDockRect(Control, R);
:             Dec(R.Left, 2 * (R.Left - Control.Left));
:             Dec(R.Top, 2 * (R.Top - Control.Top));
:             Dec(R.Right, 2 * (Control.Width - (R.Right - R.Left)));
:             Dec(R.Bottom, 2 * (Control.Height - (R.Bottom - R.Top)));
:             PaintDockFrame(Canvas, Control, R);
:           end;
:         end;
:       finally
:         Canvas.Handle := 0;
:       end;
:     finally
:       Canvas.Unlock;
:     end;
:   finally
:     Canvas.Free;
:   end;
: end;
: { Borland Code END }
: 
: procedure Register;
: begin
:   RegisterComponents('EDAFramework6', [TC6DockPanel]);
: end;
: 
: end.
: 

:
:
:
:
: 땅주인 님이 쓰신 글 :
: : 환경: C++ Builder XE5 ( RAD Studio XE5)
: :
: : [BCB] 메인창이 뜰때 폼을 Docking상태로 뜨게 할 수 있을가요?
: : http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_faq&no=46
: :
: : 를 응용해서 첨부하는 그림처럼 left Window/Right Window로 나누었습니다.
: : 그런데, Left Windows는 붙박이로 쓰고 좌우 넓이만 조절하고 싶고, Left Windows의 위쪽 헤더에  해당하는
: : 부분을 모두 삭제하고 싶습니다.(판넬에 윈도우가 들어가 있는 상황)
: :
: : 그냥 MDIChidl영역의 왼쪽 윈도우와 오른쪽 윈도우로 갈라서,
: : 왼쪽 윈도우에 해당 윈도우 화면을 그대로 붙이는 방법이 있나요? (굳이 판넬을 써서 붙여야 하는 것이 좀 그래서.. )
: :
: : 모양도 이쁘지 않고요..
: :
: : 고수님들의 조언을 부탁드립니다.
: :
: : 감사합니다
: :

+ -

관련 글 리스트
70582 [질문] MDI 화면에서 Client 영역을 Left/Right 영역으로 나누어서 왼쪽은 붙박이로 쓰고 싶어요.. 땅주인 6782 2013/12/27
70627     Re:[질문] MDI 화면에서 Client 영역을 Left/Right 영역으로 나누어서 왼쪽은 붙박이로 쓰고 싶어요.. kylix 2722 2014/01/06
70629         Re:Re:[질문] MDI 화면에서 Client 영역을 Left/Right 영역으로 나누어서 왼쪽은 붙박이로 쓰고 싶어요.. 땅주인 3065 2014/01/06
70615     Re:[질문] MDI 화면에서 Client 영역을 Left/Right 영역으로 나누어서 왼쪽은 붙박이로 쓰고 싶어요.. 둘리.CSIEDA 6207 2014/01/04
70618         감사합니다. 냉무.. 땅주인 3213 2014/01/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.