http://www.netgocn.com Original
모든 버튼은 표준 Windows 프로그램에서 색상이 없습니다. 따라서 Delphi가 제공하는 모든 버튼 구성 요소에는 색상 속성이 없을 수도 있으며 버튼 색상이 매우 불균형 할 수 있습니다.
여기에는 델파이의 구성 요소 정의 규칙을 사용하여 암모늄 버튼을 만들 수 있습니다. Delphi 자체가 제공 한 구성 요소와 마찬가지로 설계 단계에서의 마음대로 색상을 변경하십시오 (이 기사의 코드는 Delphi 4.0에 따라 이루어집니다).
첫 번째 단계
델파이를 열고 메뉴의 구성 요소/새 구성 요소 옵션을 선택하고 팝업 대화 상자의 조상 유형 드롭 다운 상자를 수동으로 채우거나 드롭 다운하십시오 이를 기반으로 완료합니다. 구성 요소에 대한 다음 코드 쓰기 단계를 정의합니다 (이것은 사용자 지정 구성 요소 쓰기의 첫 단계이기도합니다). 대화 상자의 나머지 글쓰기 내용은 원하는대로 작성되지만 클래스 이름은 기존 (사용자 정의 된) 클래스 이름과 동일 할 수 없으며 정의된다는 것을 기억해야합니다. 구성 요소의 설치 위치 (팔레트 페이지 드롭 다운 상자의 내용) 및 디스크의 장치 파일의 스토리지 위치 (유닛 파일 이름 편집 상자의 내용). 그렇지 않으면 향후 어디에서 찾을 수 있습니까? 이 기사는 Delphi Tbutton1의 기본값을 클래스 이름으로 간주합니다.
2 단계
위의 작업을 마치면 아래의 OK 버튼을 누르면 Delphi는 일반적으로 이러한 코드 프레임 워크를 수정할 필요가 없습니다. (이 기사는 삭제되었습니다. 모든 자동으로 생성 된 주석)을 저장해야합니다.
3 단계
위의 코드 프레임 워크에 코드를 추가하십시오. 물론 이것은 우리가하고 싶은 주요 작업입니다.
1. Delphi가 자동으로 생성 한 장치 파일의 데이터 유형 정의 부분을 수정하십시오.
유형
tbutton1 = class (tbutton)
사적인
fcolor : tcolor;
fcanvas : tcanvas;
isfocused : 부울;
절차 setColor (값 : tcolor);
절차 cndrawitem (var 메시지 : twmdrawitem);
보호
절차 CreateParams (var params : tcreateparams);
절차 setButtonStyle (Adefault : 부울);
공공의
생성자 생성 (aowner : tcomponent);
소멸자 파괴;
게시
속성 색상 : tcolor 읽기 fcolor 쓰기 setcolor 기본 clwhite;
끝;
설명 :
a. 우리는 하나의 속성 만 추가 했으므로 게시 된 세그먼트의 코드 아래에는 하나의 색상 속성 만 있으며 기본 색상을 흰색으로 설정합니다 (Clwhite, 물론 마음대로 변경할 수 있음).
b. 생성자와 파괴자를 과부하 시키십시오. 둘 다 외부로 호출되어야하므로 공개 섹션에 배치해야합니다.
c. 속성의 개인 데이터 도메인을 읽고 속성의 쓰기 메소드 세트는 개인 세그먼트 (개인)에 배치해야합니다. 외부에 접근 할 수없는 수업을 만드십시오.
2. Delphi의 자동 프로세스 레지스터는이를 무시할 수 있습니다. 프로세스 본문 후에는 다음과 같은 코드를 수동으로 추가하여 위에서 정의한 모든 프로세스의 프로세스 신체 쓰기를 완료합니다 (여기서는 기능 프로토 타입을 정의하지 않습니다).
// *** 생성자 **************************************** ** ** **********
생성자 tbutton1.Create (aowner : tcomponent);
시작하다
상속 된 Create (Aowner);
fcanvas : = tcanvas.create;
fcolor : = clwhite; // 기본 색상
끝;
// *** Destructor ******************************************* ********
소멸자 tbutton1.destroy;
시작하다
fcanvas.free;
상속 된 파괴;
끝;
// *** 버튼 스타일을 정의하려면 버튼이 자체적으로 나오는 버튼으로 재정의해야합니다 *********************
절차 tbutton1. Createparams (var params : tcreateparams);
시작하다
상속 된 크레아테 람 (params);
Params do style : = 스타일 또는 bs_ownerdraw;
끝;
// *** 속성 쓰기 방법 *************************************** ********* *******
절차 tbutton1.setColor (값 : tcolor);
시작하다
fcolor : = 값;
무효화;
끝;
// *** 버튼 상태 설정 ********************************** ****** ****
절차 tbutton1. 세트 버튼 스타일 (adefault : boolean);
시작하다
adefault <>가 초점을 맞추면
시작하다
isfocused : = adefault;
새로 고치다;
끝;
끝;
// *** 드로우 버튼 ********************************** ******
절차 tbutton1.cndrawitem (var message : twmdrawitem);
var
Isdown, Isdefault : 부울;
절도 : 트렉;
깃발 : Longint;
DrawItemStruct : tDrawItemStruct;
WH : tsize;
시작하다
DrawItemStruct : = message.DrawItemStruct^;
fcanvas.handle : = drawItemStruct.hdc;
예술 : = ClientRect;
DrawItemStruct와 함께
시작하다
isdown : = itemstate 및 ods_selected <> 0;
isdefault : = itemstate 및 ods_focus <> 0;
끝;
플래그 : = dfcs_buttonpush 또는 dfcs_adjustrect;
DOWNS가 있다면 플래그 : = 플래그 또는 dfcs_pushed;
drawitemStruct.itemstate 및 ods_disabled <> 0 인 경우
플래그 : = 깃발 또는 dfcs_inactive;
ISFOCUSED 또는 ISDEFAULT라면
시작하다
// 버튼이 초점을 맞출 때 상태를 그립니다
fcanvas.pen.color : = clwindowframe;
fcanvas.pen.width : = 1;
fcanvas.brush.style : = bsclear;
fcanvas.rectangle (arect.left, arect.top, arect.right, arect.bottom);
인플레이터 (ARECT, -1, -1);
끝;
fcanvas.pen.color : = clbtnshadow;
fcanvas.pen.width : = 1;
fcanvas.brush.color : = fcolor;
ISDOWN이 시작되면 시작하십시오
// 버튼을 누르면 상태를 그립니다
fcanvas.rectangle (arect.left, arect.top, arect.right, arect.bottom);
인플레이터 (ARECT, -1, -1);
다른 끝
// 압박이없는 버튼을 그립니다
DrawFrameControl (DrawItemStruct.hdc, arect, dfc_button, flags);
fcanvas.fillRect (arect);
// 캡션 텍스트 내용을 그립니다
fcanvas.font : = self.font;
예술 : = ClientRect;
wh : = fcanvas.textextent (캡션);
fcanvas.pen.width : = 1;
fcanvas.brush.style : = bsclear;
활성화되지 않은 경우
시작 // 버튼이 실패하면 캡션 텍스트를 다시 그려야합니다.
fcanvas.font.color : = clbtnhighlight;
fcanvas.textout ((너비 div 2)-(wh.cx div 2) +1,
(높이 div 2)-(W.Cy div 2) +1,
표제);
fcanvas.font.color : = clbtnshadow;
끝;
fcanvas.textout ((폭 2)-(wh.cx div 2), (높이 div 2)-(wh.cy div 2), 캡션);
// 초점을 맞출 때 내부 프레임의 점선 선을 그립니다.
ISFOCUSED와 ISDEFAULT가 있다면
시작하다
예술 : = ClientRect;
인플레이터 (arect, -4, -4);
fcanvas.pen.color : = clwindowframe;
fcanvas.brush.color : = fcolor;
DrawFocusRect (fcanvas.handle, arect);
끝;
fcanvas.handle : = 0;
끝;
// ** 끝 *************************************** ****************
끝.
4 단계 : 오류가 올바른지 확인한 후 델파이 메뉴의 구성 요소/설치 옵션을 선택하고 파일 이름 편집 상자에서 이름을 확인하고 Delphi가 컴파일하고 설치합니다 요소.
이 기사를 완전히 따르면 올바르게 컴파일하고 설치 한 후 델파이 구성 요소 레이블의 샘플 탭에서 TBUTTON과 동일한 아이콘이있는 버튼을 찾을 수 있습니다. 새 프로젝트를 만들고이 버튼을 양식에 배치하면 흰색 버튼이 표시됩니다. 어때? 색상 속성을 통해 마음대로 색상을 설정합니다.
마지막으로,이 기사의 버튼 그리기 방법은 Delphi 버튼과 유사한 액션 모양을 달성하기 위해 Delphi의 Tbutton과 유사한 도면 메소드를 채택합니다. 그러나 연주를 원한다면 성격을 표현하려는 FCANVAS 캔버스에 텍스트와 그래픽을 그릴 수 있습니다.
궁금한 점이 있으면 편지를 보내거나 메시지를 남겨주세요.
이 사이트의 소프트웨어를 사용해 보시는 데 오신 것을 환영합니다 : Netgocn (Network)