Entwickeln Sie ein Bildschirmschoner-Vorschauprogramm mit Delphi
Organisation und Redaktion: China asp
---- Jeder kennt die Rolle des Windows-Bildschirmschoners und der neue Bildschirmschoner wird immer schöner. Wenn Sie im Desktop-Rechtsklickmenü von Win95 Eigenschaften auswählen, wird die Benutzeroberfläche für die Anzeigeeinstellungen angezeigt ist eine Registerkarte zum Einstellen des Bildschirmschoners.
---- Auf dem Bildschirm dieser Seite gibt es ein Monitormuster. Wenn Sie den mit Win95 gelieferten Bildschirmschoner auswählen, wird der Bildschirmschoner automatisch auf diesem kleinen „Monitor“ ausgeführt und Sie können den laufenden Effekt direkt sehen. . Diese Funktion erleichtert die Auswahl des Bildschirmschoners erheblich. Dies ist die neue Benutzeroberfläche für Bildschirmschoner: Vorschaufunktion.
---- Die meisten neu eingeführten Bildschirmschoner unterstützen derzeit diese Schnittstelle.
---- Seit seiner Einführung kann nur ein Bildschirmschoner gleichzeitig ausgeführt werden, und mehrere Bildschirme können nicht gleichzeitig ausgeführt werden. Die Einführung der Vorschauschnittstelle ermöglicht jedoch die gleichzeitige Vorschau mehrerer Bildschirmschoner In diesem Artikel erfahren Sie, wie Sie ein solches Programm mit Delphi entwickeln.
---- 1. Bildschirmschoner-Vorschauoberfläche
---- Die Bildschirmschoner-Vorschauschnittstelle ist sehr einfach zu verwenden. Dies wird durch die Übergabe der Befehlszeilenparameter an den Bildschirmschoner erreicht. Das Format der Befehlszeilenparameter ist:
---- screensaver.exe /p #####
---- Wobei ##### die Dezimaldarstellung eines gültigen Fensterhandles ist.
---- Wir können dieses Fenster als Vorschaufenster bezeichnen.
----Tatsächlich erstellen Bildschirmschoner, die die Vorschauschnittstelle unterstützen, ihre eigenen Fenster als Unterfenster des Vorschaufensters, um die Vorschaufunktion zu implementieren.
---- 2. Bildschirmlayout
---- Das Fenster unseres Programms ist in drei Teile unterteilt, die die Form einer umgekehrten „Stecknadel“ haben. Der obere linke Teil listet alle verfügbaren Bildschirmschoner auf, der obere rechte Teil listet alle in der Vorschau angezeigten Bildschirmschoner auf und der untere Teil ist Natürlich schon das Vorschaufenster.
---- Bei der Implementierung mit Delphi fügen Sie zuerst zwei TPanel-Komponenten in das Formular ein, Panel1 wird nach oben ausgerichtet, Panel2 soll den Benutzerbereich ausfüllen, dann fügen Sie eine TFileListBox-Komponente und eine TListBox-Komponente in Panel1 ein, FileListBox1 wird linksbündig ausgerichtet. ListBox1 füllt den Benutzerbereich.
---- Auf diese Weise ist FileListBox1 die Bildschirmschonerliste, ListBox1 die Vorschauliste und Panel2 das Vorschaufenster.
---- 3. Bildschirmschoner auflisten.
----Setzen Sie die Mask-Eigenschaft von FileListBox1 auf „*.scr“, was die Erweiterung des Bildschirmschoners ist.
---- Legen Sie FileListBox1.directory in der FormCreate-Methode auf das Windows-Systemverzeichnis GetSystemDirectory fest.
---- 4. Vorschau des Bildschirmschoners.
----Führen Sie den Bildschirmschoner in der FileListBox1DblClick-Methode aus und übergeben Sie das Fensterhandle von Panel2 daran.
---- WinExec(pchar(FileListBox1.FileName + ' /p ' + inttostr(Panel2.handle)), SW_Show);
---- Wie wäre es mit dem Ausführen des Programms?
---- 5. Fügen Sie einige neue Funktionen hinzu: Ausblenden/Anzeigen/Schließen.
----2 Funktionen hinzugefügt: Wird zum Aktualisieren von ListBox1 verwendet.
Funktion EnumPRoc(
h: HWND;//Handle des untergeordneten Fensters
l: Ganzzahl // anwendungsdefinierter Wert
): boolean;stdcall;
var
buf: array[0..255] of char;
beginnen
GetWindowText(h, buf, sizeof(buf)- 1);
wenn iswindowvisible(h) dann
Form1.ListBox1.items.add(' ' +strpas(buf) + ' : ' + inttostr(h))
anders
Form1.ListBox1.items.add('-' +strpas(buf) + ' : ' + inttostr(h));
Ergebnis := wahr;
Ende;
Prozedur TForm1.Fresh1;
beginnen
ListBox1.clear;
enumChildwindows(Panel2.handle,
TFNWndEnumProc(@enumproc), 0);
Ende;
---- Fügen Sie ein Popup-Menü Popupmenu1, 3 Menüelemente, „Anzeigen, Ausblenden, Schließen“, hinzu und zeigen Sie ListBox1.popupmemu auf Popupmenu1.
----Die Verarbeitungsfunktion von Hide ist:
procedure TForm1.Hide1Click(Sender: TObject);
var
h: ganze Zahl;
s: Zeichenfolge;
beginnen
wenn ListBox1.itemindex = -1 dann beenden;
s := Listbox1.items[ListBox1.itemindex];
h := strtoint(copy(s, pos(':', s) + 1, length(s)));
ShowWindow(h, SW_HIDE);
Frisch1;
Ende;
Die Handlerfunktion für Show ist:
procedure TForm1.Show1Click(Sender: TObject);
var
h: ganze Zahl;
s: Zeichenfolge;
beginnen
wenn ListBox1.itemindex = -1 dann beenden;
s := Listbox1.items[ListBox1.itemindex];
h := strtoint(copy(s, pos(':', s) + 1, length(s)));
ShowWindow(h, SW_SHOW);
Frisch1;
Ende;
Die Handlerfunktion für Close ist:
procedure TForm1.Close1Click(Sender: TObject);
var
h: ganze Zahl;
s: Zeichenfolge;
beginnen
wenn ListBox1.itemindex = -1 dann beenden;
s := Listbox1.items[ListBox1.itemindex];
h := strtoint(copy(s, pos(':', s) + 1, length(s)));
PostMessage(h, WM_QUIT, 0, 0);
Frisch1;
Ende;
---- Dieses Programm wurde unter Delphi 3.0 debuggt und sollte mit Delphi 1.0 / 2.0 kompiliert werden können.
----Der vollständige Ablauf ist wie folgt:
Einheit Einheit1;
Schnittstelle
verwendet
Windows, Nachrichten, SysUtils, Klassen, Grafiken, Steuerelemente, Formulare, Dialoge, StdCtrls, FileCtrl, ExtCtrls, Menüs;
Typ
TForm1 = Klasse(TForm)
Panel1: TPanel;
Panel2: TPanel;
FileListBox1: TFileListBox;
ListBox1: TListBox;
PopupMenu1: TPopupMenu;
Hide1: TMenuItem;
Show1: TMenuItem;
Close1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FileListBox1DblClick(Sender: TObject);
procedure Hide1Click(Sender: TObject);
procedure Show1Click(Sender: TObject);
procedure Close1Click(Sender: TObject);
Privat
{Private Erklärungen}
öffentlich
{Öffentliche Erklärungen}
Prozedur Fresh1;
Ende;
var
Form1: TForm1;
Durchführung
{$R *.DFM}
Funktion EnumProc(
h: HWND;//Handle des untergeordneten Fensters
l: Ganzzahl // anwendungsdefinierter Wert
): boolean;stdcall;
var buf: array[0..255] of char;
beginnen
GetWindowText(h, buf, sizeof(buf)- 1);
wenn iswindowvisible(h) dann
Form1.ListBox1.items.add(' ' +strpas(buf) + ' : ' + inttostr(h))
anders
Form1.ListBox1.items.add('-' +strpas(buf) + ' : ' + inttostr(h));
Ergebnis := wahr;
Ende;
Prozedur TForm1.Fresh1;
beginnen
ListBox1.clear;
enumChildwindows(Panel2.handle, TFNWndEnumProc(@enumproc), 0);
Ende;
procedure TForm1.FormCreate(Sender: TObject);
var buf: array[0..256] of char;
beginnen
GetSystemDirectory(buf, sizeof(buf) - 1);
FileListBox1.directory := strpas(buf);
ListBox1.popupmenu := Popupmenu1;
Ende;
procedure TForm1.FileListBox1DblClick(Sender: TObject);
beginnen
WinExec(pchar(FileListBox1.FileName + ' /p ' + inttostr(Panel2.handle)), SW_Show);
Frisch1;
Ende;
procedure TForm1.Hide1Click(Sender: TObject);
var
h: ganze Zahl;
s: Zeichenfolge;
beginnen
wenn ListBox1.itemindex = -1 dann beenden;
s := Listbox1.items[ListBox1.itemindex];
h := strtoint(copy(s, pos(':', s) + 1, length(s)));
ShowWindow(h, SW_HIDE);
Frisch1;
Ende;
procedure TForm1.Show1Click(Sender: TObject);
var
h: ganze Zahl;
s: Zeichenfolge;
beginnen
wenn ListBox1.itemindex = -1 dann beenden;
s := Listbox1.items[ListBox1.itemindex];
h := strtoint(copy(s, pos(':', s) + 1, length(s)));
ShowWindow(h, SW_SHOW);
Frisch1;
Ende;
procedure TForm1.Close1Click(Sender: TObject);
var
h: ganze Zahl;
s: Zeichenfolge;
beginnen
wenn ListBox1.itemindex = -1 dann beenden;
s := Listbox1.items[ListBox1.itemindex];
h := strtoint(copy(s, pos(':', s) + 1, length(s)));
PostMessage(h, WM_QUIT, 0, 0);
Frisch1;
Ende;
Ende.
Copyright © Shanghai Jusheng Computer System Engineering Co., Ltd. 1999-2000, Alle Rechte vorbehalten