พัฒนาโปรแกรมแสดงตัวอย่างภาพพักหน้าจอด้วย Delphi
เรียบเรียงและเรียบเรียง: China asp
---- ทุกคนรู้ถึงบทบาทของโปรแกรมรักษาหน้าจอของ windows และโปรแกรมรักษาหน้าจอใหม่ก็สวยงามมากขึ้นเรื่อยๆ หากคุณเลือกคุณสมบัติจากเมนูคลิกขวาบนเดสก์ท็อปของ win95 อินเทอร์เฟซการตั้งค่าจอภาพจะปรากฏขึ้นมา เป็นแท็บสำหรับตั้งค่าภาพพักหน้าจอ
---- บนหน้าจอของหน้านี้จะมีรูปแบบจอภาพ หากคุณเลือกโปรแกรมรักษาหน้าจอที่มาพร้อมกับ win95 โปรแกรมรักษาหน้าจอจะทำงานบน 'จอภาพ' ขนาดเล็กนี้โดยอัตโนมัติ และคุณสามารถเห็นเอฟเฟกต์การทำงานได้โดยตรง ฟังก์ชั่นนี้อำนวยความสะดวกอย่างมากในการเลือกโปรแกรมรักษาหน้าจอ นี่คืออินเทอร์เฟซใหม่ของ win95 สำหรับโปรแกรมรักษาหน้าจอ: ฟังก์ชั่นแสดงตัวอย่าง
---- โปรแกรมรักษาหน้าจอที่เพิ่งเปิดตัวส่วนใหญ่รองรับอินเทอร์เฟซนี้ในปัจจุบัน
---- นับตั้งแต่กำเนิด สามารถเรียกใช้สกรีนเซฟเวอร์ได้เพียงตัวเดียวในเวลาเดียวกัน และไม่สามารถเรียกใช้หลายหน้าจอพร้อมกันได้ อย่างไรก็ตาม การเปิดตัวอินเทอร์เฟซแสดงตัวอย่างทำให้สามารถดูตัวอย่างสกรีนเซฟเวอร์หลายรายการได้ในคราวเดียว บทความนี้จะแสดงให้ผู้อ่านแนะนำวิธีการพัฒนาโปรแกรมดังกล่าวโดยใช้ Delphi
---- 1. อินเทอร์เฟซแสดงตัวอย่างโปรแกรมรักษาหน้าจอ
---- อินเทอร์เฟซการแสดงตัวอย่างโปรแกรมรักษาหน้าจอนั้นใช้งานง่ายมาก ซึ่งทำได้โดยการส่งพารามิเตอร์บรรทัดคำสั่งไปยังโปรแกรมรักษาหน้าจอ รูปแบบพารามิเตอร์บรรทัดคำสั่งคือ:
---- สกรีนเซฟเวอร์.exe /p #####
---- โดยที่ ##### เป็นตัวแทนทศนิยมของตัวจัดการหน้าต่างที่ถูกต้อง
---- เราสามารถเรียกหน้าต่างนี้ว่าหน้าต่างแสดงตัวอย่าง
----ในความเป็นจริง สกรีนเซฟเวอร์ที่รองรับอินเทอร์เฟซแสดงตัวอย่างจะสร้างหน้าต่างของตนเองเป็นหน้าต่างย่อยของหน้าต่างแสดงตัวอย่างเพื่อใช้ฟังก์ชันแสดงตัวอย่าง
---- 2. เค้าโครงหน้าจอ
---- หน้าต่างของโปรแกรมของเราแบ่งออกเป็น 3 ส่วน ซึ่งอยู่ในรูปของ 'พิน' กลับหัว ส่วนด้านซ้ายบนจะแสดงรายการสกรีนเซฟเวอร์ที่มีอยู่ทั้งหมด ส่วนด้านขวาบนจะแสดงรายการสกรีนเซฟเวอร์ที่แสดงตัวอย่างทั้งหมด และส่วนล่างคือ แน่นอนหน้าต่างแสดงตัวอย่าง
---- เมื่อใช้กับ Delphi ให้ใส่ส่วนประกอบ TPanel สองตัวในแบบฟอร์มก่อน Panel1 จะถูกจัดชิดด้านบน Panel2 คือการเติมพื้นที่ผู้ใช้ จากนั้นใส่ส่วนประกอบ TFileListBox และส่วนประกอบ TListBox ใน Panel1, FileListBox1 จะถูกจัดชิดซ้าย ListBox1 เติมเต็มพื้นที่ผู้ใช้
---- ด้วยวิธีนี้ FileListBox1 คือรายการโปรแกรมรักษาหน้าจอ ListBox1 คือรายการแสดงตัวอย่าง และ Panel2 คือหน้าต่างแสดงตัวอย่าง
---- 3. รายการสกรีนเซฟเวอร์
---- ตั้งค่าคุณสมบัติ Mask ของ FileListBox1 เป็น '*.scr' ซึ่งเป็นส่วนขยายของโปรแกรมรักษาหน้าจอ
---- ตั้งค่า FileListBox1.directory เป็นไดเร็กทอรีระบบ windows GetSystemDirectory ในเมธอด FormCreate
---- 4. ดูตัวอย่างโปรแกรมรักษาหน้าจอ
---- เรียกใช้สกรีนเซฟเวอร์ในเมธอด FileListBox1DblClick และส่งผ่านไปยังตัวจัดการหน้าต่างของ Panel2
---- WinExec(pchar(FileListBox1.FileName + ' /p ' + inttostr(Panel2.handle)), SW_Show);
---- แล้วการรันโปรแกรมล่ะ COOL!
---- 5. เพิ่มคุณสมบัติใหม่: ซ่อน/แสดง/ปิด
----เพิ่ม 2 ฟังก์ชั่น: ใช้ในการอัพเดต ListBox1.
ฟังก์ชัน EnumPRoc(
h : HWND;//ที่จับหน้าต่างลูก
l : จำนวนเต็ม// ค่าที่กำหนดโดยแอปพลิเคชัน
): บูลีน;stdcall;
var
buf : array[0..255] ของถ่าน;
เริ่ม
GetWindowText(h, buf, ขนาดของ (buf)- 1);
ถ้า iswindowvisible(h) แล้ว
Form1.ListBox1.items.add(' ' +strpas(buf) + ' : ' + inttostr(h))
อื่น
Form1.ListBox1.items.add('-' +strpas(buf) + ' : ' + inttostr(h));
ผลลัพธ์ := จริง;
จบ;
ขั้นตอน TForm1.Fresh1;
เริ่ม
รายการBox1.clear;
enumChildwindows (Panel2.handle,
TFNWndEnumProc(@enumproc), 0);
จบ;
---- เพิ่มเมนูป๊อปอัป Popupmenu1 รายการเมนู 3 รายการ 'แสดง ซ่อน ปิด' และชี้ ListBox1.popupmemu ไปที่ Popupmenu1
---- ฟังก์ชั่นการประมวลผลของ Hide คือ:
ขั้นตอน TForm1.Hide1Click (ผู้ส่ง: TObject);
var
h : จำนวนเต็ม;
s : สตริง;
เริ่ม
ถ้า ListBox1.itemindex = -1 ให้ออก;
s := Listbox1.items[ListBox1.itemindex];
h := strtoint(copy(s, pos(':', s) + 1, length(s)));
ShowWindow(h, SW_HIDE);
สด1;
จบ;
ฟังก์ชันตัวจัดการสำหรับการแสดงคือ:
ขั้นตอน TForm1.Show1Click (ผู้ส่ง: TObject);
var
h : จำนวนเต็ม;
s : สตริง;
เริ่ม
ถ้า ListBox1.itemindex = -1 ให้ออก;
s := Listbox1.items[ListBox1.itemindex];
h := strtoint(copy(s, pos(':', s) + 1, length(s)));
ShowWindow(h, SW_SHOW);
สด1;
จบ;
ฟังก์ชันตัวจัดการสำหรับการปิดคือ:
ขั้นตอน TForm1.Close1Click (ผู้ส่ง: TObject);
var
h : จำนวนเต็ม;
s : สตริง;
เริ่ม
ถ้า ListBox1.itemindex = -1 ให้ออก;
s := Listbox1.items[ListBox1.itemindex];
h := strtoint(copy(s, pos(':', s) + 1, length(s)));
โพสต์ข้อความ(h, WM_QUIT, 0, 0);
สด1;
จบ;
---- โปรแกรมนี้ได้รับการดีบั๊กภายใต้ Delphi 3.0 และควรจะสามารถคอมไพล์ด้วย Delphi 1.0 / 2.0 ได้
----ขั้นตอนที่สมบูรณ์มีดังนี้:
หน่วย หน่วยที่ 1;
อินเตอร์เฟซ
การใช้งาน
Windows, ข้อความ, SysUtils, คลาส, กราฟิก, การควบคุม, แบบฟอร์ม, ไดอะล็อก, StdCtrls, FileCtrl, ExtCtrls, เมนู;
พิมพ์
TForm1 = คลาส (TForm)
แผง 1: TPanel;
แผง2: TPanel;
FileListBox1: TFileListBox;
ListBox1: TListBox;
PopupMenu1: TPopupMenu;
Hide1: TMenuItem;
Show1: TMenuItem;
Close1: TMenuItem;
ขั้นตอน FormCreate (ผู้ส่ง: TObject);
ขั้นตอน FileListBox1DblClick (ผู้ส่ง: TObject);
ขั้นตอน Hide1Click (ผู้ส่ง: TObject);
ขั้นตอน Show1Click (ผู้ส่ง: TObject);
ขั้นตอน Close1Click (ผู้ส่ง: TObject);
ส่วนตัว
{ประกาศส่วนตัว}
สาธารณะ
{ประกาศสาธารณะ}
ขั้นตอน Fresh1;
จบ;
var
แบบฟอร์ม 1: TForm1;
การดำเนินการ
{$R *.DFM}
ฟังก์ชัน EnumProc(
h : HWND;//ที่จับหน้าต่างลูก
l : จำนวนเต็ม// ค่าที่กำหนดโดยแอปพลิเคชัน
): บูลีน;stdcall;
var buf: อาร์เรย์ [0..255] ของถ่าน;
เริ่ม
GetWindowText(h, buf, ขนาดของ (buf)- 1);
ถ้า iswindowvisible(h) แล้ว
Form1.ListBox1.items.add(' ' +strpas(buf) + ' : ' + inttostr(h))
อื่น
Form1.ListBox1.items.add('-' +strpas(buf) + ' : ' + inttostr(h));
ผลลัพธ์ := จริง;
จบ;
ขั้นตอน TForm1.Fresh1;
เริ่ม
รายการBox1.clear;
enumChildwindows(Panel2.handle, TFNWndEnumProc(@enumproc), 0);
จบ;
ขั้นตอน TForm1.FormCreate (ผู้ส่ง: TObject);
var buf: อาร์เรย์ [0..256] ของถ่าน;
เริ่ม
GetSystemDirectory(buf, ขนาดของ (buf) - 1);
FileListBox1.directory := strpas(buf);
ListBox1.popupmenu := ป๊อปอัปเมนู1;
จบ;
ขั้นตอน TForm1.FileListBox1DblClick (ผู้ส่ง: TObject);
เริ่ม
WinExec(pchar(FileListBox1.FileName + ' /p ' + inttostr(Panel2.handle)), SW_Show);
สด1;
จบ;
ขั้นตอน TForm1.Hide1Click (ผู้ส่ง: TObject);
var
h : จำนวนเต็ม;
s : สตริง;
เริ่ม
ถ้า ListBox1.itemindex = -1 ให้ออก;
s := Listbox1.items[ListBox1.itemindex];
h := strtoint(copy(s, pos(':', s) + 1, length(s)));
ShowWindow(h, SW_HIDE);
สด1;
จบ;
ขั้นตอน TForm1.Show1Click (ผู้ส่ง: TObject);
var
h : จำนวนเต็ม;
s : สตริง;
เริ่ม
ถ้า ListBox1.itemindex = -1 ให้ออก;
s := Listbox1.items[ListBox1.itemindex];
h := strtoint(copy(s, pos(':', s) + 1, length(s)));
ShowWindow(h, SW_SHOW);
สด1;
จบ;
ขั้นตอน TForm1.Close1Click (ผู้ส่ง: TObject);
var
h : จำนวนเต็ม;
s : สตริง;
เริ่ม
ถ้า ListBox1.itemindex = -1 ให้ออก;
s := Listbox1.items[ListBox1.itemindex];
h := strtoint(copy(s, pos(':', s) + 1, length(s)));
โพสต์ข้อความ(h, WM_QUIT, 0, 0);
สด1;
จบ;
จบ.
ลิขสิทธิ์ & สำเนา; Shanghai Jusheng Computer System Engineering Co. , Ltd. 1999-2000 สงวนลิขสิทธิ์