Beberapa pemikiran tentang kebiasaan berkembang terasa seperti tersangkut di tenggorokan Anda dan Anda tidak akan bisa meludahkannya. Melihat motivasi postingan, tentunya saya tidak menutup kemungkinan adanya kecurangan untuk mendapatkan poin partisipasi, namun di sisi lain saya juga berharap dapat memberikan saran atau referensi kepada rekan-rekan praktisi (Nian Xing) (semoga saya jangan menyesatkan orang lain). Sekaligus saya juga berharap agar anda dapat mengemukakan pendapat anda mengenai kebiasaan buruk saya ini serta memberikan kritik dan koreksi. Terima kasih.
satu. Buat direktori proyek
Pertama-tama, langkah pertama tentu saja membuat direktori terpisah untuk proyek baru (jangan tertawa). Nama direktori harus sama dengan nama proyek, atau boleh digunakan nama lain, asalkan jelas dan ringkas. Kemudian, buat masing-masing direktori berikut dalam direktori ini:
<Doc>: digunakan untuk menyimpan dokumen pengembangan yang terkait dengan proyek (deskripsi kebutuhan, desain garis besar, desain detail, dll.);
<Sumber>: digunakan untuk menyimpan ".DPR", ".Pas", ".Dfm" dan file lain dalam program sumber Delphi;
<Dcu>: File ".Dcu" disimpan di direktori ini. Tujuan menyimpan file ".Pas" dan ".Dcu" secara terpisah adalah untuk memperjelas isi direktori Sumber;
<Bin>: Menyimpan file keluaran proyek, seperti ".Exe", ".Dll" atau ".Ocx", dll.;
<Log>: digunakan untuk menyimpan file log; biasanya saya akan meletakkan file "<Nama Proyek>Programmer Log.Txt" di direktori ini.
<Gambar>: Tentu saja, ini adalah direktori tempat penyimpanan gambar yang digunakan dalam proyek. Dalam keadaan normal, direktori ini sangat diperlukan. Jika sumber daya lain juga digunakan, maka buatlah direktori sendiri juga, seperti Wav, Avi, dll.
dua. Tetapkan opsi proyek
Buat proyek baru di Delphi, simpan proyek ini ke direktori Sumber, dan pada saat yang sama:
a. Pilih ikon yang menarik perhatian dan agak terkait dengan proyek sebagai ikon proyek ini. Tentu saja, ikon ini hanya dapat digunakan sementara, tetapi harus lebih baik daripada ikon jelek yang biasa digunakan Delphi.
b.Atur Direktori Output di halaman Opsi Proyek -> Direktori/Kondisi ke direktori Bin;
c. Atur Direktori keluaran Unit ke direktori Dcu.
tiga. Tambahkan satuan konstan
Tambahkan Unit baru dan simpan sebagai "unt<nama proyek> Consts.Pas" untuk menyimpan konstanta yang digunakan dalam proyek.
Empat. Tentang Bentuk dan Satuan
Beri nama Formulir sesuai dengan konvensi penamaan Hongaria. Formulir yang digunakan untuk login dapat diberi nama 'FrmLogin', dan nama unitnya dapat berupa 'untLogin'. Secara umum, nama dua Bentuk dan Satuan yang bersesuaian harus konsisten kecuali singkatan 'Frm' atau 'unt'.
Tambahkan komentar untuk unit ini di kepala Unit. Format komentar dapat mengacu pada kode sumber Delphi, tetapi setidaknya harus mencakup item berikut: deskripsi fungsi hak cipta; riwayat modifikasi, dll.
Atur Keterangan Formulir yang baru dibuat ke nama kelas Formulir alih-alih menggunakan nama default Delphi. Misalnya, setelah mengganti nama Form1 menjadi FrmLogin, kita memperoleh kelas formulir baru TFrmLogin, dan Delphi secara otomatis memperbarui Caption formulir menjadi 'FrmLogin'. Menurut pendapat saya, Captionnya harus 'TFrmLogin', karena kami sedang merancang kelas form TFrmLogin, bukan hanya beroperasi di FrmLogin.
Untuk kelas formulir dengan fungsi yang jelas seperti TFrmLogin, banyak orang yang memiliki kebiasaan menyetel Caption-nya ke nama seperti "Operator Login" selama tahap desain. Kebiasaan saya adalah konstanta seperti "login operator" biasanya disimpan di unt<nama proyek>Consts.Pas dan didefinisikan dengan ResourceString atau Const. Sedangkan untuk penamaan Caption formulir, itu harus menjadi tugas run-time. Oleh karena itu, saya sering mengoperasikan Caption hanya ketika event TForm.OnCreate dipicu, seperti:
prosedur TFrmLogin.FormCreate(Pengirim: TObject);
mulai
Keterangan := csLoginTitle;
....
akhir;
lima. Tentang penggunaan fungsi Format
Ada tiga data: iYear, iMonth, dan iDay. Untuk menampilkan informasi seperti "Ulang Tahun: 18/3/1976", apa yang biasanya Anda lakukan? Gunakan s := 'Ulang Tahun:'+IntToStr(iYear)+'.'+IntToStr(iMonth)+'.'+IntToStr(iDay);? Ini sungguh melelahkan. Kebiasaan saya adalah menambahkan konstanta csBirthDayFormat = 'Birthday: %d/%d/%d' di unt<nama proyek>Consts.Pas untuk menyimpan format tampilan, lalu menggunakan s := Format(csBirthDayFormat, [iYear, iMonth , iDay]); Pernyataan tersebut melengkapi pengumpulan data. Keuntungan melakukan hal ini jelas, yaitu Anda hanya perlu mempertahankan format tampilan data di satu tempat.
Fungsi Format sangat berguna dan saya sangat merekomendasikannya.
enam. Tentang penyimpanan file registri atau Ini
Awalnya saya biasanya menggunakan TRegistry untuk mengakses registri, dan TIniFile untuk mengakses file Ini. Penggunaan kedua kelas ini berbeda, sehingga hampir tidak mungkin menggunakan kode yang sama untuk mengakses registri dan file Ini. Sungguh memusingkan!
Akhirnya saya menemukan penyelamat! Ini adalah kelas TRegistryIniFile. Melihat unit Registri, kami menemukan bahwa TRegistryIniFile mewarisi dari TCusomIniFile. TIniFile juga mewarisi dari TCusomIniFile. Oleh karena itu, menggunakan kelas abstrak TCusomIniFile untuk mendapatkan akses ke registri atau file Ini berarti membunuh dua burung dengan satu batu. Misalnya:
var
csmIniFile:TCusomIniFile;
mulai
jika blUseIniFile lalu//Jika menggunakan file Ini
csmIniFile:= TIniFile.Buat(csRootKey)
kalau tidak
csmIniFile:= TRegistryIniFile.Buat(csRootKey);
//Kemudian Anda dapat menggunakan csmIniFile untuk mengakses file Ini.
//Atau akses registri dengan cara yang mirip dengan mengakses file Ini.
tujuh. Tentang aliran TStream dan TFileStream, TMemoryStream, dll.
TFileStream dan TMemoryStream mewarisi kelas abstrak TStream, yang berarti kita dapat menggunakan sekumpulan kode untuk menyelesaikan operasi akses ke file dan memori. Oleh karena itu, ketika mendefinisikan beberapa antarmuka, saya cenderung mendefinisikan tipe parameter sebagai kelas abstrak daripada kelas konkret. Misalnya, fungsi untuk menyelesaikan fungsi penyimpanan didefinisikan sebagai
fungsi Simpan(AStream: TStream): Boolean;
daripada didefinisikan sebagai
fungsi Simpan(AStream: TFileStream): Boolean;
Menjadi jauh lebih fleksibel.
Definisi sebelumnya bersifat berwawasan ke depan karena dapat diterapkan pada jenis arus baru yang mungkin muncul di masa depan. Definisi terakhir hanya berlaku untuk aliran seperti TFileStream (tentu saja termasuk subkelas TFileStream), yang jauh lebih kaku.
Kebiasaan saya: Jika ada kelas abstrak, coba definisikan parameternya sebagai tipe kelas abstrak. Lagi pula, kita tidak bisa meramalkan masa depan.
delapan. Gunakan TAction lebih banyak
Delphi 4 dan yang lebih baru memperkenalkan konsep Action, dan menambahkan komponen TActionList ke bilah komponen Standar. Keuntungan menggunakan Action adalah kekhawatiran akan sinkronisasi status kontrol hilang!
Lebih banyak artikel
Musicwind®@HangZhou.Zj.China