----- ในโปรแกรมเครือข่าย เรามักจะพบกับสถานการณ์ที่ผู้ใช้จำเป็นต้องป้อนที่อยู่ IP อย่างไรก็ตาม Delphi ไม่ได้จัดเตรียมการควบคุมที่สามารถใช้เพื่อป้อนสตริง IP ได้ ดังนั้นเราจึงต้องใช้ตัวควบคุม Tedit (กล่องข้อความบรรทัดเดียว) เพื่อยอมรับสตริง IP ที่ผู้ใช้ป้อน อย่างไรก็ตาม การใช้ Tedit เพื่อป้อนสตริง IP ไม่ใช่ความคิดที่ดี เนื่องจากไม่สะดวกในการจัดการ ในความเป็นจริงมีตัวควบคุม Windows อยู่ข้างๆ เราโดยเฉพาะสำหรับการป้อนสตริง IP ดังแสดงในรูป ตัวควบคุม IP จะปฏิเสธสตริง IP ที่ไม่ถูกต้อง (สามารถป้อนได้เฉพาะตัวเลขระหว่าง 0..255 ในแต่ละส่วน) ซึ่งช่วยให้คุณได้รับค่า IP (จำนวนเต็ม 32 บิต) ที่สอดคล้องกับสตริง IP ในตัวควบคุมนี้ ช่วยคุณประหยัดปัญหาในการแปลงระหว่างสตริง IP และค่า IP นอกจากนี้ คุณยังสามารถจำกัดช่วงของ IP ที่สามารถป้อนในการควบคุม IP ได้อีกด้วย ในบทความนี้ ฉันจะแนะนำวิธีใช้การควบคุม IP ของ Windows ในโปรแกรม Delphi ของเรา
---- มีไดนามิกลิงก์ไลบรารีที่สำคัญมากสองไลบรารีใน Windows: commctrl.dll และ comctl32.dll ซึ่งเป็นไลบรารีควบคุมแบบกำหนดเองของ Windows (Windows Common Controls) ไลบรารีการควบคุมแบบกำหนดเองประกอบด้วยตัวควบคุม Windows ที่ใช้กันทั่วไปมากมาย เช่น Statusbar, Coolbar, HotKey ฯลฯ ใน Delphi ตัวควบคุมเหล่านี้ส่วนใหญ่ได้รับการบรรจุเป็นตัวควบคุมแบบภาพ หลังจากที่ Microsoft เปิดตัว Internet Explorer 3 การควบคุมใหม่บางอย่างได้ถูกเพิ่มลงในไลบรารีการควบคุมแบบกำหนดเอง รวมถึงการควบคุม IP ของ Windows (การควบคุมการแก้ไขที่อยู่ IP)
---- เตรียมใช้งานไลบรารีการควบคุมแบบกำหนดเองของ Windows
---- Windows มีฟังก์ชัน API สองฟังก์ชัน InitCommonControls และ InitCommonControlsEx สำหรับการเริ่มต้นไลบรารีการควบคุมแบบกำหนดเอง จากชื่อ จะเห็นความสัมพันธ์ระหว่างฟังก์ชัน API ทั้งสองนี้ไม่ใช่เรื่องยาก โดยฟังก์ชันหลังเป็นการเพิ่มประสิทธิภาพของฟังก์ชันแรก หากคุณต้องการใช้การควบคุม IP ในโปรแกรมของคุณ คุณต้องใช้ InitCommonControlsEx เพื่อดำเนินการเตรียมใช้งานไลบรารีและคลาสการควบคุมแบบกำหนดเองให้เสร็จสมบูรณ์ ต้นแบบของฟังก์ชัน InitCommonControlsEx มีดังนี้ (ไวยากรณ์ Pascal):
-
---- สร้างการควบคุม IP
-
---- ใช้การควบคุม IP ในโปรแกรมเราสื่อสารกับตัวควบคุม IP โดยการส่งข้อความถึงมัน ตัวควบคุม IP สามารถตอบสนองหกข้อความต่อไปนี้และความหมายแสดงอยู่ในตารางด้านล่าง:
-
---- หากคุณต้องการรับค่า IP ที่สอดคล้องกับสตริง IP ในการควบคุม IP คุณควรส่งข้อความ IPM_GETADDRESS ไปยังตัวควบคุม IP และคุณต้องใช้ที่อยู่จำนวนเต็ม 32 บิตเป็นพารามิเตอร์สุดท้ายของ SendMessage .
-
---- ข้อความแจ้งเตือนการควบคุม IP
---- เมื่อสตริง IP มีการเปลี่ยนแปลงหรือโฟกัสอินพุตถูกถ่ายโอน ตัวควบคุม IP จะส่งข้อความแจ้งเตือน IPN_FIELDCHANGED ไปยังหน้าต่างหลัก ในกรณีส่วนใหญ่ เราสามารถเพิกเฉยต่อข้อความแจ้งเตือนนี้ได้ ต่อไปนี้เป็นตัวอย่างของการจัดการข้อความแจ้งเตือน IPN_FIELDCHANGED:
PROcedure Tform1.WndProc(var Msg: TMessage);var p:PNMHDR; begininherited; if Msg.Msg=WM_NOTIFYแล้ว เริ่ม p:=Pointer(Msg.lParam); ถ้า p^.code=IPN_FIELDCHANGED แล้วเริ่มต้น{...การประมวลผลของ IP ควบคุมข้อความแจ้งเตือน IPN_FIELDCHANGED...} end;end;end;