어떻게 델파이 양식은 컨트롤을 보여주는 투명 형성 만드는 방법?

어떻게 델파이 양식은 컨트롤을 보여주는 투명 형성 만드는 방법?
정보 :
I [0] 타일을 잃었 들어 [0] 참조 | 보고서 | 관리 답글 : 7
largewang
largewang의
largewang의
등급 : 빈
# 1 점수 : 5를 뒤에 : 2002년 12월 17일 13시 58분 37초
절차 TForm1.FormCreate (발신자 : TObject의)
선두
의 BorderStyle을 = bsNone,
Brush.Style = bsClear;
끝;


// 당신이 컨트롤에 보이는 있는지 확인! ! !
| 신고 | 관리 포럼 마이크로 블로깅 보낼 우려 CSDN CSDN 통합 마구 나를 위해 유용 [0] [0] 참조 타일을 잃은
wzrlover
wzrlover
wzrlover의
빈 : 평가
# 2 점수 : 12 다시 : 2002년 12월 17일 13시 59분 32
나는이 당신이 그것을 필요로하는 무슨 생각 :

유니트 1 부;

{투명 폼 효과는 지역 이루어집니다.
우선, 전체 형상을 포함하는 영역을 생성한다.
그런 다음, 형태 (비 클라이언트 대 클라이언트)의 클라이언트 영역을 찾아
국경을 만드는 RGN_DIFF으로 전체 지역과 결합
및 제목 표시 줄이 표시. 그런 다음 각 영역을 만들
컨트롤과 원본 (FullRgn) 지역으로 그들을 결합합니다.}

{뉴스 그룹의 여러 글에서 - 일부 유명 기반으로
내가 확신 저자하지만, 내가 먼저 ... 커스틴 탈러로 게시물을 보았다}

인터페이스

사용
윈도우, 메시지, SysUtils를, 클래스, 그래픽, 컨트롤, 양식, 대화 상자,
ExtCtrls, StdCtrls;

입력
된 TForm1 = 클래스 (TForm의)
Button1을 TButton으로하는 단계;
에 Panel1 : TPanel과;
Button2를 TButton으로;
프로 시저 FormDestroy (발신자 : TObject의);
절차 FormCreate (보내는 사람 : TObject의);
절차 Button1Click이라 (발신자 : TObject의);
절차 Button2Click (발신자 : TObject의);
절차 FormResize (발신자 : TObject의);
개인
{개인 선언}
절차 DoVisible;
절차 DoInvisible;
공공
{공공 선언}
끝;

했다
Form1이 : 된 TForm1은;
FullRgn, ClientRgn, CtlRgn : THandle;

이행

{$ R의 *의 .DFM}

절차 TForm1.DoInvisible;
VAR
AControl : TControl의;
A, 여백, X, Y, CtlX, CtlY : 정수;
시작
여백 : = (폭 - ClientWidth) 사업부 2;
// 첫째, 양식 영역 얻을
FullRgn을 = CreateRectRgn (0, 0, 폭, 높이);
클라이언트 영역의 지역 찾기 //
X를 = 여백;
Y는 : - ClientHeight - 높이 = 여백을;
ClientRgn = CreateRectRgn (X, Y, X + ClientWidth, Y + ClientHeight);
// '마스크'밖으로 모든 비 클라이언트 영역 만
CombineRgn (FullRgn, FullRgn, ClientRgn, RGN_DIFF);

// 이제, 형태와 'OR'그들에 모든 컨트롤을 통해 걸어
기존의 전체 영역에 //.
A의 = 0 ControlCount로 - 1 시작합니까
AControl을 : 컨트롤 = [A];
경우 (AControl은 TWinControl을이다) 또는 (AControl는 TGraphicControl의입니다)
다음 AControl에 시작합니까
다음 시작 보이는 경우
CtlX : = X + 왼쪽;
CtlY : = Y + 최고;
CtlRgn = CreateRectRgn (CtlX, CtlY, CtlX + 폭, 높이 CtlY +);
CombineRgn (FullRgn, FullRgn, CtlRgn, RGN_OR);
종료;
종료;
종료;
이 지역의 모든 준비가되면 // 효과에 넣어 :
SetWindowRgn을 (TRUE, FullRgn 핸들);
종료;

프로 시저 TForm1.FormDestroy (발신자 : TObject의);
시작
우리가 만든 영역을 정리 //
DeleteObject 매크로 (ClientRgn를);
DeleteObject 매크로 (FullRgn);
DeleteObject 매크로 (CtlRgn);
종료;

절차 TForm1.DoVisible;
시작
: 완벽한 가시성 복원하려면 //
FullRgn = CreateRectRgn (0, 0, 폭, 높이);
CombineRgn (FullRgn, FullRgn, FullRgn, RGN_COPY);
SetWindowRgn은 (, TRUE FullRgn 핸들);
종료;

절차 TForm1.FormCreate (발신자 : TObject의);
시작
// 우리는 투명한 형태로 ....로 시작
DoInvisible;
종료;

절차 TForm1.Button1Click (발신자 : TObject의);
시작
//이 버튼은 투명하고 트랜스하지 사이를 전환 ..
Button1.Caption = '표시 양식'후 시작하면
DoVisible을;
Button1.Caption : = '숨기기 양식';

시작하는 다른
DoInvisible을;
Button1.Caption : = '표시 양식';
종료;
종료;

절차 TForm1.Button2Click (발신자 : TObject의);
시작
Application.Terminate을;
종료;

절차 TForm1.FormResize (발신자 : TObject의);
시작

만약 Button1.Caption = '표시 양식'다음
DoInvisible
다른
DoVisible;
종료;

. 결국
그녀는, 사진을 제기 결국 I [1] 손실 타일 [0] 참조 청소년 손실 일으켰 | 신고 | 관리
Rensun
Rensun
Rensun
두 가지 방법이 달성 될 수있다 I 시도, 첫 비교적 간단 이 무슨 상관입니까? 질문 두 가지 방법이있다?
(기술적으로)
이 방법은 또한 수 있습니다 사용하는
개인 인터페이스의 추가

절차 CMEraseBkgnd (VAR 메시지 : TWMEraseBkgnd) 메시지 WM_ERASEBKGND;

추가 구현의 되었습니까
절차 Tform1.CMEraseBkgnd (VAR 메시지 : TWMEraseBkgnd는)
선두
brush.style:=bsClear,
상속을,
끝;

추천

출처www.cnblogs.com/blogpro/p/11446663.html