AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
Delphi2010 メモ(Memo) 2010/08/19
 
前頁で[Standard]内の「Edit」(エディット)について書きましたので次に、同じく[Standard]内の「Memo」(メモ)について見てみます。メモは Delphi6 にもあります。

 
メモは Windowsの「メモ帳」のように、簡易の文章を作成・編集・表示する際に利用します。途中で文字の大きさや色などを変更したりする事は出来ませんが、比較的簡単に「メモ帳」のようなプログラムを作ることが出来ます。
それでは配置してみます。1つ目なので Nameプロパティは「Memo1」となり、Linesプロパティも「Memo1」となります。

メモ内容は、TStrings型のLinesプロパティとなっており、デザイン時にも編集出来ますが、プログラムコードでは、String型のLines[0](1行目)、Lines[1](2行目)、Lines[2](3行目)・・・として別々にアクセスすることが出来ます(※存在しないものにはアクセスできません)。String型を複数持っているから「TStrings」な訳ですね。全ての行を合わせて1つの文字列として扱う場合は Textプロパティとして扱えます。メモに文字列を加える場合は、Memo1.Lines.Add('〜〜')、途中に文字列を挿入する場合は、Memo1.Lines.Insert(〜)、文字の行を消す場合は、Memo1.Lines.Delete(〜)、行数を知りたい場合は、Memo1.Lines.Count で分かります。
 
<オブジェクトインスペクタ>でプロパティを見てみます・・・
別段、気になるようなプロパティは無いようです。
そういえばイベント頁を余り見ていませんでしたので、イベント頁を見てみると
OnMouseActivate 親フォームがアクティブでないときに,ユーザーがマウスポインタをコントロール上に置いてマウスボタンを押したときに発生します。
親のトップレベルフォームがアクティブでないときにコントロール上でマウスボタンが押された結果として行う特別な処理を実装するには,OnMouseActivate イベントハンドラを使用します。
OnMouseEnter ユーザーがコントロール上にマウスを移動したときに発生します。
親のトップレベルフォームがアクティブでないときにコントロールにマウスを移動した結果として行う特別な処理を実装するには,OnMouseEnter イベントハンドラを使用します。
OnMouseLeave ユーザーがマウスをコントロール外に移動したときに発生します。
親のトップレベルフォームがアクティブでないときにマウスがコントロール外に移動したときに行う特別な処理を実装するには,OnMouseLeave イベントハンドラを使用します。
(※Delphi2010のヘルプより)
 
とあります。メモコンポーネントだけではなく他のコンポーネントにもあります。説明を見ると、なるほど、って感じですね。試しに、それぞれのイベントハンドラで例えばメモに文字列を追加するようなコードを書いてみると挙動はすぐに分かりますね。ホームページでのJavaScriptで画像の上にマウスを移動しただけでメッセージを表示させるとかありますが、そんな感じな事が出来ますね。
 
さて、気になるのはやはり、Unicode対応、でしょうか。
 
[Dialogs]内の「SaveDialog」を配置します。



 
メモをダブルクリックしたらその文章を保存するようにしてみます。
procedure TForm1.Memo1DblClick(Sender: TObject);
var
 fn : string ;
begin
 if (SaveDialog1.Execute) then begin
  fn := SaveDialog1.FileName ;
  try
   Memo1.Lines.SaveToFile(fn);
  except
   ;
  end;
 end;
end;
保存・コンパイル(再構築)をして実行し、Unicode文字を使ってテキトウに文字を書いてダブルクリックして保存してみます。



 
これをUnicodeに対応したテキストエディタで開いてみます。無ければメモ帳でも構いません(※古いバージョンのWindowsのメモ帳ではUnicodeに対応していないかもしれません)

というように、Unicode文字が「?」に文字化けしてしまいました。
 
プログラムコードを書き換えてみます。
procedure TForm1.Memo1DblClick(Sender: TObject);
var
 fn : string ;
begin
 if (SaveDialog1.Execute) then begin
  fn := SaveDialog1.FileName ;
  try
   Memo1.Lines.SaveToFile(fn,TEncoding.Unicode);
  except
   ;
  end;
 end;
end;
保存・コンパイル(再構築)をして実行し、Unicode文字を使ってテキトウに文字を書いてダブルクリックして保存してみます。

 
思惑通り、Unicode文字で保存できました。
SaveToFileメソッドの第2引数無し状態(デフォルト)での保存は、TEncoding.Default 指定=「ANSIコードでの保存」となってしまい、Unicode文字は「?」文字になってしまいます。ですのでこれをUnicodeとして保存したいので、TEncoding.Unicode の指定を行う、という感じです。そのほか、UTF7、UTF8、等もあるようです。しかし、String型のデフォルト状態が UnicodeStringであり、コンポーネントなどもUnicodeになっているのですから、この SaveToFile などのデフォルト状態も Unicodeになっていて構わないと個人的には思ってしまいます。
 
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
▲2010/08/18
 2010/08/19
▼2010/08/20
 
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.