ความคิดบางอย่างเกี่ยวกับนิสัยการพัฒนารู้สึกเหมือนติดอยู่ในลำคอและคุณจะไม่สามารถคายมันออกมาได้ เมื่อพิจารณาถึงแรงจูงใจในการโพสต์ แน่นอนว่าฉันไม่ได้ตัดความเป็นไปได้ที่จะฉ้อโกงคะแนนการมีส่วนร่วม แต่ในทางกลับกัน ฉันหวังว่าจะให้คำแนะนำหรือข้อมูลอ้างอิงแก่เพื่อนผู้ปฏิบัติงาน (Nian Xing) (ฉันหวังว่าฉันจะไม่ทำให้เข้าใจผิด) คนอื่น). ในเวลาเดียวกัน ฉันหวังว่าคุณจะสามารถแสดงความคิดเห็นเกี่ยวกับนิสัยที่ไม่ดีเหล่านี้ของฉัน และวิจารณ์และแก้ไขได้ ขอบคุณ.
หนึ่ง. สร้างไดเรกทอรีโครงการ
ก่อนอื่น ขั้นตอนแรกคือสร้างไดเร็กทอรีแยกต่างหากสำหรับโปรเจ็กต์ใหม่ (อย่าหัวเราะ) ชื่อไดเรกทอรีจะต้องมีชื่อเดียวกันกับชื่อโครงการ มิฉะนั้นอาจใช้ชื่ออื่นได้ ตราบใดที่ชัดเจนและกระชับ จากนั้น สร้างแต่ละไดเร็กทอรีต่อไปนี้ภายในไดเร็กทอรีนี้:
<Doc>: ใช้เพื่อจัดเก็บเอกสารการพัฒนาที่เกี่ยวข้องกับโครงการ (คำอธิบายข้อกำหนด การออกแบบโครงร่าง การออกแบบโดยละเอียด ฯลฯ)
<แหล่งที่มา>: ใช้เพื่อจัดเก็บ ".DPR", ".Pas", ".Dfm" และไฟล์อื่น ๆ ในโปรแกรมต้นฉบับ Delphi
<Dcu>: ไฟล์ ".Dcu" จะถูกจัดเก็บไว้ในไดเร็กทอรีนี้ วัตถุประสงค์ของการจัดเก็บไฟล์ ".Pas" และ ".Dcu" แยกกันเพียงเพื่อให้เนื้อหาของไดเร็กทอรี Source ชัดเจนยิ่งขึ้น
<Bin>: จัดเก็บไฟล์เอาต์พุตของโปรเจ็กต์ เช่น ".Exe", ".Dll" หรือ ".Ocx" ฯลฯ;
<Log>: ใช้เพื่อจัดเก็บไฟล์บันทึก โดยปกติฉันจะใส่ไฟล์ "<Project Name>Programmer Log.Txt" ไว้ในไดเร็กทอรีนี้
<Images>: แน่นอนว่านี่เป็นไดเร็กทอรีที่ใช้จัดเก็บรูปภาพที่ใช้ในโปรเจ็กต์ ภายใต้สถานการณ์ปกติ ไดเร็กทอรีนี้จะขาดไม่ได้ หากใช้ทรัพยากรอื่นด้วย ให้สร้างไดเร็กทอรีของตนเองด้วย เช่น Wav, Avi เป็นต้น
สอง. ตั้งค่าตัวเลือกโครงการ
สร้างโปรเจ็กต์ใหม่ใน Delphi บันทึกโปรเจ็กต์นี้ลงในไดเร็กทอรี Source และในเวลาเดียวกัน:
ก. เลือกไอคอนที่สะดุดตาและค่อนข้างเกี่ยวข้องกับโครงการเป็นไอคอนสำหรับโครงการนี้ แน่นอนว่าไอคอนนี้สามารถใช้ได้ชั่วคราวเท่านั้น แต่จะต้องดีกว่าไอคอนที่น่าเกลียดที่ Delphi เป็นค่าเริ่มต้น ไม่อย่างนั้นคุณจะคู่ควรกับตัวเองได้อย่างไร?
b. ตั้งค่า Output Directory ในหน้าตัวเลือกโครงการ -> ไดเรกทอรี/เงื่อนไขเป็นไดเรกทอรี Bin
c. ตั้งค่าไดเร็กทอรีเอาต์พุตของหน่วยเป็นไดเร็กทอรี Dcu
สาม. เพิ่มหน่วยคงที่
เพิ่มหน่วยใหม่และบันทึกเป็น "unt<ชื่อโครงการ> Consts.Pas" เพื่อบันทึกค่าคงที่ที่ใช้ในโครงการ
สี่. เกี่ยวกับแบบฟอร์มและหน่วย
ตั้งชื่อแบบฟอร์มตามแบบแผนการตั้งชื่อภาษาฮังการี แบบฟอร์มที่ใช้ในการเข้าสู่ระบบสามารถตั้งชื่อว่า 'FrmLogin' และชื่อหน่วยสามารถเป็น 'untLogin' โดยทั่วไป ชื่อของแบบฟอร์มและหน่วยที่เกี่ยวข้องทั้งสองควรจะสอดคล้องกัน ยกเว้นตัวย่อของ 'Frm' หรือ 'unt'
เพิ่มความคิดเห็นสำหรับหน่วยนี้ที่ส่วนหัวของหน่วย รูปแบบของความคิดเห็นสามารถอ้างอิงถึงซอร์สโค้ดของ Delphi แต่อย่างน้อยควรมีรายการต่อไปนี้: เวลาสร้างฟังก์ชัน ลิขสิทธิ์; ประวัติการแก้ไข ฯลฯ
ตั้งค่าคำอธิบายของแบบฟอร์มที่สร้างขึ้นใหม่เป็นชื่อของคลาสแบบฟอร์มแทนที่จะใช้ค่าเริ่มต้นของ Delphi ตัวอย่างเช่น หลังจากเปลี่ยนชื่อ Form1 เป็น FrmLogin เราจะได้รับคลาสแบบฟอร์มใหม่ TFrmLogin และ Delphi จะอัปเดตคำอธิบายของแบบฟอร์มเป็น 'FrmLogin' โดยอัตโนมัติ ในความคิดของฉัน คำอธิบายภาพควรเป็น 'TFrmLogin' เนื่องจากเรากำลังออกแบบคลาสแบบฟอร์ม TFrmLogin แทนที่จะดำเนินการบน FrmLogin เท่านั้น
สำหรับคลาสแบบฟอร์มที่มีฟังก์ชันที่ชัดเจน เช่น TFrmLogin หลายๆ คนมักจะตั้งชื่อ Caption เป็นชื่อ เช่น "Operator Login" ในระหว่างขั้นตอนการออกแบบ นิสัยของฉันคือค่าคงที่เช่น "การเข้าสู่ระบบของผู้ให้บริการ" มักจะถูกเก็บไว้ใน unt<ชื่อโครงการ>Consts.Pas และกำหนดด้วย ResourceString หรือ Const สำหรับการตั้งชื่อ Caption ของฟอร์ม ควรเป็นงานรันไทม์ ดังนั้น ฉันมักจะใช้งาน Caption เฉพาะเมื่อมีการทริกเกอร์เหตุการณ์ TForm.OnCreate เท่านั้น เช่น:
ขั้นตอน TFrmLogin.FormCreate (ผู้ส่ง: TObject);
เริ่ม
คำบรรยาย := csLoginTitle;
-
จบ;
ห้า. เกี่ยวกับการใช้ฟังก์ชันรูปแบบ
มีข้อมูลสามอย่าง: iYear, iMonth และ iDay หากต้องการแสดงข้อมูล เช่น "วันเกิด: 1976/3/61" ปกติคุณจะทำอย่างไร ใช้ s := 'วันเกิด:'+IntToStr(iYear)+'.'+IntToStr(iMonth)+'.'+IntToStr(iDay);? นี่มันเหนื่อยจริงๆ นิสัยของฉันคือการเพิ่มค่าคงที่ csBirthDayFormat = 'Birthday: %d/%d/%d' ใน unt<project name>Consts.Pas เพื่อบันทึกรูปแบบการแสดงผล จากนั้นใช้ s := Format(csBirthDayFormat, [iYear, iMonth , iDay]); ข้อความดังกล่าวทำให้การประกอบข้อมูลเสร็จสมบูรณ์ ข้อดีของการทำเช่นนี้ชัดเจน นั่นคือ คุณเพียงแค่ต้องรักษารูปแบบการแสดงข้อมูลไว้ในที่เดียวเท่านั้น
ฟังก์ชันรูปแบบมีประสิทธิภาพและฉันขอแนะนำอย่างยิ่ง แล้วคุณล่ะ
หก. เกี่ยวกับการจัดเก็บไฟล์รีจิสทรีหรือไฟล์ Ini
เดิมทีฉันมักจะใช้ TRegistry เพื่อเข้าถึงรีจิสทรี และใช้ TIniFile เพื่อเข้าถึงไฟล์ Ini การใช้งานของทั้งสองคลาสนี้แตกต่างกัน ดังนั้นจึงแทบจะเป็นไปไม่ได้เลยที่จะใช้รหัสเดียวกันในการเข้าถึงทั้งรีจิสทรีและไฟล์ Ini ปวดหัวจังเลย!
ในที่สุดฉันก็พบผู้ช่วยชีวิตแล้ว มันคือคลาส TRegistryIniFile เมื่อดูที่หน่วย Registry เราพบว่า TRegistryIniFile สืบทอดมาจาก TCusomIniFile TIniFile ยังสืบทอดมาจาก TCusomIniFile ดังนั้นการใช้คลาสนามธรรม TCusomIniFile เพื่อให้สามารถเข้าถึงรีจิสทรีหรือไฟล์ Ini คือการฆ่านกสองตัวด้วยหินนัดเดียว ตัวอย่างเช่น:
var
csmIniFile:TCusomIniFile;
เริ่ม
ถ้า blUseIniFile แล้ว//ถ้าใช้ไฟล์ Ini
csmIniFile:= TIniFile.Create (csRootKey)
อื่น
csmIniFile:= TRegistryIniFile.Create (csRootKey);
//จากนั้นคุณสามารถใช้ csmIniFile เพื่อเข้าถึงไฟล์ Ini
//หรือเข้าถึงรีจิสทรีในลักษณะเดียวกันกับการเข้าถึงไฟล์ Ini
เจ็ด เกี่ยวกับสตรีม TStream และ TFileStream, TMemoryStream ฯลฯ
ทั้ง TFileStream และ TMemoryStream สืบทอดมาจากคลาสนามธรรม TStream ซึ่งหมายความว่าเราสามารถใช้ชุดของรหัสเพื่อดำเนินการเข้าถึงไฟล์และหน่วยความจำให้เสร็จสมบูรณ์ได้ ดังนั้น เมื่อกำหนดอินเทอร์เฟซบางอย่าง ฉันมักจะกำหนดประเภทของพารามิเตอร์เป็นคลาสนามธรรมมากกว่าคลาสที่เป็นรูปธรรม ตัวอย่างเช่น ฟังก์ชันที่ทำให้ฟังก์ชันการบันทึกเสร็จสมบูรณ์ถูกกำหนดเป็น
ฟังก์ชั่นบันทึก (AStream: TStream): บูลีน;
มากกว่าที่กำหนดไว้เป็น
ฟังก์ชั่นบันทึก (AStream: TFileStream): บูลีน;
มีความยืดหยุ่นมากขึ้น
คำจำกัดความเดิมเป็นการมองไปข้างหน้าเนื่องจากสามารถนำไปใช้กับกระแสประเภทใหม่ที่อาจปรากฏในอนาคต คำจำกัดความหลังใช้กับสตรีมเช่น TFileStream เท่านั้น (รวมถึงคลาสย่อยของ TFileStream ด้วย) ซึ่งเข้มงวดกว่ามาก
นิสัยของฉัน: หากมีคลาสนามธรรม ให้พยายามกำหนดพารามิเตอร์ให้เป็นประเภทของคลาสนามธรรม เพราะเราไม่สามารถคาดการณ์อนาคตได้
แปด. ใช้ TAction มากขึ้น
Delphi 4 และใหม่กว่าได้แนะนำแนวคิดของ Action และเพิ่มส่วนประกอบ TActionList ลงในแถบส่วนประกอบมาตรฐาน ข้อดีของการใช้ Action คือความกังวลเรื่องการซิงโครไนซ์สถานะการควบคุมหมดไป!
บทความเพิ่มเติม
Musicwind®@HangZhou.Zj.China