(السادس) نموذج التقاط المنطقة
قم بإنشاء نموذج جديد ، حفظ كـ capture1.pas. تعيين خصائص الأربعة للحدود السمة على خطأ.
تم تعيين BorderStyle على BSNONE ، يتم تعيين المؤشر على crcross ، تم تعيين FormStyle على fsstayontop.
إضافة متغير خاص: Fdragging: Boolean ؛
وظيفة form1: تم إنشاؤها عند الاستيلاء على المنطقة ، تختفي بعد الاستيلاء على الصورة.
وحدة التقاط 1 ؛
واجهة
يستخدم
Windows ، الرسائل ، sysutils ، المتغيرات ، الفئات ، الرسومات ، عناصر التحكم ، النماذج ،
مربعات حوار
يكتب
tform1 = فئة (tform)
Formcreate الإجراء (المرسل: TOBJECT) ؛
الإجراء FormDestroy (المرسل: tobject) ؛
Formpaint الإجراء (المرسل: tooject) ؛
Formmousedown الإجراء (المرسل: TOBJECT ؛ زر: TMOUSEBUTTON ؛
Shift: TshiftState ؛
FormMouseMove الإجراء (المرسل: TOBJECT ؛ Shift: TSHIFTSTATE ؛ X ،
Y: عدد صحيح) ؛
FormMouseup الإجراء (المرسل: TOBJECT ؛ زر: TMOUSEBUTTON ؛
Shift: TshiftState ؛
خاص
fdragging: منطقية ؛
عام
FRECT: TRECT ؛
FBMP: tbitmap ؛
نهاية؛
var
Form1: Tform1 ؛
تطبيق
{$ r *.dfm}
الإجراء tform1.formcreate (المرسل: tobject) ؛
Var ADC: HDC ؛
يبدأ
fbmp: = tbitmap.create ؛
fbmp.width: = screen.width ؛
fbmp.hight: = screen.hight ؛
ADC: = GETDC (0)
bitblt (fbmp.canvas.handle ، 0،0 ، screen.width ، screen.height ، adc ، 0،0 ، srccopy) ؛
تم إصداره (0 ، ADC ،) ؛
setBounds (0،0 ، screen.width ، screen.hight) ؛
نهاية؛
الإجراء tform1.formdestroy (المرسل: tobject) ؛
يبدأ
fbmp.free ؛
نهاية؛
الإجراء tform1.formpaint (المرسل: tobject) ؛
يبدأ
canvas.draw (0،0 ، fbmp) ؛
نهاية؛
// إذا ضغطت على زر الماوس الأيسر ، فاستخدم SetRect لتعيين FRECT المستطيل بحيث تكون مجرد نقطة.
// ارسم هذا المستطيل مع DrawFocusRect
الإجراء tform1.formmousedown (المرسل: TOBJECT ؛ زر: TMOUSEBUTTON ؛
Shift: TshiftState ؛
يبدأ
إذا كان زر = mbleft ثم ابدأ
fdragging: = صحيح ؛
SetRect (FRECT ، X ، Y ، X ، Y) ؛
canvas.drawfocusrect (FRECT) ؛
نهاية؛
نهاية؛
// عندما يتحرك الماوس ، حدد ما إذا كان في الرسم (اضغط على زر الماوس الأيسر) ، وقم بإعادة تعيين المستطيل
// اجعل الزاوية اليمنى السفلى موضع الماوس الحالي ، ورسم مستطيلًا عند استدعاء DrawFocusRrect
الإجراء tform1.formmousemove (المرسل: tobject ؛ Shift: tshiftstate ؛ x ،
Y: عدد صحيح) ؛
يبدأ
إذا كان fddragging ثم ابدأ
canvas.drawfocusrect (FRECT) ؛
frect.right: = x ؛
frect.bottom: = y ؛
canvas.drawfocusrect (FRECT) ؛
نهاية؛
نهاية؛
// احكم على ما إذا كان في الرسم (اضغط على زر الماوس الأيسر) ، عندما يظهر الماوس ،
// drawfocusrect إعادة تعيين المستطيل
الإجراء tform1.formmouseup (المرسل: TOBJECT ؛ زر: TMOUSEBUTTON ؛
Shift: TshiftState ؛
يبدأ
إذا كان fddragging ثم ابدأ
canvas.drawfocusrect (FRECT) ؛
fdragging: = خطأ ؛
نهاية؛
ModalResult: = MROK ؛
نهاية؛
نهاية.