[DELPHI]Kontrollscanner in Delphi
---- Bei der Entwicklung von Informationsmanagementsystemen mit Delphi werden häufig Bilder verarbeitet, was auch ein unvermeidlicher Trend bei der Entwicklung von Informationsmanagementsystemen ist. Wie erhält man die erforderlichen Bildinformationen über einen Scanner in Delphi? Es gibt nicht mehr als drei grundlegende Methoden:
Durch Bildverarbeitungssoftware wie Photoshop usw. können Bilder mithilfe ihrer Funktion zum Scannen in Bilder in einem bestimmten Format verarbeitet und dann in Ihrem eigenen System verwendet werden.
Über die Scannerschnittstelle Twain.DLL. Diese Schnittstelle wird bei der Installation des Scanners bereitgestellt. Es handelt sich tatsächlich um ein Plugin, das den Scanner über eine Reihe von Funktionen steuert.
Steuern Sie den Scanner durch Komponententechnologie.
---- Die Verwendung der ersten Methode kann die Komplexität der Programmierung verringern, die Systemintegration ist jedoch nicht hoch und die Verwendung der zweiten Methode kann den Scanner direkt auf Treiberebene steuern
Bietet maximale Flexibilität und Steuerbarkeit bei der Programmierung; die dritte Methode kann die visuelle Komponententechnologie von Delphi vollständig nutzen, um den Scanner sicher, flexibel und frei zu verwenden. Tatsächlich ist es auch die dritte Methode
Es basiert auf der Scannerschnittstelle Twain.DLL. Die in diesem Artikel beschriebene Methode übernimmt die dritte Methode.
---- Windows9X bietet in seinem Anhang eine „Bild“-Option, die OCX-Komponenten zur Steuerung des Scanners verwendet. Es gibt vier imgEdit, imgAnntool, imgScan und imgAdmin. Mit diesen vier Komponenten haben Sie grundsätzlich die volle Kontrolle über den Scanner. Die Verwendung in Delphi ist wie folgt: Wählen Sie das Installations-„Image“ in Windows9x aus. (Wählen Sie in der Systemsteuerung „Programme hinzufügen/entfernen“, wählen Sie dann „Windows installieren“, klicken Sie auf das Kontrollkästchen „Zubehör“ und suchen Sie dann über die Schaltfläche „Details“ nach „Bild“.)
Starten Sie Delphi und wählen Sie unter dem Menüpunkt „Komponente“ „Import ActiveX Control“.
Zu diesem Zeitpunkt können Sie sehen, dass es „Wang Image Editing Control, Wang Image Scanning Control, Wang“ gibt
Image Management Control, Wang Image Thumbnail Control“, wählen Sie diese vier Elemente aus und klicken Sie dann auf „Installieren“.
Klicken Sie auf die Schaltfläche, dann können Sie die Symbole dieser vier Komponenten unter der ActiveX-Beschriftung im Komponentenfenster sehen.
---- Die Hauptattribute von ImgScan: FileType: der Dateityp des Bildes (diese Komponente unterstützt drei).
Spezies: TIFF, BMP, AWD);
ScanTo: Den Zweck des gescannten Bildes zurückgeben oder festlegen;
Mögliche Wertbedeutung
0 (Standard) Zeigt das gescannte Bild an.
1 Zeigen Sie das gescannte Bild an und schreiben Sie es in eine Datei.
2 Schreiben Sie das Bild in eine Datei
3 Schreiben Sie das Bild im Vorlagenmodus in die Datei und zeigen Sie es an.
4. Schreiben Sie das Bild als Vorlage in die Datei
5 Gescanntes Bild faxen
Hinweis: Wenn Sie den Standardwert 0 verwenden,
Muss in Verbindung mit der Wang ImgEdit-Komponente verwendet werden.
DestImageControl: Wang ImgEdit Komponentenname;
Zoom: Das Zoomverhältnis des Bildes
Die Hauptmethoden von ImgScan: OpenScanner: Öffnen Sie den Scanner;
CloseScanner: Schließen Sie den Scanner;
StartScan: Scannen starten;
StopScan: Scannen stoppen
----Die Eigenschaften von ImgEdit steuern hauptsächlich die Auflösung des gescannten Bildes, die Breite und Höhe des Bildes und ob
Ermöglicht die teilweise Auswahl von Bildern usw.; die Hauptmethoden umfassen das Kopieren und Ausschneiden von Bildern auf die Zwischenablage,
Bilder aus der Zwischenablage kopieren, Bilder drehen, skalieren, spiegeln; Bilder drucken, speichern, aktualisieren usw.
---- Detaillierte Anweisungen für die oben genannten vier OCX-Komponenten können in Delphi eingesehen werden.
Hilfesystem.
---- Hier sind einige Beispiele für die Verwendung dieser beiden Komponenten:
PROcedure Tscanf.N1Click(Sender: TObject);
beginnen
ImgScan1.ShowSelectScanner;
file://Wählen Sie den auf dem System installierten Scanner aus
Ende;
procedure Tscanf.N2Click(Sender: TObject);
beginnen
imgedit1.zoom:=100; file://Legen Sie den Zoomfaktor des Bildes fest
Wenn nicht, dann imgscan1.ScannerAvailable
file://wenn der ausgewählte Scanner nicht verfügbar ist
imgscan1.OpenScanner;//Öffnen Sie den Scanner
imgscan1.StartScan; file://Scannen von Bildern starten
imgscan1.CloseScanner; file://Scanner schließen
Ende;
procedure Tscanf.N8Click(Sender: TObject);
beginnen
if (imgedit1.IsClipboardDataAvailable
und imgedit1.ImageDisplayed ) dann
imgedit1.ClipboardPaste(selleft,seltop);
file://Fügen Sie das Bild aus der Zwischenablage ein. Sein Parameter ist die Startkoordinate des Anzeigebereichs von Imgedit
Ende;
procedure Tscanf.N1801Click(Sender: TObject);
beginnen
wenn imgedit1.ImageDisplayed dann
imgedit1.Flip; file://Spiegelbild
Ende;
procedure Tscanf.N901Click(Sender: TObject);
beginnen
wenn imgedit1.ImageDisplayed dann
imgedit1.RotateRight file://Bild nach rechts drehen
Ende;
procedure Tscanf.N6Click(Sender: TObject);
beginnen
imgedit1.DrawSelectionRect(selleft,
seltop, selwidth, selheight); // Teilauswahl des Bildes durchführen
imgedit1.ClipboardCut(selleft,seltop,
selwidth,selheight);//Den ausgewählten Bereich ausschneiden
Ende;
---- Hinweis: Bei Verwendung der Kopier- und Ausschneidefunktionen der Imgedit-Komponente in DELPHI wird dies der Fall sein
Folgende Fragen:
---- 1. Wenn Sie das gesamte Bild auswählen, gibt es kein Problem;
---- 2. Wenn ein lokaler Bereich ausgewählt wird, verschieben sich die kopierten und ausgeschnittenen Bereiche.
---- 3. Wenn DELPHI die Client-Schnittstelle der MS SQL-Back-End-Datenbank erstellt, dann
Wenn der Bildinhalt in das Bildfeld der Datenbank geschrieben wird, meldet die BDE (Datenbank-Engine) einen Fehler. Das ist
DELPHI3.0 und 4.0 BUG, 4.0 Upgrade-Pakete können dieses Problem lösen.
---- Das zweite Problem kann wie folgt gelöst werden: onSelectionRectDrawn in Imgedit
Schreiben Sie einen Code, um den Grenzwert des ausgewählten Bereichs nach dem Kopieren in vier globalen Variablen zu speichern
Verwenden Sie einfach die zuvor gespeicherten Variablen, um vor dem Schneiden eine weitere Auswahl zu treffen (das alles geschieht natürlich später).
(siehe vorheriges Beispiel).
---- Entwicklungsumgebung: DELPHI4.0, HP ScanJet 4P-Scanner;
---- Quellcode beigefügt.
Einheit scanu;
Schnittstelle
verwendet
Windows, Nachrichten, SysUtils, Klassen, Grafiken, Steuerelemente,
Formulare, Dialoge, Menüs, ScanLib_TLB, ExtCtrls, AxCtrls,
OleCtrls, ImgeditLib_TLB;
Typ
Tscanf = Klasse(TForm)
MainMenu1: TMainMenu;
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;
Abschrägung1: TBevel;
ImgScan1: TImgScan;
Abschrägung2: TBevel;
Prozedur N4Click(Sender: TObject);
procedure N1Click(Sender: TObject);
Prozedur N2Click(Sender: TObject);
procedure C1Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N1801Click(Sender: TObject);
procedure N901Click(Sender: TObject);
procedure N902Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure ImgEdit1SelectionRectDrawn(Sender: TObject; Left,Top,
Breite, Höhe: Ganzzahl);
procedure N11Click(Sender: TObject);
Privat
{Private Erklärungen}
öffentlich
seleft,seltop,selwidth,selheight:integer;
{Öffentliche Erklärungen}
Ende;
var
scanf: Tscanf;
Durchführung
{$R *.DFM}
procedure Tscanf.N4Click(Sender: TObject);
beginnen
imgedit1.ClearDisplay;
schließen;
Ende;
procedure Tscanf.N1Click(Sender: TObject);
beginnen
ImgScan1.ShowSelectScanner;
Ende;
procedure Tscanf.N2Click(Sender: TObject);
beginnen
imgedit1.zoom:=100;
Wenn nicht, dann imgscan1.ScannerAvailable
imgscan1.OpenScanner;
imgscan1.StartScan;
imgscan1.CloseScanner;
Ende;
procedure Tscanf.C1Click(Sender: TObject);
beginnen
wenn imgedit1.ImageDisplayed dann
beginnen
imgedit1.ClearDisplay;
imgedit1.zoom:=100;
Ende;
Ende;
procedure Tscanf.N8Click(Sender: TObject);
beginnen
if (imgedit1.IsClipboardDataAvailable und imgedit1.ImageDisplayed )
Dann
imgedit1.ClipboardPaste(selleft,seltop);
Ende;
procedure Tscanf.N1801Click(Sender: TObject);
beginnen
wenn imgedit1.ImageDisplayed dann
imgedit1.Flip;
Ende;
procedure Tscanf.N901Click(Sender: TObject);
beginnen
wenn imgedit1.ImageDisplayed dann
imgedit1.RotateRight
Ende;
procedure Tscanf.N902Click(Sender: TObject);
beginnen
wenn imgedit1.ImageDisplayed dann
imgedit1.RotateLeft;
Ende;
procedure Tscanf.N6Click(Sender: TObject);
beginnen
imgedit1.DrawSelectionRect(selleft,seltop,selwidth,selheight);
imgedit1.ClipboardCut(selleft,seltop,selwidth,selheight);
Ende;
procedure Tscanf.N7Click(Sender: TObject);
beginnen
imgedit1.DrawSelectionRect(selleft,seltop,selwidth,selheight);
imgedit1.ClipboardCopy(selleft,seltop,selwidth,selheight);
Ende;
procedure Tscanf.ImgEdit1SelectionRectDrawn(Sender: TObject; Left,
Oben, Breite, Höhe: Ganzzahl);
beginnen
if ((width=0) and (height=0))then
beginnen
n3.Enabled:=false;
n6.Enabled:=false;
n7.Enabled:=false;
saleleft:=left;
seltop:=top;
Selwidth:=Breite;
selheight:=height;
Ende
sonst beginnen
n6.Enabled:=true;
n7.Enabled:=true;
saleleft:=left;
seltop:=top;
Selwidth:=Breite;
selheight:=height;
Ende;
Ende;
procedure Tscanf.N11Click(Sender: TObject);
beginnen
Wenn nicht, dann imgedit1.IsClipboardDataAvailable
wenn imgedit1.imagedisplayed dann
imgedit1.ClipboardCopy(0,0,imgedit1.Width,imgedit1.Height);
Ende;
Ende