DELPHI von Borland Company (jetzt umbenannt in INPRISE Company) ist derzeit das komfortabelste Windows-Programm.
Eines der Planungstools. Viele Leute denken, dass DELPHI als Datenbankentwicklungstool erscheint. Tatsächlich ist DELPHI
Effiziente Windows-Programme können in rasender Geschwindigkeit entwickelt werden.
Jetzt werden wir DELPHI verwenden, um ein praktisches Bildschirmkopierprogramm zu schreiben. Schauen Sie, das Bild unten
Dies ist ein Beispiel für das Kopieren des regionalen Bildschirms nach der Ausführung des programmierten Programms. Nicht schlecht!
Die talentierten Designer der Borland Company verwenden das Canvas-Objekt (Tcanvas), um die meisten Grafiken in Windows zu kapseln.
Ausgabefunktion, die uns einen intuitiveren Umgang mit dem Windows-Bildschirm ermöglicht,
Und Sie müssen sich keine Sorgen über die Kopfschmerzen der Windows-API-Funktionen machen. Das folgende kurze Programm kann das Ganze realisieren
Das Bildschirmbild wird kopiert.
var //Variablendeklaration
Vollbild:Tbitmap;
VollbildCanvas:TCanvas;
dc:HDC;
//------------------------------------------------ ----------
DC := GetDC (0); //Den DC des Bildschirms abrufen, Parameter 0 bezieht sich auf den Bildschirm
FullscreenCanvas := TCanvas.Create; //Erstelle ein CANVAS-Objekt
FullscreenCanvas.Handle := DC; //Weisen Sie den DC des Bildschirms HANDLE zu
Fullscreen.Canvas.CopyRect
(Rect (0, 0, screen.Width,screen.Height),
VollbildLeinwand,
Rect (0, 0, Screen.Width, Screen.Height));
//Kopiere den gesamten Bildschirm nach BITMAP
FullscreenCanvas.Free; // CANVAS-Objekt freigeben
ReleaseDC (0, DC); //Release DC
//SCREEN-Objekt ist ein von DELPHI vordefiniertes Bildschirmobjekt, verwenden Sie es einfach direkt.
Nachdem Sie den obigen Code gelesen haben, werden Sie feststellen, dass es tatsächlich sehr einfach ist, mit DELPHI ein Bildschirmkopierprogramm zu schreiben.
Natürlich müssen Sie ein praktisches Bildschirmkopierprogramm schreiben. Der obige Code allein reicht nicht aus.
Im Folgenden sind die wichtigsten Programmierideen aufgeführt:
1. Implementierung einer Vollbildkopie
Blenden Sie zunächst das Programm zum Kopieren des Bildschirms aus und verwenden Sie nach einer bestimmten Zeit das obige Programm, um das Kopieren des Bildschirms zu erreichen.
Kopie.
2. Implementierung einer regionalen Kopie
Um eine Bereichskopie zu erreichen, müssen Sie einen kleinen Trick anwenden. Rufen Sie zunächst das Vollbildkopierprogramm auf, um den gesamten Bildschirm zu kopieren.
Laden Sie das kopierte Bild herunter, zeigen Sie es dann auf dem Bildschirm an und lassen Sie es dann dem Benutzer zu
Wählen Sie den gewünschten Bereich aus und kopieren Sie schließlich den vom Benutzer ausgewählten Bereich.
Programmierimplementierung:
1. Öffnen Sie zunächst ein Projekt mit DELPHI3.
2. Platzieren Sie eine TPANEL-Komponente auf dem FORM, stellen Sie ALIGN=ALTOP ein und wählen Sie dann die Komponentenleiste ADDITIONAL aus
TSCROLLBOX, platzieren Sie es auf dem FORM, legen Sie ALIGN=ALCLIENT fest und platzieren Sie dann a
TIME-Objekt.
3. Platzieren Sie 4 Schaltflächen auf dem PANEL, nämlich FULL SCREEN, REGIN, SAVE und EXIT.
4. Machen Sie zuerst das, was einfach zu tun ist, und schreiben Sie den Code in das CLICK-Ereignis der EXIT-Schaltfläche
procedure TForm1.ExitClick(Sender: TObject);
beginnen
schließen;
Ende;
5. Als nächstes müssen Sie einen Timer TTIMER auf FROM setzen und ENABLED auf stellen
FALSE, INTERVAL ist auf 500 eingestellt, was bedeutet, dass es alle halbe Sekunde aktiviert wird. Doppelklicken Sie auf die TIMER-Komponente und schreiben Sie Folgendes
Code.
procedure TForm1.Timer1Timer(Sender: TObject);
var
Vollbild:Tbitmap;
VollbildCanvas:TCanvas;
dc:HDC;
beginnen
timer1.Enabled:=false; //Uhr abbrechen
Fullscreen := TBitmap.Create; //Erstelle eine BITMAP zum Speichern von Bildern
Fullscreen.Width := screen.width;
Fullscreen.Height := screen.Height;
DC := GetDC (0); //Den DC des Bildschirms abrufen, Parameter 0 bezieht sich auf den Bildschirm
FullscreenCanvas := TCanvas.Create; //Erstelle ein CANVAS-Objekt
FullscreenCanvas.Handle := DC;
Fullscreen.Canvas.CopyRect
(Rect (0, 0, screen.Width, screen.Height), fullscreenCanvas,
Rect (0, 0, Screen.Width, Screen.Height));
//Kopiere den gesamten Bildschirm nach BITMAP
FullscreenCanvas.Free; // CANVAS-Objekt freigeben
ReleaseDC (0, DC); //Release DC
//******************************
image1.picture.Bitmap:=fullscreen;//Weisen Sie das kopierte Bild dem IMAGE-Objekt zu
image1.Width:=fullscreen.Width;
image1.Height:=fullscreen.Height;
fullscreen.free; //Bitmap freigeben
form1.WindowState:=wsNormal; //Fensterstatus wiederherstellen
form1.show; //Anzeigefenster
messagebeep(1); //BEEP piept einmal, um zu melden, dass das Bild aufgenommen wurde.
Ende;
6. Der nächste Code auf der Schaltfläche FULLSCREEN ist sehr einfach.
procedure TForm1.FullscreenClick(Sender: TObject);
beginnen
form1.WindowState:=wsMinimized; //Minimiere das Programmfenster
form1.hide; //Programm ausblenden
timer1.enabled:=true; //Öffne den Timer
Ende;
7. Nach dem Kopieren des Bildes muss es natürlich gespeichert werden. Der SPEICHERN-Button kommt ins Spiel.
Laden Sie den Code herunter.
procedure TForm1.Save1Click(Sender: TObject);
beginnen
Wenn gespeichertdialog1.Execute dann
beginnen
form1.Image1.Picture.SaveToFile(savedialog1.filename)
Ende;
Ende;
8. Das Folgende ist die Implementierung der Zonenkopie. Dann erstellen Sie ein neues Formular und setzen Sie BorderStype auf bsNone, damit es angezeigt werden kann
Platzieren Sie für den Vollbildmodus eine TIMAGE-Komponente darauf, setzen Sie ALIGN auf ALCLIENT und platzieren Sie einen TTIMER
Widget, das Programm des TIMER-Widgets ist dem oben genannten sehr ähnlich, da das erste, was es erreichen muss, das Kopieren im Vollbildmodus ist.
kauri.
procedure TForm2.Timer1Timer(Sender: TObject);
var
Vollbild:Tbitmap;
VollbildCanvas:TCanvas;
dc:HDC;
beginnen
timer1.Enabled:=false;
Vollbild := TBitmap.Create;
Fullscreen.Width := screen.width;
Fullscreen.Height := screen.Height;
DC := GetDC (0);
FullscreenCanvas := TCanvas.Create;
FullscreenCanvas.Handle := DC;
Fullscreen.Canvas.CopyRect (Rect
(0, 0, screen.Width, screen.Height), fullscreenCanvas,
Rect (0, 0, Screen.Width, Screen.Height));
FullscreenCanvas.Free;
ReleaseDC (0, DC);
image1.picture.Bitmap:=fullscreen;
image1.Width:=fullscreen.Width;
image1.Height:=fullscreen.Height;
Vollbild.frei;
form2.WindowState:=wsMaximized;
form2.show;
messagebeep(1);
faltenx:=-1;
faltig:=-1;
image1.Canvas.Pen.mode:=pmnot; //Der Stiftmodus ist invertiert
image1.canvas.pen.color:=clblack; //Der Stift ist schwarz
image1.canvas.brush.Style:=bsclear; //Leerer Pinsel
flag:=true;
Ende;
9. In der TIMAGE-Komponente müssen zwei Ereignisprogramme geschrieben werden, eines ist ONMOUSEDOWN und das andere
Es ist ONMOUSEMOVE.
10. Sie können auf die Idee des Regionskopierens zurückblicken. Zu diesem Zeitpunkt haben wir es bereits getan
wird erhalten und auch auf dem Bildschirm angezeigt. Drücken Sie die linke Maustaste, um den Ursprung des Bereichs festzulegen
Zwischen dem Ursprung und der Maus befindet sich ein Rechteck. Es ändert sich, wenn die Maus erneut gedrückt wird.
Klicken Sie auf die linke Schaltfläche des Ziels. Zu diesem Zeitpunkt ist der im Rechteck enthaltene Bereich das Bild, das wir erhalten möchten.
11. MOUSEDOWN hat also zwei Antwortverarbeitungen, siehe das folgende Verfahren.
Prozedur TForm2.Image1MouseDown
(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Breite, Höhe: Ganzzahl;
newbitmap:Tbitmap;
beginnen
if (trace=false) then // TRACE gibt an, ob die Maus verfolgt wird
begin //Klicken Sie zum ersten Mal mit der linken Maustaste, um mit der Verfolgung der Maus zu beginnen.
flag:=false;
mit image1.canvas tun
beginnen
moveTo(foldx,0);
LineTo(foldx,screen.height);
moveto(0,foldy);
lineto(screen.width,foldy);
Ende;
x1:=x;
y1:=y;
oldx:=x;
oldy:=y;
Trace:=true;
image1.Canvas.Pen.mode:=pmnot; //Der Stiftmodus ist invertiert
//Zeichne das Rechteck erneut an der ursprünglichen Stelle, was dem Löschen des Rechteckes entspricht.
image1.canvas.pen.color:=clblack; //Der Stift ist schwarz
image1.canvas.brush.Style:=bsclear;//Leerer Pinsel
Ende
anders
begin // Der zweite Klick zeigt an, dass das Rechteck erhalten wurde.
//Kopiere es in die IMAGE-Komponente in FORM1.
x2:=x;
y2:=y;
Trace:=false;
image1.canvas.rectangle(x1,y1,oldx,oldy);
Breite:=abs(x2-x1);
Höhe:=abs(y2-y1);
form1.image1.Width:=Breite;
form1.image1.Height:=Höhe;
newbitmap:=Tbitmap.create;
newbitmap.width:=width;
newbitmap.height:=height;
newbitmap.Canvas.CopyRect
(Rect (0, 0, width, Height),form2.image1.canvas,
Rect (x1, y1,x2,y2)); //Kopieren
form1.image1.picture.bitmap:=newbitmap; //Legen Sie es auf das BILD des FORMULARS
newbitmap.free;
form2.hide;
form1.show;
Ende;
Ende;
12. Die Verarbeitung von MOUSEMOVE besteht darin, kontinuierlich Rechtecke zwischen dem Ursprung und der aktuellen Position der Maus zu zeichnen und zu löschen.
Außer Rechteck.
Prozedur TForm2.Image1MouseMove
(Sender: TObject; Shift: TShiftState; X,
Y: Ganzzahl);
beginnen
Wenn Trace=True, dann //Verfolgen Sie die Maus?
begin //Ja, lösche das alte Rechteck und zeichne ein neues
mit image1.canvas tun
beginnen
Rechteck(x1,y1,oldx,oldy);
Rechteck(x1,y1,x,y);
oldx:=x;
oldy:=y;
Ende;
Ende
else if flag=true then //Zeichne ein Kreuz an der Stelle, an der sich die Maus befindet
beginnen
mit image1.canvas tun
beginnen
moveTo(foldx,0); //Das alte Kreuz löschen
LineTo(foldx,screen.height);
moveto(0,foldy);
lineto(screen.width,foldy);
moveTo(x,0); //Zeichne ein neues Kreuz
LineTo(x,screen.height);
moveto(0,y);
lineto(screen.width,y);
faltenx:=x;
faltig:=y;
Ende;
Ende;
Ende;
13. Okay, lass uns zurück zum Schreiben des Codes für die REGION-Schaltfläche gehen.
procedure TForm1.RegionClick(Sender: TObject);
beginnen
form1.Hide;
form2.hide;
form2.Timer1.Enabled:=true;
Ende;
Okay, wir haben es endlich erfolgreich abgeschlossen. Lassen Sie es uns noch einmal ausführen und den schönen Bildschirm kopieren! Suchen
DELPHI ist nicht nur ein hervorragendes Datenbankentwicklungstool, sondern auch ein hervorragendes Tool zum Schreiben von WINDOWS
Ein guter Helfer für das Programm. Lasst uns nicht umhin, zu bewundern: Tolle DELPHI!
Jia Xuejie, Youhe Lane, Stadt Ningbo