Dragdrop은 Windows를 빠르게 작동하는 방법입니다. Windows를 기반으로 한 개발자로서
Delphi는 또한 드래그 앤 드롭 작업을 지원하며 응용 프로그램 시스템의 드래그 앤 드롭 함수는 매우 편리합니다.
델파이의 힘과 편의성.
Delphi (입력 초점을 얻을 수있는 Control)가 제공하는 모든 컨트롤은 드래그 앤 드롭 작업을 지원하고
해당 드래그 앤 드롭 특성, 드래그 앤 드롭 이벤트 및 드래그 앤 드롭 메소드. 다음으로, 우리는 먼저 컨트롤의 드래그 앤 드롭 지원을 소개 한 다음
드래그 앤 드롭 작업을 보내는 일반 단계 및 응용 프로그램 예.
9.1 컨트롤을 드래그 앤 드롭 지원
드래그 앤 드롭 작업에서 컨트롤은 소스 제어 및 대상 제어의 두 가지 범주로 나눌 수 있습니다. 대부분의 컨트롤은 소스 컨트롤로 사용할 수 있습니다
대상 제어로도 사용할 수 있습니다. 그러나 그중 하나만 지원할 수있는 몇 가지 컨트롤도 있습니다.
9.1.1 드래그 앤 드롭 속성
두 가지 메인 드래그 앤 드롭 속성이 있습니다.
● 드래그 모드 : 드래그 모드
그것들은 모두 드래그 앤 드롭 소스 컨트롤로 설정되어 있습니다. DragMode는 런타임 동안 컨트롤을 누를 때 사용자를 제어합니다.
마우스가 다운되면 제어가 어떻게 반응합니까? Dragmode가 dmautomatic으로 설정된 경우 사용자가 컨트롤에서 마우스를 누르면
Dragmode가 자동으로 시작됩니다. Dragmode가 dmmanual로 설정되면 (기본값) 마우스 이벤트가 처리됩니다.
드래그가 시작될 수 있는지 확인합니다.
Dragcursor는 드래그 할 때 표시된 커서를 선택하는 데 사용됩니다.
프로그래밍 프로세스에서 공통적 인 인터페이스 사양은 개발자가 존중해야합니다. 그러나 때로는 구체적인 목적을 위해
개발자는 또한 자신의 커서를 Dragcursor에 할당 할 수 있습니다.
9.1.2 드래그 앤 드롭 이벤트
세 가지 메인 드래그 앤 드롭 이벤트가 있습니다.
● OnDragover : 끌 때 영감을주십시오
● ondragdrop : 드래그 및 떨어질 때 영감을줍니다
● OnendDrop : 드래그 할 때 영감을주십시오
처음 두 이벤트는 대상 제어에 의해 응답되고 후자는 소스 컨트롤에 의해 응답됩니다.
OnDragover 이벤트의 주요 기능은 사용자가 드래그를 제자리에 놓을 때 컨트롤이 허용되는지 여부를 결정하는 것입니다.
매개 변수는 다음과 같습니다.
출처 : Tobject; {소스 컨트롤} x, y : {커서 위치};
상태 : tdragstate; {drag status} var accept : boolean {당신은 수락 할 수 있습니다}
TDRAGSTITE는 드래그와 드롭 항목과 대상 컨트롤의 관계를 나타내는 열거 유형입니다.
tdragstate = (dsdragenter, dsdragleave, dsdragmove);
다른 값의 의미는 다음과 같습니다.
표 9.1 드래그 스테이트의 가치와 중요성
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━
가치 의미
효가한 유압장 은신 안정장입니다. UNTEM 은신 안정장입니다. UNTEM 은신 안정장입니다 U 초은 오줌입니다 U 초, 유바레입니다 대한 신밭은 유바라입니다. UN. 신밭 은림이 있습니다 대한 유자입니다 대한 신짐. 신밭은 향입니다 U 초, 뇨im신 안정장입니다. UN
dsdragenter 드래그 된 물체를 떨어 뜨릴 수 있도록 객체를 컨트롤로 끌어냅니다. 기본 상태입니다.
dsdragleave는 드래그 객체를 떨어 뜨릴 수있는 컨트롤에서 물체를 멀리 떨어 뜨립니다.
dsdragmove 드래그 객체는 드래그 객체를 떨어 뜨릴 수있는 컨트롤 내에서 움직입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━
사용자는 제공된 매개 변수를 사용하여 다음과 같은 드래그가 허용되는지 여부를 결정할 수 있습니다.
● 판사 소스 제어 유형 :
수락 : = 소스는 tlabel입니다.
● 판사 소스 제어 개체 :
수락 : = (source = tabset1);
● 커서 판사 위치 :
(9.2), (9.3)의 루틴을 참조하십시오.
● 드래그 상태 판사 :
if (소스는 tlabel) 및 (state = dsdragmove)
source.dragicon : = 'new.ico';
끝
또 다른
수락 : = 거짓;
accept = true 일 때, 대상 제어는 OndragDrop 이벤트에 응답 할 수 있으며, 드래그가 떨어진 후 프로그램이 결정되는 데 사용됩니다.
그것을 다루는 방법.
OnDragDrop 이벤트 처리 프로세스의 매개 변수에는 소스 컨트롤 및 커서 위치가 포함됩니다. 이 정보는 처리에 사용될 수 있습니다
확인.
OnEnddrag 이벤트는 드래그 작업이 완료된 후 소스 컨트롤에 의해 응답되며 소스 컨트롤에서 해당 연주를 수행하는 데 사용됩니다.
거래하십시오. 드래그 작업의 끝에는 드래그 앤 드롭이 허용되는 것이 포함되며, 사용자는 삭제할 수없는 컨트롤에서이를 방출합니다.
마우스를 넣으십시오. 이 이벤트 처리 프로세스의 매개 변수에는 대상 제어 (대상) 및 드롭 위치의 좌표가 포함됩니다. 만약에
target = nil, 드래그 된 항목이 컨트롤에 의해 허용되지 않음을 의미합니다.
드래그 앤 드롭 이동에서 섹션 3에 도입 된 드래그 앤 드롭 사본 작동에서 작업이 성공하면 파일 목록 상자가 아래에 나열됩니다.
표시된 컨텐츠를 업데이트해야합니다. 다음 프로그램은이 기능을 구현하는 데 사용됩니다.
절차 tfmform.filelistendDrag (발신자, 대상 : Tobject; x, y : Integer);
시작하다
target <> nil이면 filelist.update;
끝;
위에서 설명한 세 가지 이벤트 외에도 다른 이벤트 OnMousedown이 있으며,이 사건은 일반적으로 드래그 앤 드롭 응답에도 사용됩니다.
OnMousedown은 특별한 드래그 앤 드롭 이벤트는 아니지만 수동 모드에서 드래그의 시작은 이것에 있습니다.
이벤트 처리 과정에서 구현되었습니다.
9.1.3 드래그 앤 드롭 방법
드래그 앤 드롭 방법에는 세 가지 방법이 있습니다.
● BEGINDRAG : 수동 모드에서 드래그를 시작합니다
● EndDrag :
드래그를 끝내십시오
● 드래그 : 컨트롤이 드래그되는지 여부를 결정합니다
세 가지 방법 모두 소스 컨트롤에서 사용됩니다.
Dragmode가 dmmanual로 설정되면 Draging은 컨트롤의 BEGINDRAG 메소드를 호출하여 시작해야합니다.
BEGINDRAG에는 부울 매개 변수가 즉시 있습니다. 입력 매개 변수가 true 인 경우 즉시 시작합니다.
Dragcursor 설정으로 변경됩니다. 입력 매개 변수가 False 인 경우 사용자가 특정 거리만큼 커서를 이동할 때까지
(5 픽셀) 커서를 교체하고 드래그를 시작하기 전에. 이를 통해 컨트롤이 시작하지 않고 Onclick 이벤트를 수락 할 수 있습니다.
작업을 드래그하십시오.
EndDrag 메소드는 드래그 된 객체 상태를 중단합니다. 부울 매개 변수 드롭이 있습니다. 드롭이 설정된 경우
사실, 드래그 된 객체는 현재 위치에 삭제됩니다 (허용 될 수 있는지 대상 제어에 의해 결정됩니다)
False 인 경우 드래그가 취소됩니다.
다음 프로그램은 제어판으로 드래그 할 때 드래그가 취소되었음을 보여줍니다.
절차 tform1.panel1dragover (sender, 출처 : tobject; x, y : Integer;
상태 : TDRAGSTATE; VAR 수락 : 부울);
시작하다
수락 : = 거짓;
if (소스는 tlabel) 및 (state = dsdragenter)
(tlabel로 소스) .enddrag (false);
끝;
드래그 방법은 컨트롤이 드래그되는지 여부를 결정합니다. 다음 예에서는 사용자가 다른 확인란을 드래그 할 때
창이 다른 색상으로 변할 때.
절차 tform1.formactivate (sender : tobject);
시작하다
checkbox1.dragmode : = dmautomatic;
checkbox2.dragmode : = dmautomatic;
checkbox3.dragmode : = dmautomatic;
끝;
프로 시저 tform1.formDragover (sender, 출처 : tobject; x, y : integer;
상태 : TDRAGSTATE; VAR 수락 : 부울);
시작하다
checkbox1.Dragging이면
색상 : = Claqua;
checkbox2.dragging 인 경우
색상 : = Clyellow;
checkbox3.dragging 인 경우
색상 : = Cllime;
끝;