DELPHI จาก Borland Company (ปัจจุบันเปลี่ยนชื่อเป็น INPRISE Company) เป็นโปรแกรม Windows ที่สะดวกที่สุดในปัจจุบัน
หนึ่งในเครื่องมือการวางแผน หลายคนคิดว่า DELPHI ปรากฏเป็นเครื่องมือในการพัฒนาฐานข้อมูล
โปรแกรม Windows ที่มีประสิทธิภาพสามารถพัฒนาได้ด้วยความเร็วสูง
ตอนนี้เราจะใช้ DELPHI เพื่อเขียนโปรแกรมคัดลอกหน้าจอที่ใช้งานได้จริง ดูสิภาพด้านล่าง
นี่คือตัวอย่างการคัดลอกหน้าจอภูมิภาคหลังจากรันโปรแกรมที่ตั้งโปรแกรมไว้ ไม่เลวเลย!
นักออกแบบที่มีพรสวรรค์ของบริษัท Borland ใช้วัตถุแคนวาส (Tcanvas) เพื่อห่อหุ้มกราฟิกส่วนใหญ่ใน Windows
ฟังก์ชั่นเอาท์พุตซึ่งช่วยให้เราสามารถจัดการกับหน้าจอ Windows ได้อย่างเป็นธรรมชาติมากขึ้น
และไม่ต้องกังวลกับเรื่องปวดหัวของฟังก์ชัน Windows API โปรแกรมสั้นต่อไปนี้สามารถเข้าใจได้ทั้งหมด
ภาพหน้าจอจะถูกคัดลอก
var //การประกาศตัวแปร
เต็มจอ:บิตแมป;
เต็มหน้าจอCanvas:TCanvas;
กระแสตรง:HDC;
//------------------------------------------------ ----------
DC := GetDC (0); // รับ DC ของหน้าจอ พารามิเตอร์ 0 หมายถึงหน้าจอ
FullscreenCanvas := TCanvas.Create; // สร้างวัตถุ CANVAS
FullscreenCanvas.Handle := DC; //กำหนด DC ของหน้าจอเป็น HANDLE
เต็มจอ Canvas.CopyRect
(สี่เหลี่ยม (0, 0, ความกว้างของหน้าจอ, ความสูงหน้าจอ),
ผ้าใบเต็มจอ,
สี่เหลี่ยม (0, 0, ความกว้างหน้าจอ, ความสูงหน้าจอ));
//คัดลอกทั้งหน้าจอไปที่ BITMAP
FullscreenCanvas.Free; //ปล่อยวัตถุ CANVAS
ReleaseDC (0, DC); // ปล่อย DC
//วัตถุ SCREEN เป็นวัตถุหน้าจอที่ DELPHI กำหนดไว้ล่วงหน้า เพียงใช้โดยตรง
หลังจากอ่านโค้ดข้างต้นแล้ว คุณจะพบว่าการเขียนโปรแกรมคัดลอกหน้าจอด้วย DELPHI นั้นง่ายมาก
แน่นอนว่าคุณต้องเขียนโปรแกรมคัดลอกหน้าจอที่ใช้งานได้จริง โค้ดข้างต้นเพียงอย่างเดียวไม่เพียงพอ
ต่อไปนี้เป็นแนวคิดการเขียนโปรแกรมหลัก:
1. การใช้งานสำเนาแบบเต็มหน้าจอ
ขั้นแรกให้ซ่อนโปรแกรมคัดลอกหน้าจอ และหลังจากช่วงระยะเวลาหนึ่ง ให้ใช้โปรแกรมด้านบนเพื่อทำการคัดลอกหน้าจอ
สำเนา.
2. การดำเนินการสำเนาระดับภูมิภาค
เพื่อให้ได้สำเนาพื้นที่ คุณต้องใช้เคล็ดลับเล็กๆ น้อยๆ ก่อน เรียกโปรแกรมคัดลอกแบบเต็มหน้าจอเพื่อคัดลอกทั้งหน้าจอ
ดาวน์โหลดแล้วแสดงภาพที่คัดลอกบนหน้าจอ จากนั้นให้ผู้ใช้ดำเนินการ
เลือกพื้นที่ที่ต้องการ และสุดท้ายคัดลอกพื้นที่ที่ผู้ใช้เลือก
การใช้งานการเขียนโปรแกรม:
1. ขั้นแรกให้เปิดโปรเจ็กต์ด้วย DELPHI3
2. วางส่วนประกอบ TPANEL บน FORM ตั้งค่า ALIGN=ALTOP จากนั้นเลือกแถบส่วนประกอบ ADDITIONAL
TSCROLLBOX วางบน FORM ตั้งค่า ALIGN=ALCLIENT แล้ววาง a
วัตถุ TIMAGE
3. วางปุ่ม 4 ปุ่มบน PANEL ได้แก่ FULL SCREEN, REGIN, SAVE และ EXIT
4. ทำสิ่งที่ทำง่ายก่อนแล้วเขียนโค้ดลงในเหตุการณ์ CLICK ของปุ่ม EXIT
ขั้นตอน TForm1.ExitClick (ผู้ส่ง: TObject);
เริ่ม
ปิด;
จบ;
5. ถัดไปคือการคัดลอกแบบเต็มหน้าจอ วางตัวจับเวลา TTIMER บน FROM และตั้งค่า ENABLED เป็น
FALSE INTERVAL ตั้งไว้ที่ 500 ซึ่งหมายความว่าจะเปิดใช้งานทุกๆ ครึ่งวินาที ดับเบิลคลิกที่ส่วนประกอบ TIMER และเขียนข้อความต่อไปนี้
รหัส.
ขั้นตอน TForm1.Timer1Timer (ผู้ส่ง: TObject);
var
เต็มจอ:บิตแมป;
เต็มหน้าจอCanvas:TCanvas;
กระแสตรง:HDC;
เริ่ม
timer1.Enabled:=false; //ยกเลิกนาฬิกา
เต็มจอ := TBitmap.Create; //สร้าง BITMAP เพื่อจัดเก็บภาพ
เต็มจอ กว้าง := หน้าจอ กว้าง;
Fullscreen.Height := หน้าจอความสูง;
DC := GetDC (0); // รับ DC ของหน้าจอ พารามิเตอร์ 0 หมายถึงหน้าจอ
FullscreenCanvas := TCanvas.Create; // สร้างวัตถุ CANVAS
FullscreenCanvas.Handle := DC;
เต็มจอ Canvas.CopyRect
(สี่เหลี่ยม (0, 0, ความกว้างของหน้าจอ, ความสูงหน้าจอ), ผ้าใบแบบเต็มหน้าจอ,
สี่เหลี่ยม (0, 0, ความกว้างหน้าจอ, ความสูงหน้าจอ));
//คัดลอกทั้งหน้าจอไปที่ BITMAP
FullscreenCanvas.Free; //ปล่อยวัตถุ CANVAS
ReleaseDC (0, DC); // ปล่อย DC
-
image1.picture.Bitmap:=fullscreen;//กำหนดภาพที่คัดลอกให้กับวัตถุ IMAGE
image1.Width:=เต็มจอ.กว้าง;
image1.Height:=เต็มจอความสูง;
fullscreen.free; //ปล่อยบิตแมป
form1.WindowState:=wsNormal; //คืนค่าสถานะหน้าต่าง
form1.show; //แสดงหน้าต่าง
messagebeep(1); //เสียงบี๊บดังหนึ่งครั้งเพื่อรายงานว่าภาพถูกถ่ายแล้ว
จบ;
6. รหัสถัดไปบนปุ่ม FULLSCREEN นั้นง่ายมาก
ขั้นตอน TForm1.FullscreenClick (ผู้ส่ง: TObject);
เริ่ม
form1.WindowState:=wsMinimized; //ย่อเล็กสุดหน้าต่างโปรแกรม
form1.hide; //ซ่อนโปรแกรม
timer1.enabled:=true; //เปิดตัวจับเวลา
จบ;
7. หลังจากคัดลอกรูปภาพแล้ว แน่นอนว่าจะต้องบันทึกปุ่ม SAVE ไว้
ดาวน์โหลดรหัส
ขั้นตอน TForm1.Save1Click (ผู้ส่ง: TObject);
เริ่ม
ถ้า savedialog1.Execute แล้ว
เริ่ม
form1.Image1.Picture.SaveToFile (savedialog1.filename)
จบ;
จบ;
8. ต่อไปนี้คือการดำเนินการคัดลอกโซน จากนั้นสร้าง FORM ใหม่ ตั้งค่า BorderStype เป็น bsNone เพื่อให้สามารถแสดงได้
สำหรับแบบเต็มหน้าจอ ให้วางส่วนประกอบ TIMAGE ไว้ ตั้งค่า ALIGN เป็น ALCLIENT และวาง TTIMER
วิดเจ็ต โปรแกรมของวิดเจ็ต TIMER นั้นคล้ายกับที่กล่าวมาข้างต้นมาก เนื่องจากสิ่งแรกที่ต้องทำคือการคัดลอกแบบเต็มหน้าจอ
คาวรี่
ขั้นตอน TForm2.Timer1Timer (ผู้ส่ง: TObject);
var
เต็มจอ:บิตแมป;
เต็มหน้าจอCanvas:TCanvas;
กระแสตรง:HDC;
เริ่ม
timer1.Enabled:=false;
เต็มจอ := TBitmap.Create;
เต็มจอ กว้าง := หน้าจอ กว้าง;
Fullscreen.Height := หน้าจอความสูง;
ดีซี := GetDC (0);
FullscreenCanvas := TCanvas.Create;
FullscreenCanvas.Handle := DC;
เต็มจอ Canvas.CopyRect (Rect
(0, 0, ความกว้างของหน้าจอ, ความสูงของหน้าจอ), แคนวาสแบบเต็มหน้าจอ,
สี่เหลี่ยม (0, 0, ความกว้างหน้าจอ, ความสูงหน้าจอ));
เต็มจอCanvas.Free;
ปล่อยDC (0, DC);
image1.picture.Bitmap:=เต็มจอ;
image1.Width:=เต็มจอ.กว้าง;
image1.Height:=เต็มจอความสูง;
เต็มจอฟรี;
form2.WindowState:=wsขยายใหญ่สุด;
form2.แสดง;
ข้อความบี๊บ(1);
พับx:=-1;
พับ:=-1;
image1.Canvas.Pen.mode:=pmnot; // โหมดปากกากลับด้าน
image1.canvas.pen.color:=clblack; //ปากกาเป็นสีดำ
image1.canvas.brush.Style:=bsclear; //แปรงเปล่า
ธง:=จริง;
จบ;
9. มีโปรแกรมเหตุการณ์สองโปรแกรมบนส่วนประกอบ TIMAGE ที่ต้องเขียน โปรแกรมหนึ่งคือ ONMOUSEDOWN และอีกโปรแกรมหนึ่ง
มันเป็นเมาส์มูฟ
10. คุณสามารถมองย้อนกลับไปถึงแนวคิดการคัดลอกภูมิภาคได้ในขณะนี้
ได้รับและแสดงบนหน้าจอด้วย กดปุ่มซ้ายของเมาส์เพื่อเป็นจุดเริ่มต้นของพื้นที่
มีสี่เหลี่ยมอยู่ระหว่างจุดเริ่มต้นกับเมาส์ โดยจะเปลี่ยนไปเมื่อเมาส์เคลื่อนที่อีกครั้ง
คลิกปุ่มซ้ายของเป้าหมาย ในขณะนี้ พื้นที่ที่อยู่ติดกับสี่เหลี่ยมคือภาพที่เราต้องการ
11. ดังนั้น MOUSEDOWN จึงมีการประมวลผลการตอบสนอง 2 แบบ ดูขั้นตอนต่อไปนี้
ขั้นตอน TForm2.Image1MouseDown
(ผู้ส่ง: TObject; ปุ่ม: TMouseButton;
Shift: TShiftState; X, Y: จำนวนเต็ม);
var
ความกว้าง,ความสูง:จำนวนเต็ม;
บิตแมปใหม่:Tbitmap;
เริ่ม
if (trace=false) ดังนั้น // TRACE ระบุว่าเมาส์กำลังถูกติดตามหรือไม่
start //คลิกปุ่มซ้ายของเมาส์เป็นครั้งแรกเพื่อเริ่มติดตามเมาส์
ธง:=เท็จ;
ด้วย image1.canvas ทำ
เริ่ม
ย้ายไป(foldx,0);
LineTo(foldx,screen.height);
moveto(0,พับ);
lineto(screen.width,foldy);
จบ;
x1:=x;
y1:=y;
เก่าx:=x;
คนแก่:=y;
ติดตาม:=จริง;
image1.Canvas.Pen.mode:=pmnot; // โหมดปากกากลับด้าน
//วาดรูปสี่เหลี่ยมอีกครั้งในตำแหน่งเดิม ซึ่งเทียบเท่ากับการลบสี่เหลี่ยม
image1.canvas.pen.color:=clblack; //ปากกาเป็นสีดำ
image1.canvas.brush.Style:=bsclear;//แปรงเปล่า
จบ
อื่น
start //การคลิกครั้งที่สองแสดงว่าได้รับสี่เหลี่ยมแล้ว
//คัดลอกไปยังองค์ประกอบ IMAGE ใน FORM1
x2:=x;
y2:=y;
ติดตาม:=เท็จ;
image1.canvas.rectangle(x1,y1,oldx,oldy);
ความกว้าง:=abs(x2-x1);
ความสูง:=หน้าท้อง(y2-y1);
form1.image1.Width:=ความกว้าง;
form1.image1.Height:=ความสูง;
บิตแมปใหม่:=Tbitmap.create;
newbitmap.width:=ความกว้าง;
newbitmap.height:=ความสูง;
newbitmap.Canvas.CopyRect
(สี่เหลี่ยม (0, 0, ความกว้าง, ความสูง),form2.image1.canvas,
แก้ไข (x1, y1, x2, y2)); // คัดลอก
form1.image1.picture.bitmap:=newbitmap; //วางไว้บน IMAGE ของ FORM
newbitmap.free;
form2.ซ่อน;
form1.แสดง;
จบ;
จบ;
12. การประมวลผลของ MOUSEMOVE คือการวาดและลบสี่เหลี่ยมอย่างต่อเนื่องระหว่างจุดเริ่มต้นและตำแหน่งปัจจุบันของเมาส์
ยกเว้นสี่เหลี่ยม..
ขั้นตอน TForm2.Image1MouseMove
(ผู้ส่ง: TObject; Shift: TShiftState; X,
Y: จำนวนเต็ม);
เริ่ม
ถ้า trace=true แล้ว //คุณกำลังติดตามเมาส์อยู่หรือเปล่า?
เริ่ม //ใช่ ลบสี่เหลี่ยมเก่าแล้ววาดรูปใหม่
ด้วย image1.canvas ทำ
เริ่ม
สี่เหลี่ยมผืนผ้า (x1,y1,oldx,oldy);
สี่เหลี่ยมผืนผ้า(x1,y1,x,y);
เก่าx:=x;
คนแก่:=y;
จบ;
จบ
อย่างอื่นถ้า flag=true ให้ //วาดรูปกากบาทบริเวณที่เมาส์อยู่
เริ่ม
ด้วย image1.canvas ทำ
เริ่ม
moveTo(foldx,0); //ลบกากบาทเก่า
LineTo(foldx,screen.height);
moveto(0,พับ);
lineto(screen.width,foldy);
moveTo(x,0); //วาดกากบาทใหม่
LineTo(x,screen.height);
ย้ายไป(0,y);
lineto(หน้าจอ.ความกว้าง,y);
พับx:=x;
พับ:=y;
จบ;
จบ;
จบ;
13. เอาล่ะ กลับไปเขียนโค้ดสำหรับปุ่ม REGION กัน
ขั้นตอน TForm1.RegionClick (ผู้ส่ง: TObject);
เริ่ม
form1.ซ่อน;
form2.ซ่อน;
form2.Timer1.Enabled:=true;
จบ;
เอาล่ะ ในที่สุดเราก็ทำสำเร็จแล้ว มารันอีกครั้งและคัดลอกหน้าจอที่สวยงามกันเถอะ! ดู
DELPHI ไม่เพียงแต่เป็นเครื่องมือพัฒนาฐานข้อมูลที่ยอดเยี่ยมเท่านั้น แต่ยังเป็นเครื่องมือที่ยอดเยี่ยมสำหรับการเขียน WINDOWS อีกด้วย
ตัวช่วยที่ดีสำหรับโปรแกรม อย่าช่วยแต่ชื่นชม: DELPHI ผู้ยิ่งใหญ่!
Jia Xuejie, Youhe Lane, เมืองหนิงโป