Borland Company(현재 INPRISE Company로 이름 변경)의 DELPHI는 현재 가장 편리한 Windows 프로그램입니다.
계획 도구 중 하나입니다. 많은 사람들은 DELPHI가 실제로는 DELPHI를 데이터베이스 개발 도구로 생각합니다.
효율적인 Windows 프로그램은 엄청난 속도로 개발될 수 있습니다.
이제 DELPHI를 사용하여 실용적인 화면 복사 프로그램을 작성하겠습니다. 보세요, 아래 사진을 보세요
프로그래밍된 프로그램을 실행한 후 지역 화면을 복사한 예입니다.
Borland Company의 재능 있는 디자이너들은 캔버스(Tcanvas) 개체를 사용하여 Windows의 대부분의 그래픽을 캡슐화합니다.
Windows 화면을 보다 직관적으로 처리할 수 있는 출력 기능,
그리고 Windows API 기능 때문에 골치 아픈 일에 대해 걱정할 필요가 없습니다. 다음의 짧은 프로그램은 전체를 실현할 수 있습니다
화면 이미지가 복사됩니다.
var //변수 선언
전체 화면:Tbitmap;
전체화면캔버스:TCanvas;
dc:HDC;
//------------------------------------------------ ----------
DC := GetDC (0); //화면의 DC를 가져옵니다. 매개변수 0은 화면을 나타냅니다.
FullscreenCanvas := TCanvas.Create //캔버스 객체 생성;
FullscreenCanvas.Handle := DC; //화면의 DC를 HANDLE에 할당
전체 화면.Canvas.CopyRect
(Rect (0, 0, 화면.너비,화면.높이),
전체 화면캔버스,
Rect (0, 0, 화면.너비, 화면.높이));
//전체 화면을 BITMAP으로 복사
FullscreenCanvas.Free //캔버스 개체 해제
ReleaseDC (0, DC); //DC 해제
//SCREEN 개체는 DELPHI에서 미리 정의한 화면 개체이므로 직접 사용하면 됩니다.
위의 코드를 읽고 나면 DELPHI를 사용하여 화면 복사 프로그램을 작성하는 것이 실제로 매우 간단하다는 것을 알게 될 것입니다.
물론, 실제적인 화면 복사 프로그램을 작성해야 합니다. 위의 코드만으로는 충분하지 않습니다.
주요 프로그래밍 아이디어는 다음과 같습니다.
1. 전체화면 복사 구현
먼저 화면 복사 프로그램을 숨기고 일정 시간이 지난 후 위 프로그램을 사용하여 화면 복사를 수행합니다.
복사.
2. 지역 카피 구현
영역 복사를 수행하려면 먼저 전체 화면 복사 프로그램을 호출하여 약간의 트릭을 사용해야 합니다.
다운로드한 후 복사된 이미지를 화면에 표시하고 사용자가
필요한 영역을 선택하고 마지막으로 사용자가 선택한 영역을 복사합니다.
프로그래밍 구현:
1. 먼저 DELPHI3으로 프로젝트를 엽니다.
2. FORM에 TPANEL 컴포넌트를 배치하고 ALIGN=ALTOP을 설정한 후 컴포넌트 바 ADDITIONAL을 선택합니다.
TSCROLLBOX를 FORM에 배치하고 ALIGN=ALCLIENT를 설정한 다음
TIMAGE 개체.
3. PANEL에 FULL SCREEN, REGIN, SAVE, EXIT 버튼 4개를 배치합니다.
4. 하기 쉬운 것부터 먼저 하고 EXIT 버튼의 CLICK 이벤트에 코드를 작성합니다.
절차 TForm1.ExitClick(Sender: TObject);
시작하다
닫다;
끝;
5. 다음은 FROM에 타이머 TTIMER를 배치하고 ENABLED를 설정하는 것입니다.
FALSE, INTERVAL은 500으로 설정됩니다. 즉, 0.5초마다 한 번씩 활성화된다는 의미입니다. TIMER 구성 요소를 두 번 클릭하고 다음을 작성합니다.
암호.
절차 TForm1.Timer1Timer(Sender: TObject);
var
전체 화면:Tbitmap;
전체화면캔버스:TCanvas;
dc:HDC;
시작하다
타이머1.Enabled:=false; //시계 취소
Fullscreen := TBitmap.Create //이미지를 저장할 BITMAP을 생성합니다.
전체화면.폭 := 화면.폭;
전체화면.높이 := 화면.높이;
DC := GetDC (0); //화면의 DC를 가져옵니다. 매개변수 0은 화면을 나타냅니다.
FullscreenCanvas := TCanvas.Create //캔버스 객체 생성;
FullscreenCanvas.Handle := DC;
전체 화면.Canvas.CopyRect
(Rect(0, 0, screen.Width, screen.Height), fullscreenCanvas,
Rect (0, 0, 화면.너비, 화면.높이));
//전체 화면을 BITMAP으로 복사
FullscreenCanvas.Free //캔버스 개체 해제
ReleaseDC (0, DC); //DC 해제
//********************************
image1.picture.Bitmap:=fullscreen;//복사한 이미지를 IMAGE 객체에 할당
image1.Width:=fullscreen.Width;
image1.Height:=fullscreen.Height;
fullscreen.free; //비트맵 해제
form1.WindowState:=wsNormal; //창 상태 복원
form1.show; //표시창
messagebeep(1); //이미지가 캡처되었음을 알리기 위해 경고음이 한 번 울립니다.
끝;
6. FULLSCREEN 버튼의 다음 코드는 매우 간단합니다.
절차 TForm1.FullscreenClick(Sender: TObject);
시작하다
form1.WindowState:=wsMinimized; //프로그램 창 최소화
form1.hide; //프로그램 숨기기
timer1.enabled:=true; //타이머 열기
끝;
7. 이미지를 복사한 후에는 당연히 저장해야 합니다. 다음과 같이 작성합니다.
코드를 다운로드하세요.
절차 TForm1.Save1Click(Sender: TObject);
시작하다
저장된 경우dialog1.Execute 다음
시작하다
form1.Image1.Picture.SaveToFile(savedialog1.filename)
끝;
끝;
8. 다음은 Zone Copy 구현입니다. 그런 다음 FORM을 새로 만들고 BorderStype을 bsNone으로 설정하여 표시할 수 있도록 합니다.
전체 화면의 경우 TIMAGE 구성 요소를 배치하고 ALIGN을 ALCLIENT로 설정한 다음 TTIMER를 배치합니다.
위젯의 경우, TIMER 위젯의 프로그램은 위와 매우 유사합니다. 왜냐하면 이 위젯이 달성해야 할 첫 번째 일은 전체 화면 복사이기 때문입니다.
카우리.
절차 TForm2.Timer1Timer(Sender: TObject);
var
전체 화면:Tbitmap;
전체화면캔버스:TCanvas;
dc:HDC;
시작하다
타이머1.활성화:=false;
전체 화면 := TBitmap.Create;
전체화면.폭 := 화면.폭;
전체화면.높이 := 화면.높이;
DC := GetDC (0);
FullscreenCanvas := TCanvas.Create;
FullscreenCanvas.Handle := DC;
Fullscreen.Canvas.CopyRect(직사각형
(0, 0, 화면.폭, 화면.높이), fullscreenCanvas,
Rect (0, 0, 화면.너비, 화면.높이));
전체화면Canvas.Free;
릴리스DC(0, DC);
image1.picture.Bitmap:=전체 화면;
image1.Width:=fullscreen.Width;
image1.Height:=fullscreen.Height;
전체화면.무료;
form2.WindowState:=wsMaximized;
form2.show;
메시지 경고음(1);
접기x:=-1;
폴디:=-1;
image1.Canvas.Pen.mode:=pmnot; //펜 모드가 반전됩니다.
image1.canvas.pen.color:=clblack; //펜이 검은색입니다.
image1.canvas.brush.Style:=bsclear; //빈 브러시
플래그:=true;
끝;
9. TIMAGE 구성 요소에는 작성해야 하는 두 개의 이벤트 프로그램이 있습니다. 하나는 ONMOUSEDOWN이고 다른 하나는
온마우스무브 입니다.
10. 지역 복사에 대한 아이디어를 이때 이미 생각해 볼 수 있습니다.
가 얻어지고 화면에도 표시됩니다. 해당 영역의 원점이 되도록 마우스 왼쪽 버튼을 누른 다음 마우스를 이동합니다.
원점과 마우스 사이에 직사각형이 있습니다. 마우스를 다시 누르면 변경됩니다.
이때, 직사각형 안에 포함된 영역이 우리가 얻고자 하는 이미지입니다.
11. 따라서 MOUSEDOWN에는 두 가지 응답 처리가 있습니다. 다음 절차를 참조하세요.
절차 TForm2.Image1MouseDown
(보내는 사람: TObject; 버튼: TMouseButton;
시프트: TShiftState X, Y: 정수);
var
너비, 높이:정수;
newbitmap:Tbitmap;
시작하다
if (trace=false) then // TRACE는 마우스가 추적되고 있는지 여부를 나타냅니다.
start //마우스 추적을 시작하려면 처음으로 마우스 왼쪽 버튼을 클릭합니다.
플래그:=false;
image1.canvas를 사용하면
시작하다
moveTo(foldx,0);
LineTo(foldx,screen.height);
moveto(0,foldy);
lineto(screen.width,foldy);
끝;
x1:=x;
y1:=y;
oldx:=x;
옛날:=y;
추적:=true;
image1.Canvas.Pen.mode:=pmnot; //펜 모드가 반전됩니다.
//원래 위치에 다시 직사각형을 그립니다. 이는 직사각형을 지우는 것과 같습니다.
image1.canvas.pen.color:=clblack; //펜이 검은색입니다.
image1.canvas.brush.Style:=bsclear;//빈 브러시
끝
또 다른
시작 //두 번째 클릭은 직사각형이 획득되었음을 나타냅니다.
//FORM1의 IMAGE 컴포넌트에 복사합니다.
x2:=x;
y2:=y;
추적:=false;
image1.canvas.사각형(x1,y1,oldx,oldy);
너비:=abs(x2-x1);
높이:=abs(y2-y1);
form1.image1.Width:=너비;
form1.image1.Height:=높이;
newbitmap:=Tbitmap.create;
newbitmap.width:=너비;
newbitmap.height:=높이;
newbitmap.Canvas.CopyRect
(Rect(0, 0, 너비, 높이),form2.image1.canvas,
직사각형(x1, y1,x2,y2)); //복사
form1.image1.picture.bitmap:=newbitmap; //FORM의 IMAGE에 넣습니다.
newbitmap.free;
form2.숨기기;
form1.show;
끝;
끝;
12. MOUSEMOVE 처리는 마우스의 원점과 현재 위치 사이에 직사각형을 계속해서 그리고 지우는 것입니다.
직사각형은 제외.
절차 TForm2.Image1MouseMove
(발신자: TObject; Shift: TShiftState; X,
Y: 정수);
시작하다
if Trace=true then //마우스를 추적하고 있습니까?
시작 //예, 이전 직사각형을 지우고 새 직사각형을 그립니다.
image1.canvas를 사용하면
시작하다
직사각형(x1,y1,oldx,oldy);
직사각형(x1,y1,x,y);
oldx:=x;
옛날:=y;
끝;
끝
else if flag=true이면 //마우스가 있는 곳에 십자가를 그립니다.
시작하다
image1.canvas를 사용하면
시작하다
moveTo(foldx,0); //기존 십자가 지우기
LineTo(foldx,screen.height);
moveto(0,foldy);
lineto(screen.width,foldy);
moveTo(x,0); //새 십자가 그리기
LineTo(x,screen.height);
moveto(0,y);
lineto(screen.width,y);
접기x:=x;
폴디:=y;
끝;
끝;
끝;
13. 좋습니다. REGION 버튼에 대한 코드 작성으로 돌아가겠습니다.
절차 TForm1.RegionClick(Sender: TObject);
시작하다
form1.숨기기;
form2.숨기기;
form2.Timer1.Enabled:=true;
끝;
자, 드디어 성공적으로 마쳤습니다. 다시 실행하여 아름다운 화면을 복사해 보겠습니다. 바라보다
DELPHI는 훌륭한 데이터베이스 개발 도구일 뿐만 아니라 WINDOWS 작성을 위한 훌륭한 도구이기도 합니다.
프로그램에 대한 좋은 도우미. 우리는 감탄하지 않을 수 없습니다: Great DELPHI!
Jia Xuejie, Youhe Lane, 닝보시