يعد برنامج DELPHI من شركة Borland (التي أعيدت تسميتها الآن بشركة INPRISE) هو برنامج Windows الأكثر ملاءمة حاليًا.
إحدى أدوات التخطيط. يعتقد الكثير من الناس أن DELPHI تظهر كأداة لتطوير قاعدة البيانات
يمكن تطوير برامج Windows الفعالة بسرعة فائقة.
الآن سوف نستخدم DELPHI لكتابة برنامج عملي لنسخ الشاشة. انظر الصورة أدناه
وهذا مثال على نسخ الشاشة الإقليمية بعد تشغيل البرنامج المبرمج.
يستخدم المصممون الموهوبون في شركة Borland كائن اللوحة القماشية (Tcanvas) لتغليف معظم الرسومات في Windows.
وظيفة الإخراج، والتي تسمح لنا بالتعامل مع شاشة Windows بطريقة أكثر سهولة،
ولا داعي للقلق بشأن صداع وظائف Windows API. يمكن للبرنامج القصير التالي تحقيق كامل
يتم نسخ صورة الشاشة.
فار // إعلان متغير
ملء الشاشة:Tbitmap؛
ملء الشاشة قماش: TCanvas؛
العاصمة: هدك؛
//---------------------------------------------------------------- ----------
DC := GetDC (0); // احصل على DC للشاشة، تشير المعلمة 0 إلى الشاشة
FullscreenCanvas := TCanvas.Create;
FullscreenCanvas.Handle := DC; // قم بتعيين DC للشاشة للمقبض
ملء الشاشة.قماش.نسخ
(مستقيم (0، 0، الشاشة. العرض، الشاشة. الارتفاع)،
قماش ملء الشاشة,
مستطيل (0، 0، الشاشة. العرض، الشاشة. الارتفاع))؛
// انسخ الشاشة بأكملها إلى BITMAP
FullscreenCanvas.Free؛ // حرر كائن CANVAS
ReleaseDC (0، DC)؛ // الافراج عن DC
// كائن SCREEN هو كائن شاشة محدد مسبقًا بواسطة DELPHI، فقط استخدمه مباشرةً.
بعد قراءة الكود أعلاه، ستجد أنه من السهل جدًا كتابة برنامج نسخ الشاشة باستخدام DELPHI.
بالطبع، تحتاج إلى كتابة برنامج عملي لنسخ الشاشة، فالكود أعلاه وحده لا يكفي.
فيما يلي أفكار البرمجة الرئيسية:
1. تنفيذ نسخة ملء الشاشة
قم أولاً بإخفاء برنامج نسخ الشاشة، وبعد فترة زمنية معينة استخدم البرنامج أعلاه لتحقيق نسخ الشاشة.
ينسخ.
2. تنفيذ النسخة الإقليمية
لتحقيق نسخة المنطقة، تحتاج إلى استخدام خدعة صغيرة أولاً قم باستدعاء برنامج النسخ بملء الشاشة لنسخ الشاشة بأكملها.
قم بتنزيلها، ثم اعرض الصورة المنسوخة على الشاشة، ثم اسمح للمستخدم بذلك
حدد المنطقة المطلوبة، وأخيرًا انسخ المنطقة التي حددها المستخدم.
تنفيذ البرمجة:
1. افتح أولاً مشروعًا باستخدام DELPHI3.
2. ضع مكون TPANEL على النموذج، واضبط ALIGN=ALTOP، ثم حدد شريط المكونات الإضافي
TSCROLLBOX، ضعه في النموذج، واضبط ALIGN=ALCLIENT، ثم ضع
كائن الزمن.
3. ضع 4 أزرار على اللوحة، وهي الشاشة الكاملة، والتسجيل، والحفظ، والخروج.
4. افعل ما هو سهل أولاً واكتب الكود في حدث CLICK الخاص بالزر EXIT
الإجراء TForm1.ExitClick(Sender: TObject);
يبدأ
يغلق؛
نهاية؛
5. الخطوة التالية هي الحصول على نسخة بملء الشاشة، ضع مؤقت TTIMER على FROM واضبطه على ENABLED
FALSE، تم ضبط INTERVAL على 500، مما يعني أنه يتم تنشيطه مرة واحدة كل نصف ثانية. انقر نقرًا مزدوجًا فوق مكون TIMER واكتب ما يلي
شفرة.
الإجراء TForm1.Timer1Timer(Sender: TObject);
فار
ملء الشاشة:Tbitmap؛
ملء الشاشة قماش: TCanvas؛
العاصمة: هدك؛
يبدأ
timer1.Enabled:=false; // إلغاء الساعة
ملء الشاشة := TBitmap.Create; // أنشئ صورة نقطية لتخزين الصور
Fullscreen.Width := screen.width;
ملء الشاشة.الارتفاع:= الشاشة.الارتفاع؛
DC := GetDC (0); // احصل على DC للشاشة، تشير المعلمة 0 إلى الشاشة
FullscreenCanvas := TCanvas.Create;
FullscreenCanvas.Handle := DC;
ملء الشاشة.قماش.نسخ
(مستقيم (0، 0، الشاشة. العرض، الشاشة. الارتفاع)، ملء الشاشة، قماش،
مستطيل (0، 0، الشاشة. العرض، الشاشة. الارتفاع))؛
// انسخ الشاشة بأكملها إلى BITMAP
FullscreenCanvas.Free؛ // حرر كائن CANVAS
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);
يبدأ
إذا savedialog1.Execute بعد ذلك
يبدأ
form1.Image1.Picture.SaveToFile(savedialog1.filename)
نهاية؛
نهاية؛
8. فيما يلي تنفيذ نسخة المنطقة. ثم قم بإنشاء نموذج جديد، وقم بتعيين BorderStype على bsNone، بحيث يمكن عرضه
للحصول على ملء الشاشة، ضع مكون TIMAGE عليه، واضبط ALIGN على ALCLIENT، ثم ضع TTIMER
القطعة، برنامج القطعة TIMER يشبه إلى حد كبير ما ورد أعلاه، لأن أول شيء يجب تحقيقه هو النسخ بملء الشاشة.
كاوري.
الإجراء TForm2.Timer1Timer(Sender: TObject);
فار
ملء الشاشة:Tbitmap؛
ملء الشاشة قماش: TCanvas؛
العاصمة: هدك؛
يبدأ
timer1.Enabled:=false;
ملء الشاشة := TBitmap.Create;
Fullscreen.Width := screen.width;
ملء الشاشة.الارتفاع:= الشاشة.الارتفاع؛
DC := GetDC (0);
FullscreenCanvas := TCanvas.Create;
FullscreenCanvas.Handle := DC;
ملء الشاشة.قماش.نسخ (مستقيم
(0، 0، الشاشة. العرض، الشاشة. الارتفاع)، ملء الشاشة،
مستطيل (0، 0، الشاشة. العرض، الشاشة. الارتفاع))؛
FullscreenCanvas.Free؛
إطلاق DC (0، DC)؛
image1.picture.Bitmap:=fullscreen;
image1.Width:=fullscreen.Width;
image1.Height:=fullscreen.Height;
fullscreen.free;
form2.WindowState:=wsMaximized;
form2.show;
messagebeep(1);
Foldx:=-1;
مطوي:=-1;
image1.Canvas.Pen.mode:=pmnot; // وضع القلم مقلوب
image1.canvas.pen.color:=clblack; //القلم أسود
image1.canvas.brush.Style:=bsclear; // فرشاة فارغة
العلم:=صحيح؛
نهاية؛
9. هناك برنامجان للأحداث في مكون TIMAGE يجب كتابتهما، أحدهما ONMOUSEDOWN والآخر
إنها ONMOUSEMOVE.
10. يمكنك إلقاء نظرة على فكرة نسخ المنطقة في هذا الوقت
يتم الحصول عليها ويتم عرضها أيضًا على الشاشة اضغط على زر الفأرة الأيسر ليكون أصل المنطقة ثم حرك الماوس إليها
يوجد مستطيل بين الأصل والماوس يتغير مع تحرك الماوس.
انقر فوق الزر الأيسر للهدف في هذا الوقت، المساحة التي يحتويها المستطيل هي الصورة التي نريد الحصول عليها.
11. إذن، يحتوي MOUSEDOWN على معالجتين للاستجابة، راجع الإجراء التالي.
الإجراء TForm2.Image1MouseDown
(المرسل: TObject؛ الزر: TMouseButton؛
التحول: TShiftState؛ X، Y: عدد صحيح)؛
فار
العرض والارتفاع: عدد صحيح؛
newbitmap:Tbitmap;
يبدأ
إذا (trace=false) فإن // TRACE يشير إلى ما إذا كان يتم تعقب الماوس أم لا
ابدأ // انقر فوق زر الماوس الأيسر لأول مرة لبدء تتبع الماوس.
العلم:=خطأ؛
مع image1.canvas تفعل
يبدأ
moveTo(foldx,0);
LineTo(foldx,screen.height);
moveto(0,foldy);
lineto(screen.width,foldy);
نهاية؛
x1:=x;
y1:=y;
Oldx:=x;
عجوز:=ص;
تتبع:=صحيح؛
image1.Canvas.Pen.mode:=pmnot; // وضع القلم مقلوب
// ارسم المستطيل مرة أخرى في مكانه الأصلي، وهو ما يعادل مسح المستطيل.
image1.canvas.pen.color:=clblack; //القلم أسود
image1.canvas.brush.Style:=bsclear;// فرشاة فارغة
نهاية
آخر
ابدأ // تشير النقرة الثانية إلى أنه تم الحصول على المستطيل.
// انسخه إلى مكون الصورة في FORM1.
x2:=x;
y2:=y;
تتبع:=خطأ؛
image1.canvas.rectangle(x1,y1,oldx,oldy);
العرض:=أبس(x2-x1);
الارتفاع: = القيمة المطلقة (y2-y1)؛
form1.image1.Width:=Width;
form1.image1.Height:=Height;
newbitmap:=Tbitmap.create;
newbitmap.width:=width;
newbitmap.height:=height;
newbitmap.Canvas.CopyRect
(مستقيم (0، 0، العرض، الارتفاع)،form2.image1.canvas،
مستطيل (x1، y1،x2،y2)); //نسخ
form1.image1.picture.bitmap:=newbitmap; // ضعه على صورة النموذج
newbitmap.free;
form2.hide;
form1.show;
نهاية؛
نهاية؛
12. تتمثل معالجة MOUSEMOVE في رسم ومسح المستطيلات بشكل مستمر بين الأصل والموضع الحالي للماوس.
إلا المستطيل.
الإجراء TForm2.Image1MouseMove
(المرسل: TObject؛ Shift: TShiftState؛ X،
ص: عدد صحيح)؛
يبدأ
إذا كان تتبع = صحيح ثم // هل تقوم بتتبع الماوس؟
ابدأ // نعم، امسح المستطيل القديم وارسم مستطيلًا جديدًا
مع image1.canvas تفعل
يبدأ
مستطيل (x1،y1،oldx،oldy)؛
مستطيل(x1,y1,x,y);
Oldx:=x;
عجوز:=ص;
نهاية؛
نهاية
وإلا إذا كان العلم = صحيحًا، فارسم تقاطعًا حيث يوجد الماوس
يبدأ
مع 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);
Foldx:=x;
مطوي:=y;
نهاية؛
نهاية؛
نهاية؛
13. حسنًا، لنعد إلى كتابة الكود الخاص بالزر REGION.
الإجراء TForm1.RegionClick(Sender: TObject);
يبدأ
form1.Hide;
form2.hide;
form2.Timer1.Enabled:=true;
نهاية؛
حسنًا، لقد انتهينا من ذلك بنجاح فلنقم بتشغيله مرة أخرى ونسخ الشاشة الجميلة! ينظر
إن DELPHI ليست أداة ممتازة لتطوير قواعد البيانات فحسب، ولكنها أيضًا أداة ممتازة لكتابة WINDOWS
مساعد جيد للبرنامج. دعونا لا نتوقف عن الإعجاب: دلفي العظيم!
جيا شيوجي، يوهي لين، مدينة نينغبو