시각적 구성 요소는 실제로 클래스를 작성하려면 *.pas 파일에 직접 쓸 수 있습니다. 그러나 컨트롤을 작성하려면 패키지를 사용해야합니다. 파일 메뉴에서 새로 새로운 패키지를 작성하십시오. 이것은 컨트롤을 저장하고 설치하는 데 사용되는 패키지입니다. 그런 다음 패키지 창의 추가 버튼을 클릭하여 구성 요소 (단위)를 추가하십시오.
팝업 대화 상자 상단에서 새 구성 요소를 선택하십시오. 컨트롤의 모든 속성, 메소드 및 이벤트는 자체적으로 구성 될 수 없으므로 조상 클래스 (또는 "부모 클래스"또는 "기본 클래스")를 선택한 다음 자신의 속성, 메소드 및 이벤트를 추가해야합니다. . 조상 유형 다음에 드롭 다운 상자에서 원하는 조상 클래스를 선택하십시오. 시각적 제어를 작성하여 그림을 그려야하므로 TgraphicControl은 조상 클래스로 선택됩니다. 그런 다음 클래스 이름 상자에 새 컨트롤 (클래스)의 이름을 입력하는데, 이는 일반적으로 "t"로 시작합니다. 팔레트 페이지는 "표준"과 같은 델파이 창에서 새 컨트롤의 제어 페이지 이름을 선택하는 데 사용됩니다. 단위 파일 이름으로 새 제어 파일의 경로와 파일 이름을 추가하고 확인 버튼을 클릭하십시오. 새로운 컨트롤이 추가됩니다. 이제이 컨트롤에 대한 코드를 작성할 수 있습니다.
다음은 시각적 제어를 작성하는 방법을 설명하기 위해 이미지를 사용자 정의 할 수있는 스크롤 막대를 작성하는 예입니다.
위의 방법을 따르고 조상 클래스로 tgraphiccontrol을 선택하고 새로운 컨트롤의 이름은 tpighorizontalscroller (Pig Lorizontal Scrollbar)입니다. 파일 경로와 파일 이름을 선택한 후 확인 버튼을 클릭하여 코드 작성을 시작하십시오.
각 컨트롤이 생성되고 삭제되므로 먼저이 두 프로세스를 작성해야합니다. 제어의 각 프로세스에 대해 먼저 정의한 다음 나중에 작성해야합니다. 정의되는 세 가지 유형의 프로세스 또는 속성이 있습니다.
1. 개인 후 정의 된 것은 내부적으로 통제에 사용되며 컨트롤을 사용하는 사람은 그것을 볼 수 없습니다.
2. 보호 후 정의 된 것은 일반적으로 보이지 않으며 다른 사람들이 다른 컨트롤을 작성하기 위해 조상 클래스로서 제어를 사용할 때만 볼 수 있습니다.
3. 공개 후 프로그램에서 다른 사람들만이 전화를 걸 수있다.
4. 게시 후 정의 된 것은 속성 창 (물체 검사관)에서 볼 수 있습니다. 프로그래밍 프로세스 중에 제어가 생성 될 때 생성 및 삭제 프로세스가 자동으로 실행될 수 없으므로 프로그램 실행 중에 컨트롤이 동적으로 생성 될 때 호출 될 수 있으므로 공개 후에 정의됩니다. (이 시퀀스 번호는 첨부 된 소스 프로그램에서 코드의 위치를 나타냅니다. 아래에서 동일합니다.) 이제이 두 프로세스에서 무엇을 쓸지 모르고 편집하는 방법을 모르겠습니다. 우리는 아래에서 그것에 대해 이야기 할 것입니다.
먼저이 컨트롤에 속성을 추가합시다. 우리는 스크롤 바의 최대 값을 설정하거나 읽기 위해 최대 속성을 정의합니다. 속성은 프로그램에서 직접 사용되지 않으므로 속성에 해당하는 변수를 정의하면서 값을 수정하거나 읽습니다. 컨트롤 내에서만 사용되므로 개인 ⑵ 이후에 정의합니다. (일반적으로 속성과 관련된 변수는 변수를 정의한 후 속성을 정의한 후 속성을 정의합니다. 이 속성은 객체 검사 창에 표시되어야하므로 정의하고 ⑶ 이후에 게시하십시오. 정의 된 구문은 다음과 같습니다.
속성 <속성 이름> : <type> 읽기 <응답 변수이 속성을 읽을 때> 쓰기 <응답 변수 또는 프로세스이 속성을 쓸 때>
다른 변수와 속성도 유사하게 정의됩니다 (예 : 최소 최소값, 값 전류 값 등). 아래에서 우리는 스크롤 바 이미지를 설정하기 위해 몇 가지 속성과 변수를 정의합니다 (이미지 변수는 특별하기 때문에 별도로 이야기 할 것입니다). LeftButtonUpPicture (왼쪽 버튼 그림), LeftButtonDownPicture (왼쪽 버튼 프레스 사진) 등을 TBITMAP 유형 (해당 변수를 정의해야 함)을 정의합니다.
첨부 된 소스 프로그램에서 이러한 속성을 정의 할 때 읽기 후 지정된 속성을 읽을 때 해당 변수는 F ...이며, 쓰기 후 지정된 속성을 작성할 때 해당 변수가 변수가 아니라 세트…, 그것은 사용자 정의 프로세스입니다. 이 기능으로서의 프로세스는 다음과 같이 정의됩니다.
프로 시저 <프로세스 이름> (값 : <설정 속성의 값 유형>)
이 클래스의 속성을 쓸 때 다른 일을해야하기 때문에 하나의 변수만으로 처리 할 수는 없지만 프로세스로 처리해야합니다. 이 과정은 일반적으로 보호 후에 정의됩니다. 이 클래스 프로세스에서 ⑷에서 이와 같은 명령문은 tbitmap 유형 변수에 값을 할당하는 데 사용됩니다.이 유형의 변수는 직접 할당 할 수 없기 때문에 채택됩니다.
이러한 TBITMAP 유형 변수의 속성을 정의한 후 코드는 위에서 언급 한 프로세스 및 파괴 프로세스에 작성해야합니다. TBITMAP는 또한 클래스이기 때문에 Create Process ⑸에서 생성되어야하며 Destroy Process에서 무료로 해제되어야합니다. 여기에 언급 된 상속 된 진술은 프로세스가 조상 클래스에서 상속되었음을 나타내는 데 사용됩니다. (이것은 삭제해서는 안됩니다).
우리는 시각적 컨트롤을 작성하기 때문에 컨트롤에 그림을 그려야합니다. 우리의 제어의 조상 클래스 인 tgraphiccontrol은 캔버스 객체를 캡슐화하여 그림을 직접 사용할 수 있습니다. 캔버스 사용에 익숙하지 않은 경우 책을 읽는 것이 가장 좋습니다.
다음과 같은 직업은 사진을 그리는 것입니다. 컨트롤에 그림을 그리는 방법? 조상 클래스 tgraphiccontrol에는 페인트 이벤트가 있으며, 이는 제어를 다시 칠해야 할 때 자동으로 트리거됩니다. 우리가 지금해야 할 일은이 행사를위한 프로그램을 작성하는 것입니다. 먼저 보호 후 캔버스 물체를 정의하십시오. 이미 조상 클래스에 있기 때문에 설명을 추가 할 필요가 없습니다. 우리는이 개체를 사용하여 그릴 것입니다. 다음으로 페인트 프로세스를 정의하고 컨트롤을 그리려면 코드를 작성해야합니다. 먼저 페인트 프로세스를 공개적으로 정의하십시오. 사용자가 아닌 조상 클래스에 의해 트리거되므로, 재정의는 나중에 추가되어야합니다. 그렇지 않으면 페인트 절차가 호출되지 않기 때문에 컨트롤이 시각적 제어가되지 않습니다. 페인트 프로세스에 대한 코드를 작성해 봅시다.
이 기사에 첨부 된 소스 프로그램의 페인트 프로세스에서 t_height와 같은 변수는 스크롤 막대에서 버튼, 슬라이더 등의 크기를 저장하는 데 사용됩니다. , 대부분은 정확합니다. 나는 모든 사람들이 한 눈에 캔버스의 작동을 이해할 것이라고 생각합니다. fautosize 변수에 대한 다음 판단은
Fautosize는 컨트롤의 속성자가 크기와 관련된 부울 변수입니다. 제어 코드에서 속성은 직접 호출되지 않지만 해당 변수가 사용됩니다.
프로그램이 여기에서 컴파일 된 후, 마침내 새로운 컨트롤을 찾아도 스크롤 할 수는 없습니다. 이제 마우스 이벤트를 작성하여 조작 할 수 있습니다. 마우스 이벤트 프로세스의 정의는 페인트 프로세스와 매우 유사하지만 매개 변수 설명이 나중에 추가되어야한다는 점을 제외하고는 페인트 프로세스와 매우 유사합니다.
마우스 이벤트는 Mousedown, MouseMove 및 MouseUp으로 나뉘어져 있으며 정의 후에 재정의가 추가되어야합니다. 다음으로 나중에 코드를 작성하십시오. 참고 : 여기서 마우스 이벤트는 마우스입니다. 그러나 the의 정의는 무엇입니까? 여기의 이벤트 정의는 사용자가 모두 사용하기위한 것입니다. 즉,이 컨트롤을 사용할 때 객체 검사관의 이벤트 페이지에 표시됩니다.
이 마우스 이벤트의 코드는 마우스의 좌표를 판단하고 캔버스에 해당 그림을 그리며 동시에 해당 이벤트를 트리거 할 수 있습니다. 사용자 정의 이벤트를 호출 할 때 먼저 사용자가 이벤트에 대한 코드를 작성했는지 여부를 결정하기 위해 먼저 ⒁에서 그러한 문을 사용해야한다는 점은 주목할 가치가 있습니다. 이것은 매우 중요합니다. 그렇지 않으면 통화에서 오류가 발생합니다.
모든 사람들은 지금 당장 이벤트가 모두 사용자 정의되고 정의 방법이 매우 간단하며 정의 속성과 유사하지만 입력 할 때 tnotifyevent가 매우 간단합니다.
tnotifyevent는 기본 이벤트이며 다음과 같이 정의됩니다.
tnotifyevent = 절차 (발신자 : Tobject)
다른 형태의 이벤트를 정의하려면 다음을 수행해야합니다. 먼저 유형으로 작성한 다음
<이벤트 유형 이름> = 절차 (<매개 변수> : <type>)
예를 들어:
tcustomevent = procedure (a : 정수; b : String);
그런 다음 공개 정의 후 :
<이벤트 이름> : <이벤트 유형 이름>
예를 들어:
초음파 : tcustomevent;
이것을 읽은 후에는 전체 프로그램을 이해해야합니다. 컴파일 또는 작업에 오류가 있으면 다음 사항을 확인하십시오.
1. 생성 및 파괴 프로세스에 상속 된 진술이 있는지 여부;
2. TBITMAP 유형의 변수가 생성되고 무료가 생성되는지 여부;
3. 프로세스 앞에 제어 이름이 있습니까?
마우스가 컨트롤에 들어가거나 떠나는 지 확인하는 방법 :
다음 과정을 정의하십시오.
절차 마우스 센터 (Var MSG : tmessage);
절차 mouseleave (var msg : tmessage);
아래 코드를 작성하십시오!
이 방법은 3 상태 버튼을 작성하는 데 매우 유용합니다!