DELPHI dari Borland Company (sekarang berganti nama menjadi INPRISE Company) saat ini merupakan program Windows yang paling nyaman.
Salah satu alat perencanaan. Banyak orang mengira DELPHI muncul sebagai alat pengembangan database
Program Windows yang efisien dapat dikembangkan dengan kecepatan sangat tinggi.
Sekarang kita akan menggunakan DELPHI untuk menulis program penyalinan layar praktis. Lihat, gambar di bawah ini
Ini adalah contoh penyalinan layar regional setelah menjalankan program yang diprogram.
Para desainer berbakat dari Perusahaan Borland menggunakan objek kanvas (Tcanvas) untuk merangkum sebagian besar grafik di Windows.
Fungsi keluaran, yang memungkinkan kita menangani layar Windows dengan cara yang lebih intuitif,
Dan tidak perlu khawatir dengan pusingnya fungsi Windows API. Program singkat berikut ini dapat mewujudkan keseluruhannya
Gambar layar disalin.
var //deklarasi variabel
Layar penuh:Tbitmap;
Kanvas Layar Penuh:TCanvas;
dc:HDC;
//------------------------------------------------ ----------
DC := GetDC (0); //Dapatkan DC layar, parameter 0 mengacu pada layar
FullscreenCanvas := TCanvas.Create; //Buat objek KANVAS
FullscreenCanvas.Handle := DC; //Tetapkan DC layar ke HANDLE
Layar penuh.Canvas.CopyRect
(Persegi (0, 0, layar.Lebar, layar.Tinggi),
layar penuhKanvas,
Persegi (0, 0, Layar.Lebar, Layar.Tinggi));
//Salin seluruh layar ke BITMAP
FullscreenCanvas.Free; //Lepaskan objek CANVAS
RilisDC (0, DC); //Lepaskan DC
//Objek SCREEN adalah objek layar yang telah ditentukan oleh DELPHI, gunakan saja secara langsung.
Setelah membaca kode di atas, Anda akan menemukan bahwa menulis program penyalinan layar dengan DELPHI memang sangat sederhana.
Tentu saja, Anda perlu menulis program penyalinan layar yang praktis. Kode di atas saja tidak cukup.
Berikut ini adalah ide pemrograman utama:
1. Implementasi salinan layar penuh
Pertama-tama sembunyikan program penyalinan layar, dan setelah jangka waktu tertentu, gunakan program di atas untuk mencapai penyalinan layar.
menyalin.
2. Implementasi salinan regional
Untuk mencapai penyalinan area, Anda perlu menggunakan sedikit trik. Pertama, panggil program penyalinan layar penuh untuk menyalin seluruh layar.
unduh, lalu tampilkan gambar yang disalin di layar, lalu izinkan pengguna melakukannya
Pilih area yang diperlukan, dan terakhir salin area yang dipilih pengguna.
Implementasi pemrograman:
1. Pertama buka proyek dengan DELPHI3.
2. Tempatkan komponen TPANEL pada FORM, atur ALIGN=ALTOP, lalu pilih bilah komponen TAMBAHAN
TSCROLLBOX, letakkan pada FORM, atur ALIGN=ALCLIENT, lalu letakkan a
objek WAKTU.
3. Letak 4 tombol pada PANEL yaitu FULL SCREEN, REGIN, SAVE, dan EXIT.
4. Lakukan yang mudah terlebih dahulu dan tulis kodenya pada event CLICK pada tombol EXIT
prosedur TForm1.ExitClick(Pengirim: TObject);
mulai
menutup;
akhir;
5. Berikutnya adalah mewujudkan penyalinan layar penuh. Tempatkan pengatur waktu TTIMER pada FROM dan atur ENABLED ke
FALSE, INTERVAL diatur ke 500, yang berarti diaktifkan setiap setengah detik sekali. Klik dua kali komponen TIMER dan tulis yang berikut ini
kode.
prosedur TForm1.Timer1Timer(Pengirim: TObject);
var
Layar penuh:Tbitmap;
Kanvas Layar Penuh:TCanvas;
dc:HDC;
mulai
timer1.Enabled:=false; //Batalkan jam
Layar Penuh := TBitmap.Create; //Buat BITMAP untuk menyimpan gambar
Layar Penuh.Lebar := layar.lebar;
Layar Penuh.Tinggi := layar.Tinggi;
DC := GetDC (0); //Dapatkan DC layar, parameter 0 mengacu pada layar
FullscreenCanvas := TCanvas.Create; //Buat objek KANVAS
Layar PenuhCanvas.Handle := DC;
Layar penuh.Canvas.CopyRect
(Persegi (0, 0, layar.Lebar, layar.Tinggi), layar penuhKanvas,
Persegi (0, 0, Layar.Lebar, Layar.Tinggi));
//Salin seluruh layar ke BITMAP
FullscreenCanvas.Free; //Lepaskan objek CANVAS
RilisDC (0, DC); //Lepaskan DC
//******************************
image1.picture.Bitmap:=layar penuh;//Tetapkan gambar yang disalin ke objek IMAGE
gambar1.Lebar:=layar penuh.Lebar;
image1.Height:=layar penuh.Tinggi;
layar penuh.gratis; //Rilis bitmap
form1.WindowState:=wsNormal; //Pulihkan status jendela
form1.show; //Tampilan jendela
messagebeep(1); //BIP berbunyi sekali untuk melaporkan bahwa gambar telah diambil.
akhir;
6. Kode selanjutnya pada tombol FULLSCREEN sangatlah sederhana.
prosedur TForm1.FullscreenClick(Pengirim: TObject);
mulai
form1.WindowState:=wsMinimized; //Minimalkan jendela program
form1.hide; //Sembunyikan programnya
timer1.enabled:=true; //Buka pengatur waktu
akhir;
7. Setelah menyalin gambar, tentu saja perlu disimpan. Tombol SAVE ikut bermain.
Unduh kodenya.
prosedur TForm1.Save1Click(Pengirim: TObject);
mulai
jika disimpandialog1.Jalankan lalu
mulai
form1.Image1.Picture.SaveToFile(simpandialog1.namafile)
akhir;
akhir;
8. Berikut implementasi zone copy. Kemudian Baru FORM, atur BorderStype ke bsNone, agar bisa ditampilkan
Untuk layar penuh, tempatkan komponen TIMAGE di atasnya, atur ALIGN ke ALCLIENT, dan tempatkan TTIMER
widget, program widget TIMER sangat mirip dengan di atas, karena hal pertama yang perlu dilakukan adalah penyalinan layar penuh.
cowry.
prosedur TForm2.Timer1Timer(Pengirim: TObject);
var
Layar penuh:Tbitmap;
Kanvas Layar Penuh:TCanvas;
dc:HDC;
mulai
timer1.Enabled:=false;
Layar penuh := TBitmap.Create;
Layar Penuh.Lebar := layar.lebar;
Layar Penuh.Tinggi := layar.Tinggi;
DC := DapatkanDC (0);
Layar PenuhKanvas := TCanvas.Buat;
Layar PenuhCanvas.Handle := DC;
Layar Penuh.Canvas.CopyRect (Rect
(0, 0, layar.Lebar, layar.Tinggi), layar penuhKanvas,
Persegi (0, 0, Layar.Lebar, Layar.Tinggi));
Layar PenuhKanvas.Gratis;
RilisDC (0, DC);
image1.picture.Bitmap:=layar penuh;
gambar1.Lebar:=layar penuh.Lebar;
image1.Height:=layar penuh.Tinggi;
layar penuh.gratis;
form2.WindowState:=wsDimaksimalkan;
form2.tampilkan;
bunyi pesan(1);
lipatx:=-1;
lipat:=-1;
image1.Canvas.Pen.mode:=pmnot; //Mode pena terbalik
image1.canvas.pen.color:=clblack; //Pena berwarna hitam
image1.canvas.brush.Style:=bsclear; //Kuas kosong
bendera:=benar;
akhir;
9. Ada dua program event pada komponen TIMAGE yang perlu ditulis, satu adalah ONMOUSEDOWN dan yang lainnya
Ini ONMOUSEMOVE.
10. Anda dapat melihat kembali ide penyalinan wilayah. Saat ini, kami sudah melakukannya
diperoleh dan juga ditampilkan di layar. Tekan tombol kiri mouse untuk menjadi asal area. Kemudian gerakkan mouse ke
Ada persegi panjang antara titik asal dan mouse. Ini berubah seiring gerakan mouse.
Klik tombol kiri target. Saat ini, area yang terdapat dalam persegi panjang adalah gambar yang ingin kita dapatkan.
11. Jadi MOUSEDOWN memiliki dua proses respon, lihat prosedur berikut.
prosedur TForm2.Image1MouseDown
(Pengirim: TObject; Tombol: TMouseButton;
Pergeseran: TShiftState; X, Y: Integer);
var
lebar, tinggi: bilangan bulat;
bitmap baru:Tbitmap;
mulai
if (trace=false) maka // TRACE menunjukkan apakah mouse sedang dilacak
mulai //Klik tombol kiri mouse untuk pertama kalinya untuk mulai melacak mouse.
bendera:=salah;
dengan image1.canvas lakukan
mulai
pindah Ke(lipatx,0);
LineTo(foldx,layar.tinggi);
pindah ke(0,lipat);
lineto(layar.lebar,lipat);
akhir;
x1:=x;
kamu1:=kamu;
lamax:=x;
tua:=kamu;
jejak:=benar;
image1.Canvas.Pen.mode:=pmnot; //Mode pena terbalik
//Gambarlah kembali persegi panjang tersebut di tempat semula, yang sama dengan menghapus persegi panjang tersebut.
image1.canvas.pen.color:=clblack; //Pena berwarna hitam
image1.canvas.brush.Style:=bsclear;//Kuas kosong
akhir
kalau tidak
mulai //Klik kedua menandakan persegi panjang sudah didapat.
//Salin ke komponen IMAGE di FORM1.
x2:=x;
kamu2:=kamu;
jejak:=salah;
image1.kanvas.persegi panjang(x1,y1,oldx,oldy);
lebar:=abs(x2-x1);
tinggi:=abs(y2-y1);
form1.image1.Width:=Lebar;
form1.image1.Tinggi:=Tinggi;
bitmap baru:=Tbitmap.buat;
bitmap baru.lebar:=lebar;
bitmap baru.tinggi:=tinggi;
bitmap baru.Canvas.CopyRect
(Persegi (0, 0, lebar, Tinggi),form2.image1.canvas,
Benar (x1, y1,x2,y2)); //Salin
form1.image1.picture.bitmap:=newbitmap; //Letakkan di GAMBAR FORMULIR
bitmap baru.gratis;
form2.sembunyikan;
form1.tampilkan;
akhir;
akhir;
12. Pemrosesan MOUSEMOVE adalah menggambar dan menghapus persegi panjang secara terus menerus antara titik asal dan posisi mouse saat ini.
Kecuali persegi panjang.
prosedur TForm2.Image1MouseMove
(Pengirim: TObject; Shift: TShiftState; X,
Y: Bilangan Bulat);
mulai
if trace=true lalu //Apakah Anda melacak mouse?
mulai //Ya, hapus persegi panjang lama dan gambar yang baru
dengan image1.canvas lakukan
mulai
persegi panjang(x1,y1,lamax,lama);
Persegi Panjang(x1,y1,x,y);
lamax:=x;
tua:=kamu;
akhir;
akhir
else if flag=true lalu //Gambarlah tanda silang di tempat mouse berada
mulai
dengan image1.canvas lakukan
mulai
moveTo(foldx,0); //Hapus tanda silang lama
LineTo(foldx,layar.tinggi);
pindah ke(0,lipat);
lineto(layar.lebar,lipat);
moveTo(x,0); //Gambarlah tanda silang baru
LineTo(x,layar.tinggi);
pindah ke(0,y);
lineto(layar.lebar,y);
lipatx:=x;
lipat:=y;
akhir;
akhir;
akhir;
13. Oke, kita kembali menulis kode untuk tombol REGION.
prosedur TForm1.RegionClick(Pengirim: TObject);
mulai
form1.Sembunyikan;
form2.sembunyikan;
form2.Timer1.Enabled:=true;
akhir;
Oke, kita akhirnya berhasil menyelesaikannya. Mari kita jalankan lagi dan salin layar yang indah! Lihat
DELPHI bukan hanya alat pengembangan database yang hebat, tetapi juga alat yang hebat untuk menulis WINDOWS
Penolong yang baik untuk program ini. Marilah kita mengagumi: DELPHI yang hebat!
Jia Xuejie, Jalur Youhe, Kota Ningbo