発達習慣についての考えの中には、喉に詰まったように感じて吐き出すことができないものもあります。投稿動機を見ると、もちろん参加ポイントを騙し取る可能性を排除するものではありませんが、その一方で、同業者(Nian Xing)に何らかの提案や参考を提供したいとも考えています(誤解を招かないように願います)。他)。同時に、私のこうした悪い癖について意見を述べ、批判や修正をしていただければ幸いです。ありがとう。
1つ。プロジェクトディレクトリを作成する
まず最初のステップは、もちろん、新しいプロジェクト用に別のディレクトリを作成することです (笑わないでください)。ディレクトリ名はプロジェクト名と同じ名前にする必要がありますが、明確かつ簡潔であれば別の名前を使用することもできます。次に、このディレクトリ内に次の各ディレクトリを作成します。
<Doc>: プロジェクトに関連する開発ドキュメント (要件説明、概要設計、詳細設計など) を格納するために使用されます。
<Source>: 「.DPR」、「.Pas」、「.Dfm」およびその他のファイルを Delphi ソース プログラムに保存するために使用されます。
<Dcu>: 「.Dcu」ファイルはこのディレクトリに保存されます。「.Pas」ファイルと「.Dcu」ファイルを別々に保存する目的は、Source ディレクトリの内容をわかりやすくすることだけです。
<Bin>: 「.Exe」、「.Dll」、「.Ocx」などのプロジェクトの出力ファイルを保存します。
<Log>: ログ ファイルを保存するために使用されます。通常は、このディレクトリに「<プロジェクト名>Programmer Log.Txt」ファイルを置きます。
<Images>: もちろん、プロジェクトで使用される画像が保存されているディレクトリです。通常の状況では、このディレクトリは不可欠です。他のリソースも使用する場合は、Wav、Avi などの独自のディレクトリも作成します。
二。プロジェクトオプションを設定する
Delphi で新しいプロジェクトを作成し、このプロジェクトを Source ディレクトリに保存し、同時に次の操作を行います。
a. このプロジェクトのアイコンとして、目を引く、プロジェクトにある程度関連のあるアイコンを選択します。もちろん、このアイコンは一時的にのみ使用できますが、Delphi のデフォルトの醜いアイコンよりも優れている必要があります。そうでなければ、どうやって自分に価値があるでしょうか。
b. [プロジェクト オプション] -> [ディレクトリ/条件] ページで出力ディレクトリを Bin ディレクトリに設定します。
c. ユニット出力ディレクトリを Dcu ディレクトリに設定します。
三つ。定数単位の追加
新しいユニットを追加し、「unt<プロジェクト名> Consts.Pas」として保存し、プロジェクトで使用される定数を保存します。
4つ目。形式と単位について
ハンガリーの命名規則に従ってフォームに名前を付けます。ログインに使用するフォームには「FrmLogin」という名前を付け、そのユニット名には「untLogin」を付けます。一般に、2 つの対応するフォームとユニットの名前は、「Frm」または「unt」の省略形を除いて一貫している必要があります。
このユニットのコメントをユニットの先頭に追加します。コメントの形式は Delphi ソース コードを参照できますが、少なくとも次の項目を含める必要があります。改造履歴など。
新しく作成したフォームのキャプションを、Delphi のデフォルトのものを使用する代わりに、Form クラスの名前に設定します。たとえば、Form1 の名前を FrmLogin に変更すると、新しいフォーム クラス TFrmLogin が取得され、Delphi はフォームのキャプションを自動的に「FrmLogin」に更新します。私の意見では、単に FrmLogin を操作するのではなく、フォーム クラス TFrmLogin を設計しているため、キャプションは「TFrmLogin」であるべきです。
TFrmLogin のような明確な機能を持つフォーム クラスの場合、多くの人は設計段階でそのキャプションを「Operator Login」などの名前に設定する習慣があります。私の習慣では、「オペレーター ログイン」のような定数は通常、unt<プロジェクト名>Consts.Pas に保存され、ResourceString または Const で定義されます。フォームのキャプションの命名に関しては、実行時タスクにする必要があります。したがって、次のように、TForm.OnCreate イベントがトリガーされた場合にのみ Caption を操作することがよくあります。
プロシージャ TFrmLogin.FormCreate(送信者: TObject);
始める
キャプション := csLoginTitle;
....
終わり;
五。 Format機能の使用について
iyear、iMonth、iDay の 3 つのデータがあります。「誕生日: 1976/3/18」などの情報を表示するには、通常どうしていますか? s := 'Birthday:'+IntToStr(i Year)+'.'+IntToStr(iMonth)+'.'+IntToStr(iDay);? を使用します。これは本当に疲れます。私の習慣は、定数 csBirthDayFormat = 'Birthday: %d/%d/%d' を unt<プロジェクト名>Consts.Pas に追加して表示形式を保存し、その後 s := Format(csBirthDayFormat, [iyear, iMonth] を使用することです。 、iDay]); このようなステートメントによりデータの組み立てが完了します。これを行うことの利点は明らかです。つまり、データの表示形式を 1 か所で維持するだけで済むということです。
Format 機能は強力なので、ぜひお勧めします。
六。レジストリやiniファイルの保存について
当初、私は通常、レジストリにアクセスするために TRegistry を使用し、Ini ファイルにアクセスするために TIniFile を使用していました。これら 2 つのクラスの使用法は異なるため、同じコードを使用してレジストリと Ini ファイルの両方にアクセスすることはほとんど不可能です。なんて頭が痛いんだ!
ついに救世主を見つけたのが TRegistryIniFile クラスです。レジストリ ユニットを見ると、TRegistryIniFile が TCusomIniFile を継承していることがわかります。 TIniFile も TCusomIniFile から継承します。したがって、抽象クラス TCusomIniFile を使用してレジストリまたは Ini ファイルへのアクセスを実現すると、一石二鳥になります。例えば:
変数
csmIniFile:TCusomIniFile;
始める
if blUseIniFile then//Ini ファイルを使用する場合
csmIniFile:= TIniFile.Create(csRootKey)
それ以外
csmIniFile:= TRegistryIniFile.Create(csRootKey);
//これで、csmIniFile を使用して Ini ファイルにアクセスできるようになります。
//または、Ini ファイルにアクセスするのと同様の方法でレジストリにアクセスします。
セブン。 TStream ストリームと TFileStream、TMemoryStream などについて
TFileStream と TMemoryStream はどちらも抽象クラス TStream を継承しています。これは、一連のコードを使用してファイルとメモリへのアクセス操作を完了できることを意味します。したがって、一部のインターフェイスを定義するときは、パラメーターの型を具象クラスではなく抽象クラスとして定義する傾向があります。たとえば、保存関数を完了する関数は次のように定義されます。
関数 Save(AStream: TStream): ブール値;
として定義されるよりも
関数 Save(AStream: TFileStream): ブール値;
もっと柔軟になってください。
前者の定義は、将来出現する可能性のある新しいタイプのフローに適用できるため、将来を見据えたものです。後者の定義は、TFileStream (もちろん TFileStream のサブクラスを含む) などのストリームにのみ適用され、より厳格です。
私の習慣: 抽象クラスがある場合は、パラメータを抽象クラスの型として定義してみます。 結局のところ、私たちは将来を予測できません。
八。 TActionをもっと活用しましょう
Delphi 4 以降では、アクションの概念が導入され、TActionList コンポーネントが標準コンポーネント バーに追加されました。 Action を使用する利点は、制御状態の同期の心配がなくなることです。
その他の記事
Musicwind®@HangZhou.Zj.China