くろねこのくるまはHonda の Fit 1.5Wだ。
買って約半年がたとうとしている...半年の間にも結構いろんなことがあって、最初は駐車場で駐車スペースに止めようとしてバックしてきた他の車に当てられた。次は、義理の弟の結婚式に山陽道を走ってたらいきなりフロントガラスにヒビが...
最近は、インターナビがつながらん & 車のドアが閉まらん
2025年5月 3日(土) 23:05 JST
くろねこのくるまはHonda の Fit 1.5Wだ。
買って約半年がたとうとしている...半年の間にも結構いろんなことがあって、最初は駐車場で駐車スペースに止めようとしてバックしてきた他の車に当てられた。次は、義理の弟の結婚式に山陽道を走ってたらいきなりフロントガラスにヒビが...
最近は、インターナビがつながらん & 車のドアが閉まらん
英語版 Delphi 2005 のUpdate2がでました。
更新内容を見ようとリリースノートを見たのですが、内容はCodeCentral参照と言うことで何も記載されていませんでした。仕方なく、CodeCentralを見たのですがどこに載ってるかわからない。
でも、日本語版のUpdate2が待ち遠しいですね。
今度はProfessionalだけ遅れてということはやめてほしいな...
Delphi 8 のGeneral Update3もでてますね。これもAvailable Englishになっているんですが...
□関連記事
ひらがなからカタカナに、カタカナからひらがなに変換したい時って無いですか?たとえば、フリガナ入力欄などにユーザがカタカナって書いてるのにひらがなで入力してくる人いませんか?そんなとき、変換関数があったら便利ですよね。
でも、結構こんな日本語の変換関数を作るのは骨が折れるもの、作ってもデバッグが大変。だったら、あるものを使う方が楽じゃない?標準で日本語変換してくれる関数を持った言語って...と考えると C 言語とかありますね。でも、C 言語は .Net Frramework には見あたらないです。C# にはそのような変換関数は無いようです。でも、Visual Basic には StrConv 関数がありますね。これを使いましょう。
今までだと、他の言語の機能を使うときは、その言語でその機能を呼び出す DLL を作って使っていたかもしれませんが、StrConv は .Net Framework で Microsoft.VisualBasic アセンブリとして、元々入っています。ということは、これを使っても配布の必要すらないということです。
これを呼び出すには、プロジェクトツリーの「参照先」を右クリックして、参照の追加で Microsoft.VisualBasic を追加します。これだけで、使う準備は完了です。
あとは、必要な場所で StrConvを呼び出すだけです。
edtKata.Text := Strings.StrConv(edtHira.Text, VbStrConv.Katakana);
edtHira.Text := Strings.StrConv(edtKata.Text, VbStrConv.Hiragana);
StrConv には、半角⇔全角変換などの機能があります。これらも同様の方法で使えるので、是非試してみてください。
アプリケーションの多重起動を防止したい場面は結構あるのではないでしょうか? 処理結果を特定のファイルに出力するケースなどがあった場合、複数のアプリケーションがその処理を行うと、最悪そのファイルが壊れるケースが出てきそうですし、ファイルが壊れなくても、内容が変になる危険性が高いと思います。 多重起動防止方法にはいくつか方法があると思いますが、ここではもっとも実装が一般的だと思われる Mutex を使った方法をご紹介します。
Mutex に付いての詳細は、@ITにわかりやすい解説があったのでそちらを参照してもらえれば、くろねこの下手な文章よりわかりやすいと思います。
ただ、@IT では Delphi のサンプルが無かったので、Delphi での多重起動防止についてサンプルを作ってみました。
Delphi で .Net 対応アプリを作るのは大きく分けて2とおりの方法があります。VCL.Net を使う方法と、 Windows Form を使用する方法です。VCL.Net で Mutex を実装する際にまた2とおりの方法に分かれます。2とおりの方法とは、VCL.Net (SyncObjs ユニット) にある TMutex クラスを使う方法と、.Net Framework (System.Threading) にある Mutex クラスを使う方法です。くろねこ的には、.Net Framework を使用する方が美しいかと思います。
半角文字と全角文字を区別する方法です。.Net環境ではDelphiもほかの言語と同じように Unicode になってしまったので、従来のような ByteType 関数による半角文字と全角文字の判定は行うことができません。
同じように、Win32 API のIsDBCSLeadByte などの API も使用できなくなっています。
(ここでは半角 = 1バイト文字、全角文字 = 2バイト以上の文字としています。2バイト半角文字もありますが、使用される頻度がほとんど無いため考慮の対象から除外しています。)
そこで、Unicodeの環境では、Shift-JIS(Windows環境ではコードページ932と定義されています)の形に変換してからチェックを行う必要があります。
以下は、エディットボックスに半角文字しか入力させないようにする例です。このコードを埋め込むには uses に System.Text を追加する必要があります。
procedure TForm5.Edit1KeyPress(Sender: TObject; var Key: Char); const VK_Z = 26; var nByteSize: Integer; begin if not (Ord(Key) in [VK_BACK, VK_RETURN, VK_Z]) then // 除外キー begin nByteSize := Encoding.GetEncoding(932).GetByteCount(String(Key)); if (nByteSize <> 1) then Key := #0; end; end;