「Tips - Delphi」の編集履歴(バックアップ)一覧はこちら

Tips - Delphi」(2009/07/19 (日) 20:23:44) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

&font(b,144%){Tips - Delphi} #contents ---- ***便利な関数 |Trunc(x)|x の小数点以下を切捨てる| |Trunc(x + 0.5)|x の小数点以下を四捨五入| |ExtractFilePath(Application.ExeName)|実行中のアプリのディレクトリを取得| |ExtractFilePath(ParamStr(0))|~| ***よく使うキーコード |#00|キー入力無視| |#08|BackSpace/Delete| |#13|Enter 改行| ***キー入力を制限する  制限したいコンポーネントのOnKeyPressイベントに、特定のキー以外を無視するルーチンを設定する。 procedure TForm1.KeyPressLimit(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', #08]) then // 入力キーが'0'~'9',BackSpace/Delete 以外なら begin beep; // ビープ音による警告 Key := #0; // 入力を無視 end; end; ***メニューバーとツールバーで共通の処理をしたい  [[こちらのページ>Tips - Delphi メニューバーとツールバーの処理共通化]]を参照。 ***文字列を数値に変換する +StrToCurr関数を使う。 +StrToInt関数を使う。 +StrToIntDef関数を使う。 --「10進数と16進数を示す文字列」を整数値に変換する関数。変換エラー時に返す数値を指定できるため、指定の数値が返されたときにエラー処理へ分岐できる。 +Val関数を使う。整数、実数のいずれも可。 : : var STR : String; FLT : Single; ERR : Integer; : : begin : : Val(STR, FLT, ERR); // STR → FLT ERRは変換エラー箇所(エラーがなければ0) if ERR = 0 then // 変換エラーがなければ : : else // 変換エラーがあれば : : ***JPEG画像を扱う  Jpeg画像を扱うためのユニット「Jpeg」が標準添付されているので、pasファイルのuses節に、手入力で「Jpeg」を追加するだけ。~  Jpegユニットを追加すると、Jpegデータを格納するための TJPEGImage が使えるようになり、これを経由して内部でビットマップに変換できるようになる。 : : uses Windows, ‥‥, Jpeg; : : var JPG : TJPEGImage; BMP : TBitmap; : : begin JPG := TJPEGImage.Create; BMP := TBitmap.Create; : : JPG.Assign(BMP); // BMP → JPG : : BMP.Assign(JPG); // JPG → BMP : : ***指定URLへのリンクを埋め込む  外部アプリケーションをWindows経由でコントロールする「ShellAPI」関数群の中から、「ShellExecute」関数を使うと、指定URLを規定のブラウザで開いてくれる。~  最初に、pasファイルのuses節に、手入力で「ShellAPI」を追加する。後はボタンやラベルをクリックしたときのイベントに、指定URLを呼び出すShellExecute関数を設定すればOK。 : : uses Windows, ‥‥, ShellAPI; : : procedure TForm1.Label1Click(Sender: TObject); begin // ShellExecute(Handle, 'OPEN', 'http://www39.atwiki.jp/kgh07155/', '', '', SW_SHOWNORMAL); // ShellExecute(NULL, 'OPEN', 'http://www39.atwiki.jp/kgh07155/', NULL, NULL, SW_SHOWNORMAL); //どちらの書式でもOK。引数の'OPEN'とURL、SW_SHOWNORMALがポイント。 ShellExecute(Handle, 'OPEN', PChar(TLabel(Sender).Caption), '', '', SW_SHOWNORMAL); // URLとして指定する文字列はPChar型のみ有効。PChar(String)のように型変換すると良い。 // この例の場合、Labelに表示された文字列を引数として適宜実行する。 // つまりLabelの文字列がURLなら、自動でブラウザを起動し指定URLを呼び出す。 end; : :  ShellExecute関数の使い方は他にもいろいろあるが、ここでは省略。 ***Aboutフォーム表示 ヴァージョン情報や作者URLなどを表示する「Aboutフォーム」を表示させる方法。 +Aboutフォームを作成。 +Aboutフォームにフォーム閉じ用のButtonオブジェクトを置き、ModalResultプロパティを mrOK に設定。 --フォームを閉じるためのボタンイベントは不要。 Button.ModalResult := mrOK; // 変更の必要はないので、オブジェクト インスペクタで設定して構わない。 +メインフォームにAboutフォームを呼び出すイベントを追加。 procedure TMain.ViewAboutBox(Sender: TObject); begin AboutBox.ShowModal; // AboutBoxは、呼び出すフォーム名。この場合、表示させたいAboutフォーム。 // ShowModalは、フォームをダイアログ表示させるメソッド。ボタンを押すとフォームを閉じ、 // 押されたボタンを返し値にするので、特にボタンイベントを設定しなくても良い。 end; ***DialogのOKかCancelかで処理を分ける デフォルトで準備されているDialogの場合、Executeメソッド(型はBoolean)で判定可能。 if OpenDialog.Execute then Memo1.Lines.LoadFromFile(OpenDialog1.FileName); 自前でDialogFormを作成する場合、設置したボタンにModalResultプロパティを設定し、DialogFormのModalResultプロパティの値(型はInteger)で判定(FormのModalResultプロパティは、押されたボタンのModalResultの値になる)。&br(); ModalResultの値はTModalResult型を参照。 DialogForm.Button1.ModalResult := mrYes; DialogForm.Button2.ModalResult := mrNo; if DialogForm.ModalResult := mrYes then Memo1.Lines.LoadFromFile(DialogForm.FileName); ***複数行の文字列を一行化する TStringList, TMemo, TRichEditで、複数の文字列を一行化する方法。 Sample := TStringList.Create; Sample.Add('Line0'); Sample.Add('Line 1'); Sample.Add('Line,2'); Sample.Add('Line"3'); : -Textプロパティを使う。&br();改行コード(#13#10)を区切りに一行化する。&br();Sample.Text = 'Line0'#13#10'Line 1'#13#10'Line,2'#13#10'Line"3'#13#10…… -CommaTextプロパティを使う。&br();半角コンマ(,)を区切りに一行化する。行に半角コンマ(,)や半角スペース( )が入った場合は半角ダブルクォーテーション(")で行を囲み、行に半角ダブルクォーテーション(")が入る場合は半角ダブルクォーテーションを二重にする。&br();Sample.CommaText = Line0,"Line 1","Line,2","Line""3",…… -DelimitedTextプロパティを使う。&br();CommaTextの区切り文字(,)や囲み文字(")の変更可能版。区切り文字はDelimiterプロパティで、囲み文字はQuoteCharプロパティで指定する。デフォルトではCommaTextと同じ。 ***複数行テキストエディタで、手動でカーソルを最下行へ移動 TMemo, TRichEditで、自動でカーソルが最下行へ移動しないときに、手動で移動させる方法。 Memo1.SelStart := Length(Memo1.Lines.Text);//キャレット位置を最後に Memo1.Perform(EM_SCROLLCARET, 0, 0); //キャレット位置までスクロール
&font(b,144%){Tips - Delphi}  基本的にDelphi 6 Personalの個人メモ。ヴァージョン違うと使えないかも。 #contents ---- ***便利な関数 |Trunc(x)|x の小数点以下を切捨てる| |Trunc(x + 0.5)|x の小数点以下を四捨五入| |ExtractFilePath(Application.ExeName)|実行中のアプリのディレクトリを取得| |ExtractFilePath(ParamStr(0))|~| ***よく使うキーコード |#00|キー入力無視| |#08|BackSpace/Delete| |#13|Enter 改行| ***キー入力を制限する  制限したいコンポーネントのOnKeyPressイベントに、特定のキー以外を無視するルーチンを設定する。 procedure TForm1.KeyPressLimit(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', #08]) then // 入力キーが'0'~'9',BackSpace/Delete 以外なら begin beep; // ビープ音による警告 Key := #0; // 入力を無視 end; end; ***メニューバーとツールバーで共通の処理をしたい  [[こちらのページ>Tips - Delphi メニューバーとツールバーの処理共通化]]を参照。 ***文字列を数値に変換する +StrToCurr関数を使う。 +StrToInt関数を使う。 +StrToIntDef関数を使う。 --「10進数と16進数を示す文字列」を整数値に変換する関数。変換エラー時に返す数値を指定できるため、指定の数値が返されたときにエラー処理へ分岐できる。 +Val関数を使う。整数、実数のいずれも可。 : : var STR : String; FLT : Single; ERR : Integer; : : begin : : Val(STR, FLT, ERR); // STR → FLT ERRは変換エラー箇所(エラーがなければ0) if ERR = 0 then // 変換エラーがなければ : : else // 変換エラーがあれば : : おまけ: +IntToHex関数を使うと10進数表記を16進数表記に変換できる……はずだが、Personalには実装されていないらしい。 ***JPEG画像を扱う  Jpeg画像を扱うためのユニット「Jpeg」が標準添付されているので、pasファイルのuses節に、手入力で「Jpeg」を追加するだけ。~  Jpegユニットを追加すると、Jpegデータを格納するための TJPEGImage が使えるようになり、これを経由して内部でビットマップに変換できるようになる。 : : uses Windows, ‥‥, Jpeg; : : var JPG : TJPEGImage; BMP : TBitmap; : : begin JPG := TJPEGImage.Create; BMP := TBitmap.Create; : : JPG.Assign(BMP); // BMP → JPG : : BMP.Assign(JPG); // JPG → BMP : : ***指定URLへのリンクを埋め込む  外部アプリケーションをWindows経由でコントロールする「ShellAPI」関数群の中から、「ShellExecute」関数を使うと、指定URLを規定のブラウザで開いてくれる。~  最初に、pasファイルのuses節に、手入力で「ShellAPI」を追加する。後はボタンやラベルをクリックしたときのイベントに、指定URLを呼び出すShellExecute関数を設定すればOK。 : : uses Windows, ‥‥, ShellAPI; : : procedure TForm1.Label1Click(Sender: TObject); begin // ShellExecute(Handle, 'OPEN', 'http://www39.atwiki.jp/kgh07155/', '', '', SW_SHOWNORMAL); // ShellExecute(NULL, 'OPEN', 'http://www39.atwiki.jp/kgh07155/', NULL, NULL, SW_SHOWNORMAL); //どちらの書式でもOK。引数の'OPEN'とURL、SW_SHOWNORMALがポイント。 ShellExecute(Handle, 'OPEN', PChar(TLabel(Sender).Caption), '', '', SW_SHOWNORMAL); // URLとして指定する文字列はPChar型のみ有効。PChar(String)のように型変換すると良い。 // この例の場合、Labelに表示された文字列を引数として適宜実行する。 // つまりLabelの文字列がURLなら、自動でブラウザを起動し指定URLを呼び出す。 end; : :  ShellExecute関数の使い方は他にもいろいろあるが、ここでは省略。 ***Aboutフォーム表示 ヴァージョン情報や作者URLなどを表示する「Aboutフォーム」を表示させる方法。 +Aboutフォームを作成。 +Aboutフォームにフォーム閉じ用のButtonオブジェクトを置き、ModalResultプロパティを mrOK に設定。 --フォームを閉じるためのボタンイベントは不要。 Button.ModalResult := mrOK; // 変更の必要はないので、オブジェクト インスペクタで設定して構わない。 // ボタンが押されたことが分かれば良いので、mrNone 以外なら何でも良い。 +メインフォームにAboutフォームを呼び出すイベントを追加。 procedure TMain.ViewAboutBox(Sender: TObject); begin AboutBox.ShowModal; // AboutBoxは、呼び出すフォーム名。この場合、表示させたいAboutフォーム。 // ShowModalは、フォームをダイアログ表示させるメソッド。ボタンを押すとフォームを閉じ、 // 押されたボタンのModalResult(mrNone以外)を返し値にするので、 // 特にボタンイベントを設定しなくても良い。 end; ***DialogのOKかCancelかで処理を分ける デフォルトで準備されているDialogの場合、Executeメソッド(型はBoolean)で判定可能。 if OpenDialog.Execute then Memo1.Lines.LoadFromFile(OpenDialog1.FileName); 自前でDialogFormを作成する場合、設置したボタンにModalResultプロパティを設定し、DialogFormのModalResultプロパティの値(型はInteger)で判定(FormのModalResultプロパティは、押されたボタンのModalResultの値になる)。&br(); ModalResultの値はTModalResult型を参照。 DialogForm.Button1.ModalResult := mrYes; DialogForm.Button2.ModalResult := mrNo; if DialogForm.ModalResult := mrYes then Memo1.Lines.LoadFromFile(DialogForm.FileName); ***複数行の文字列を一行化する TStringList, TMemo, TRichEditで、複数の文字列を一行化する方法。 Sample := TStringList.Create; Sample.Add('Line0'); Sample.Add('Line 1'); Sample.Add('Line,2'); Sample.Add('Line"3'); : -Textプロパティを使う。&br();改行コード(#13#10)を区切りに一行化する。&br();Sample.Text = 'Line0'#13#10'Line 1'#13#10'Line,2'#13#10'Line"3'#13#10…… -CommaTextプロパティを使う。&br();半角コンマ(,)を区切りに一行化する。行に半角コンマ(,)や半角スペース( )が入った場合は半角ダブルクォーテーション(")で行を囲み、行に半角ダブルクォーテーション(")が入る場合は半角ダブルクォーテーションを二重にする。&br();Sample.CommaText = Line0,"Line 1","Line,2","Line""3",…… -DelimitedTextプロパティを使う。&br();CommaTextの区切り文字(,)や囲み文字(")の変更可能版。区切り文字はDelimiterプロパティで、囲み文字はQuoteCharプロパティで指定する。デフォルトではCommaTextと同じ。 ***複数行テキストエディタで、手動でカーソルを最下行へ移動 TMemo, TRichEditで、自動でカーソルが最下行へ移動しないときに、手動で移動させる方法。 Memo1.SelStart := Length(Memo1.Lines.Text);//キャレット位置を最後に Memo1.Perform(EM_SCROLLCARET, 0, 0); //キャレット位置までスクロール ***RichEditで文字列の書式を部分的に変えたい  [[こちらのページ>Tips - Delphi RichEditの文字装飾をプログラム制御]]を参照。

表示オプション

横に並べて表示:
変化行の前後のみ表示: