kr_ryo 徒然日誌 <2002年9月1日分>

やっとでけたメルベース…Delphi学習記その5

はあぁーーーーっ!めっちゃ苦労した!(´O`)なんとか1週間遅れででけましたぜ、名付けて「メルベース」!!

これができるまでひたすらDelphiのヘルプをさまよう1週間でした。ひたすらさまよった理由、それは「検索」!くそ〜なんでこれがでけへんねん!!(▼ヘ▼メ)

テキストエディタやらMS−Wordやらのワープロソフトをお持ちの方は、「検索」を使ったことが一度はあるでしょう。ご覧のインターネットブラウザにもついているはずです。先週来、電子メール(だけではないですが)のうち、ある単語からある単語の間の文字列を取得するプログラムを作成していましたが、ついでに普通のテキストエディタとしての機能を持たせようとしたのが運の尽き、単機能プログラムにしておけばいいのに、検索やらカット&ペーストやらの機能をもたせようと欲張ったため、異常に苦労しました(T-T)

まず、Delphiにはダイアログボックスという備え付きの機能があります。セーブダイアログボックスをアプリケーションの土台になるフォームにドラッグ&ドロップするだけで、よくある「ファイルの保存ダイアログ」機能が手軽に便利に使えます。このダイアログボックスのうち、「検索ダイアログボックス」と「置換ダイアログボックス」がくせ者。

インターネットエクスプローラをお使いの方はCtrlキーと同時に「F」キーを押してみてください。でてきたダイアログ、これが「検索ダイアログボックス」で出てくる「ダイアログ」と同じものです。ここまではよかった。

ファイルを開いたり、保存したりする機能・命令はDelphiの場合、何種類かあるんですが、別段取扱いが異常に難しいわけでもなく、それこそ一番簡単な場合、

変数.Loadfromfile(ファイル名);

というだけでファイルの中身を扱えたりします。こいつぁ便利だ!

ところが「検索ダイアログボックス」の場合、先程だして頂いた「検索」ダイアログだけが出てくるだけで、実際の検索命令や置換命令は、なんと自分で作らないといけない!!どう作ればいいんや…と途方に暮れずとも、頼もしいヘルプに例が載っています。それを使いましょう!

…うまいこと動かへんで…

…いや、ちゃんと検索対象文字が反転しているじゃないですか?

…ファイルの下の方の文字がヒットした場合って、普通画面がスクロールせんか??…

……そ、そうですねぇ(--;)

そうです、確かにヘルプの参考文だと、検索にヒットした文字は反転し見つかったこととなるんですが、長いファイルなどで下の方で見つかった場合、そこまでスクロールしないといけません。

そんな検索あっか〜!!!(▼ヘ▼メ)

…ということで一番甘いはずの制作者が切れるくらいの検索機能、目の肥えた皆様方に「検索機能もついてます!」とはよういえまへん。これはなんとかせねば…

最初思いついたのが、検索にヒットして選択状態のときに、カーソルキーを押すとその位置まで画面がスクロールすることの応用です。残念なことにそうすると選択状態が解除されるため、どこがヒットしたのかぱっとわからないという欠点があります。それでもスクロールしないよりましじゃ!と、その手の内容をヘルプから探そうと三千里の旅に出たのでした…

今日は「画面 移動」明日は「カーソル 移動」〜明後日は「スクロール 検索」〜三千里の旅は続きます。Windows2000以降には「テキスト検索」という便利な機能がついています。ヘルプの意味のある文言をデータベース化して、ヒットしやすくしようとする機能です。このデータベースの範囲を最大にして探すこと…う、見つからん!実は先週からずっと探していまして、先週アップロードできなかったのもこのせいです(;_;)

検索機能を検索で探すというのもあれですが、Delphiのプログラム用エディタの豊富な検索機能がヒットするのもかなりくるものがあります(`´)更新目指してひたすら検索です。う〜ん見つからん。

いい加減サイト更新も間に合わせねばなりません。今週も見送りか…??

いや、今週アップしよう、必殺「虱潰し!!」虱をつぶした経験はないですが、とにかく手あたり次第にヘルプをめくってみよう…「Perform」?「…ウィンドウズメッセージを受け取ったように対応します」??例があるな〜「…書式付き編集コントロール内のキャレットをスクロールして表示します…」???これちゃうん??!!\(´▽`)/

たった一行、

RichEdit1.Perform(EM_SCROLLCARET, 0, 0);

と書けば、現在のカーソル(キャレット)の位置に画面がスクロールします。やった、でけたーーーーー(^○^)しかし、、、、こんなもん見つけられるかい!!!

確かに「カーソル」では「マウスカーソル」の話題ばかりでていたので違うと思っていましたし、「キャレット」は他の話題から知っていたとはいえ、見過ごしていました。けれどもこんな部分、検索の参考例文につけといてよ〜(T-T)

ということでもっとも時間のかかった検索結果による画面スクロールがなんとか無事終了しました。これではや夕方。

後は置換。なぜか置換の参考例文と検索の参考例文の表現方法が異なり、当初は置換の参考文の方が動きが安定しているような気がしたんですけども、

…これって、置換したくない文字まで置換し続けるんとちゃうん??

そうです、よくよく試してみると、置換対象の文字を、常に文の最初から探しているため、この部分は置換し、この部分は見逃そう、というような柔軟な対応にはならないのです。い、意外と使えない参考例文…(-o-;)

置換にも、置換して次へ、というのと、全部置換、という違いがあります。この表現もなかなかやっかい…

と、思っていましたが、例の画面スクロールをクリアした余波で、割とあっさりクリア。全くその機能がない?という状態と、とりあえず表現を工夫しよう、というのとでは全然違いますね。

ついでに結構よく使うファイルの最初に移動、と、ファイルの最後に移動、という機能もつけてみました。Delphiでは、プログラム的にカーソルを移動できないのではないか??とどきどきしていたんですけども、ヘルプのわかりにくい解説のおかげで、Selstartとやらのプロパティで実は移動できることをようやく理解しました。これとさっきのスクロール命令のたった2行でこの機能が可能になります。

さらにさらに、クリップボード系命令、たとえばカットやらペーストやらは、命令が用意されているため、1行でクリア。もとに戻す、までつけてみました(^^;

ようやく機能を実装したものの、バグチェックもあります。制作者が予期しない動作というのがバグの原因になりやすいんですが、制作者が予期しない動作をさせるのも私が得意とするところでして(^^;、とりあえず新しいソフトを試すときも全部の機能をいじくってちゃんと動くか試してみてます。今回は通常の私のチェックによるところの、「文字やディレクトリを指定せずにデータ収集を実行」や「何もせずにダイアログを閉じる」といった動作がエラーにつながったため、直してみましたが…主機能の「データ収集」がどれだけエラーを出さないか、やや心配です。もしエラーがでたり、もうちょっとここらへんを直して、とか、これがこれこれの内容の機能がほしい、といったご意見は日々学習中の私のDelphiレベルに応じて対応していきたいと思います。ぜひ、ちょろっとダウンロードして使ってみてくだされ。。。m(__)m

メルベースのダウンロードページへ

index

〔TopPage〕

このページへのリンクはフリーです。
このページについてのご意見、ご質問などは、kr_ryo_green@yahoo.co.jpまでお願いします。
Copyright 2001-2002© kr_ryo All rights reserved.
訪問件数