[DELPHI]Kontrol pemindai di Delphi
---- Saat menggunakan Delphi untuk mengembangkan sistem manajemen informasi, gambar sering kali diproses, yang juga merupakan tren yang tidak dapat dihindari dalam pengembangan sistem manajemen informasi. Bagaimana cara mendapatkan informasi gambar yang diperlukan melalui pemindai di Delphi? Tidak ada lebih dari tiga metode dasar:
Melalui perangkat lunak pengolah gambar, seperti photoshop, dll., melalui fungsinya memindai gambar, gambar tersebut dapat diolah menjadi gambar dalam format tertentu dan kemudian digunakan di sistem Anda sendiri;
Melalui antarmuka pemindai Twain.DLL. Antarmuka ini disediakan saat memasang pemindai. Ini sebenarnya adalah Plugin yang mengontrol pemindai melalui serangkaian fungsi;
Kontrol pemindai melalui teknologi komponen.
---- Menggunakan metode pertama dapat mengurangi kerumitan pemrograman, tetapi integrasi sistemnya tidak tinggi dan tidak nyaman bagi pengguna untuk menggunakannya; metode kedua dapat langsung mengontrol pemindai di tingkat driver, yang bisa
Memberikan fleksibilitas dan pengendalian maksimum dalam pemrograman; metode ketiga dapat memanfaatkan sepenuhnya teknologi komponen visual Delphi untuk menggunakan pemindai dengan aman, fleksibel dan bebas. Sebenarnya cara ketiga juga demikian
Itu dibangun di atas antarmuka pemindai Twain.DLL. Cara yang dibahas pada artikel ini mengadopsi cara ketiga.
---- Windows9X menyediakan opsi "gambar" dalam lampirannya, yang menggunakan komponen OCX untuk mengontrol pemindai. Ada empat imgEdit, imgAnntool, imgScan, dan imgAdmin. Dengan keempat komponen ini, pada dasarnya Memiliki kendali penuh atas pemindai. Penggunaannya di Delphi adalah sebagai berikut: Pilih "image" instalasi di Windows9x. (Pilih "Tambah/Hapus Program" di Panel Kontrol, lalu pilih "Instal Windows", klik kotak centang "Aksesori", lalu cari "Gambar" dari tombol "Detail")
Mulai Delphi dan pilih "Impor Kontrol ActiveX" di bawah item menu "Komponen".
Saat ini, Anda dapat melihat bahwa ada "Kontrol Pengeditan Gambar Wang, Kontrol Pemindaian Gambar Wang, Wang
Kontrol Manajemen Gambar, Kontrol Gambar Kecil Gambar Wang", pilih empat item ini, lalu klik "Instal"
tombol, lalu Anda dapat melihat ikon keempat komponen ini di bawah label ActiveX pada panel komponen.
---- Atribut utama ImgScan: FileType: jenis file gambar (komponen ini mendukung tiga
Spesies: TIFF, BMP, AWD);
ScanTo: Mengembalikan atau mengatur tujuan gambar yang dipindai;
Arti nilai yang mungkin
0 (default) Menampilkan gambar yang dipindai.
1 Tampilkan gambar yang dipindai dan tulis ke file.
2 Tulis gambar ke file
3 Tulis gambar ke dalam file dalam mode templat dan tampilkan.
4. Tulis gambar ke dalam file sebagai template
5 Gambar pindaian difaks
Catatan: Jika Anda mengambil nilai default 0,
Harus digunakan bersama dengan komponen Wang ImgEdit.
DestImageControl: Nama komponen Wang ImgEdit;
Zoom: rasio zoom gambar
Metode utama ImgScan: OpenScanner: buka pemindai;
CloseScanner: menutup pemindai;
StartScan: Mulai memindai;
StopScan: Hentikan pemindaian
---- Properti ImgEdit terutama mengontrol resolusi gambar yang dipindai, lebar dan tinggi gambar, dan apakah
Memungkinkan pemilihan sebagian gambar, dll.; metode utama termasuk menyalin dan memotong gambar ke karton,
Menyalin gambar dari clipboard, memutar, menskalakan, mencerminkan gambar; mencetak, menyimpan, menyegarkan gambar, dll.
---- Petunjuk detail untuk keempat komponen OCX di atas dapat dilihat di Delphi.
Sistem bantuan.
---- Berikut beberapa contoh penggunaan kedua komponen tersebut:
Prosedur Tscanf.N1Click(Pengirim: TObject);
mulai
ImgScan1.ShowSelectScanner;
file://Pilih pemindai yang diinstal pada sistem
akhir;
prosedur Tscanf.N2Click(Pengirim: TObject);
mulai
imgedit1.zoom:=100; file://Mengatur faktor zoom gambar
jika tidak imgscan1.ScannerAvailable maka
file://jika pemindai yang dipilih tidak tersedia
imgscan1.OpenScanner;//Buka pemindai
imgscan1.StartScan; file://Mulai memindai gambar
imgscan1.CloseScanner; file://Tutup pemindai
akhir;
prosedur Tscanf.N8Click(Pengirim: TObject);
mulai
if (imgedit1.IsClipboardDataAvailable
dan imgedit1.ImageDisplayed ) lalu
imgedit1.ClipboardPaste(selkiri,seltop);
file://paste gambar dari clipboard, parameternya adalah koordinat awal area tampilan Imgedit
akhir;
procedure Tscanf.N1801Click(Pengirim: TObject);
mulai
jika imgedit1.ImageDisplayed maka
imgedit1.Balik; file://gambar cermin
akhir;
prosedur Tscanf.N901Click(Pengirim: TObject);
mulai
jika imgedit1.ImageDisplayed maka
imgedit1.RotateRight file://Putar gambar ke kanan
akhir;
prosedur Tscanf.N6Click(Pengirim: TObject);
mulai
imgedit1.DrawSelectionRect(selkiri,
seltop, selwidth, selheight); // melakukan seleksi sebagian pada gambar
imgedit1.ClipboardCut(selkiri,seltop,
selwidth,selheight);//Potong area yang dipilih
akhir;
---- Catatan: Saat menggunakan fungsi salin dan potong komponen Imgedit di DELPHI, akan ada
Pertanyaan-pertanyaan berikut:
---- 1. Jika Anda memilih seluruh gambar, tidak akan ada masalah;
---- 2. Jika area lokal dipilih, area yang disalin dan dipotong akan melayang;
---- 3. Jika DELPHI membuat antarmuka klien database back-end MS SQL, maka
Ketika konten gambar ditulis ke bidang gambar database, BDE (mesin database) akan melaporkan kesalahan. Ini
DELPHI3.0 dan 4.0 BUG, paket upgrade 4.0 dapat mengatasi masalah ini.
---- Sedangkan untuk masalah kedua bisa diselesaikan seperti ini: onSelectionRectDrawn di Imgedit
Tulis sepotong kode dalam acara tersebut untuk menyimpan nilai batas area yang dipilih ke empat variabel global Setelah disalin
Cukup gunakan variabel yang disimpan sebelumnya untuk membuat pilihan lain sebelum memotong (tentu saja, semua ini akan terjadi nanti)
tahap, lihat contoh sebelumnya).
---- Lingkungan pengembangan: DELPHI4.0, pemindai HP ScanJet 4P;
---- Kode sumber terlampir.
unit pemindaian;
antarmuka
kegunaan
Windows, Pesan, SysUtils, Kelas, Grafik, Kontrol,
Formulir, Dialog, Menu, ScanLib_TLB, ExtCtrls, AxCtrls,
OleCtrls, ImgeditLib_TLB;
jenis
Tscanf = kelas(TForm)
Menu Utama1: Menu Utama;
F1: TMenuItem;
N15: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N16: TMenuItem;
N11: TMenuItem;
N5: TMenuItem;
C1: TMenuItem;
N4: TMenuItem;
E1: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N3: TMenuItem;
N10: TMenuItem;
N9: TMenuItem;
N1801: TMenuItem;
N901: TMenuItem;
N902: TMenuItem;
H1: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
ImgEdit1: TImgEdit;
Bevel1: TBBevel;
ImgScan1: TImgScan;
Bevel2: TBBevel;
prosedur N4Click(Pengirim: TObject);
prosedur N1Klik(Pengirim: TObject);
prosedur N2Klik(Pengirim: TObject);
prosedur C1Klik(Pengirim: TObject);
prosedur N8Click(Pengirim: TObject);
prosedur N1801Klik(Pengirim: TObject);
prosedur N901Klik(Pengirim: TObject);
prosedur N902Klik(Pengirim: TObject);
prosedur N6Klik(Pengirim: TObject);
prosedur N7Klik(Pengirim: TObject);
procedure ImgEdit1SelectionRectDrawn(Pengirim: TObject; Kiri,Atas,
Lebar, Tinggi: Integer);
prosedur N11Klik(Pengirim: TObject);
pribadi
{Deklarasi pribadi}
publik
selleft,seltop,selwidth,selheight:integer;
{Pernyataan publik}
akhir;
var
pemindaian: Tscanf;
pelaksanaan
{$R *.DFM}
prosedur Tscanf.N4Click(Pengirim: TObject);
mulai
imgedit1.ClearDisplay;
menutup;
akhir;
prosedur Tscanf.N1Click(Pengirim: TObject);
mulai
ImgScan1.ShowSelectScanner;
akhir;
prosedur Tscanf.N2Click(Pengirim: TObject);
mulai
imgedit1.zoom:=100;
jika tidak imgscan1.ScannerAvailable maka
imgscan1.OpenScanner;
imgscan1.StartScan;
imgscan1.CloseScanner;
akhir;
prosedur Tscanf.C1Click(Pengirim: TObject);
mulai
jika imgedit1.ImageDisplayed maka
mulai
imgedit1.ClearDisplay;
imgedit1.zoom:=100;
akhir;
akhir;
prosedur Tscanf.N8Click(Pengirim: TObject);
mulai
jika (imgedit1.IsClipboardDataAvailable dan imgedit1.ImageDisplayed )
Kemudian
imgedit1.ClipboardPaste(selkiri,seltop);
akhir;
procedure Tscanf.N1801Click(Pengirim: TObject);
mulai
jika imgedit1.ImageDisplayed maka
imgedit1.Balik;
akhir;
prosedur Tscanf.N901Click(Pengirim: TObject);
mulai
jika imgedit1.ImageDisplayed maka
imgedit1.Putar ke Kanan
akhir;
procedure Tscanf.N902Click(Pengirim: TObject);
mulai
jika imgedit1.ImageDisplayed maka
imgedit1.PutarKiri;
akhir;
prosedur Tscanf.N6Click(Pengirim: TObject);
mulai
imgedit1.DrawSelectionRect(selkiri,seltop,lebar sel,tinggi sel);
imgedit1.ClipboardCut(selkiri,seltop,lebar sel,tinggi sel);
akhir;
prosedur Tscanf.N7Click(Pengirim: TObject);
mulai
imgedit1.DrawSelectionRect(selkiri,seltop,lebar sel,tinggi sel);
imgedit1.ClipboardCopy(selkiri,seltop,lebar sel,tinggi sel);
akhir;
prosedur Tscanf.ImgEdit1SelectionRectDrawn(Pengirim: TObject; Kiri,
Atas, Lebar, Tinggi: Integer);
mulai
jika ((lebar=0) dan (tinggi=0))maka
mulai
n3.Diaktifkan:=salah;
n6.Diaktifkan:=salah;
n7.Diaktifkan:=salah;
jualkiri:=kiri;
seltop:=atas;
selwidth:=lebar;
selheight:=tinggi;
akhir
yang lain dimulai
n6.Diaktifkan:=benar;
n7.Diaktifkan:=benar;
jualkiri:=kiri;
seltop:=atas;
selwidth:=lebar;
selheight:=tinggi;
akhir;
akhir;
prosedur Tscanf.N11Click(Pengirim: TObject);
mulai
jika tidak imgedit1.IsClipboardDataAvailable maka
jika imgedit1.imageditampilkan maka
imgedit1.ClipboardCopy(0,0,imgedit1.Lebar,imgedit1.Tinggi);
akhir;
akhir