ในตัวอย่างบทความต่อไปนี้ จะนำเสนอถึงโค้ดโปรแกรม ในการดึงภาพจากหน้าจอขึ้นมา ตามตำแหน่งของเมาส์ โดยจะนำภาพที่ได้มาแสดงบนหน้าต่างของโปรแกรม ชุดโปรแกรมที่ผมจะนำมาใช้ ในที่นี้คือ Borland Developer Studion 2006 (ในที่นี้ ผมขอเรียกกว่า BDS) ซึ่งจะเลือกใช้ชุดพัฒนาของ Delphi ดังนั้นโค้ดในตัวอย่างบทความนี้ คุณสามารถนำไปใช้กับ Delphi รุ่น 5,6 หรือ 7 ได้เหมือนกันครับ
สำหรับท่านที่ได้ที่ติดตั้งโปรแกรม BDS อยู่แล้ว ให้ทำการสร้างโปรเจคใหม่ โดยเลือกจาก เมนู File->New->VCL Forms Application - Delphi for Win32 จะปรากฏหน้าต่างของโปรแกรม
ต่อจากนั้นให้ทำการวางคอนโทรลที่อยู่ด้านข้าง 2 อย่างด้วยกันคือ TTimer และ TImage ดังรูป
รูปที่ 1 หน้าต่างการวางคอนโทรล
ในที่นี้ เราจะใช้ Image1 ในการแสดงผล สำหรับ Timer1 นั้นจะเป็นส่วนของการดึงภาพจากหน้าจอ ขึ้นมาแสดงบน Image1
ขั้นตอนต่อมาจะเป็นการใส่โค้ดลงในส่วนของ Timer1 โดยทำการกำหนดคุณสมบัติของ Timer1 โดยมีค่าดังนี้ Enabled=True และ Interval=1000
จากนั้นให้ทำการดับเบิ้ลคลิกบน Timer1 และป้อนโค้ดดังต่อไปนี้
procedure TForm1.Timer1Timer(Sender: TObject);
var
AppRect, SourceRect: TRect;
Canvas : TCanvas;
Point : TPoint;
Mag : Integer;
begin
if not IsIconic(Application.Handle) then
begin
AppRect := Rect(Self.Left,Self.Top,self.Left+self.Width,self.Top+self.Height );
GetCursorPos(Point);
if not PtInRect(AppRect,Point) then
begin
Canvas :=TCanvas.Create;
Canvas.Handle := GetDC(GetDesktopWindow);
Mag :=4;
SourceRect := Rect(Point.X,Point.Y,Point.X,Point.Y);
InflateRect(SourceRect,Round(Image1.Width/Mag),Round(Image1.Height/Mag));
Image1.Canvas.CopyRect(Image1.BoundsRect,Canvas,SourceRect);
Canvas.Free;
Application.ProcessMessages;
end;
end;
end;
|
จากโค้ดจะเป็นการประกาศตัวแปรแบบ TRect ซึ่งสามารถเก็บค่าที่เป็นตำแหน่งและขนาดของหน้าต่าง, ตัวแปร TCanvas ใช้สำหรับเก็บค่าของพื้นที่ ในส่วนที่สามารถวาดภาพหรือวางรูปภาพลงไปได้
เริ่มต้นจะเป็นการตรวจสอบว่าโปรแกรมไม่ได้อยู่ในโหมดของการย่อหน้าต่าง จากนั้นทำการสร้างตัวแปร AppRect สำหรับเก็บตำแหน่งและขนาดของหน้าต่างโปรแกรมที่ทำงานอยู่ในขณะนั้น ขั้นตอนถัดมาเป็นการ หาตำแหน่งของเคอร์เซอร์ไปเก็บไว้ในตัวแปร Point
ต่อมาจะทำการตรวจสอบว่าตำแหน่งของ เคอร์เซอร์ อยู่ในพื้นที่ของ AppRect หรือไม่ หากไม่อยู่ในพื้นที่ของโปรแกรม จะทำการสร้าง Canvas และใช้วิธีดึงภาพจากหน้าจอขึ้นมา หลังจากนั้นจะทำการตัดภาพที่ดึงมา โดยจะตัดภาพให้มีขนาดเป็นจำนวนเท่า ตามที่กำหนดไว้ใน ตัวแปร Mag มาใส่ไว้ใน คอนโทรล Image1
และสุดท้ายจะเป็นการเรียกใช้ Application.ProcessMessages เพื่อให้มีการตรวจสอบ เหตุการณ์อื่นๆของหน้าต่าง ไม่เช่นนั้นแล้ว หน้าต่างจะค้างนิ่ง ไม่ตอบสนองเหตุการณ์อื่นๆ (ไม่เชื่อก็ลอง เอาออกดูได้ครับ)
สุดท้ายก็แค่กดปุ่ม F9 เพื่อสั่งให้โปรแกรมทำงาน เพียงเท่านี้ คุณจะได้โปรแกรม Zoom หน้าจออย่างง่าย มาใช้งานแล้วครับ
?
รูปที่ 2 แสดงหน้าต่าง Run
ทิ้งท้าย
หวังว่าโค้ด เล็กๆน้อยๆ นี้จะเป็นประโยชน์บ้างสำหรับ เพื่อนๆพี่ๆน้อง ทุกท่าน
ขอขอบคุณที่ให้ความสนใจ และติดตามเว็บเรา ด้วยดี เสมอมา แล้วพบกันใหม่กับ
9'M |