|
DelphiXE3 [FMX] 簡易テキストエディタ 2014/08/19 |
前回は簡易な画像ビューワー・アプリケーションを作ってみました。今回は簡易なテキストエディタ・アプリケーションを作ってみます。
はい、ご想像通り、メモ(Memo)コンポーネントを利用するだけです。
・メモ(Memo)
DelphiXE3・FireMonkey(FMX)には、リッチエディット・コンポーネントは存在しないようです。ですので、このメモ・コンポーネントを利用する機会は多くなるのやもしれません。
しかし、VCLのメモ・コンポーネントと少し挙動が違っています。まずは、反応速度が VCL と比較して、鈍い。キー操作をしているのに反応してくれない事が多々あります。そのほか、多少気になる事も・・・。
まずは、下記のように画面デザインします。
かなり単純なパターンです。
ツールバー等は付けていませんが、必要ならば付けてみて下さい。その際、アクションリストを利用するとプログラムコードを書く量が少なくなるかもしれないので有効ではないかと思います。
デザインしたフォーム上にメニュー項目が出ませんから、作業上、多少不便だなぁと思ってしまいます。
取り敢えずこれだけしか実装していませんが、
検索や置換等の機能が必要であれば、実装してみるのも良いと思います。ただし、VCL にあった検索画面 FindDialog や置換画面 ReplaceDialog は存在しないようです。勿論、検索メソッド、置換メソッド、そのものも無いですから、それに相当する機能をプログラミングする必要はあると思われます。
// [ファイル] - [新規作成]
procedure TForm1.MenuItem2Click(Sender: TObject);
begin
if (MessageDlg('新規作成を行います。現在の文章は破棄されます。'
+ 'よろしいですか?', TMsgDlgType.mtConfirmation,
[TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0) = mrYes) then begin
Memo1.SelLength:= 0;
Memo1.SelStart := 0;
Memo1.Lines.Clear;
end;
end;
// [ファイル] - [開く]
procedure TForm1.MenuItem3Click(Sender: TObject);
var
f : string;
begin
OpenDialog1.InitialDir := ExtractFilePath(FName);
OpenDialog1.FileName := ExtractFileName(FName);
if (OpenDialog1.Execute) then begin
f := OpenDialog1.FileName;
if (FileExists(f)) then begin
Memo1.SelLength:= 0;
Memo1.SelStart := 0;
Memo1.Lines.Clear;
try
Memo1.Lines.LoadFromFile(f);
FName := f;
finally
;
end;
end;
end;
end;
// [ファイル] - [名前をつけて保存]
procedure TForm1.MenuItem4Click(Sender: TObject);
var
f : string;
begin
SaveDialog1.InitialDir := ExtractFilePath(FName);
SaveDialog1.FileName := ExtractFileName(FName);
if (SaveDialog1.Execute) then begin
f := SaveDialog1.FileName;
try
Memo1.Lines.SaveToFile(f,TEncoding.UTF8);
FName := f;
finally
;
end;
end;
end;
// [ファイル] - [終了]
procedure TForm1.MenuItem5Click(Sender: TObject);
begin
close;
end; |
まず、開く画面 OpenDialog、保存画面 SaveDialog のファイルの種類の指定というのは、MacOSX には、ありません。ありませんのでここでは何も追加記入していません。 通常ならば、「テキストファイル(*.txt)」のように行うべきところですが。また、デフォルト拡張子 DefaultExt プロパティは「txt」と指定していますが、MacOSX では無効化されています。
拡張子を何も指定していない場合は「〜〜.txt」にしたい、という事ならば、プログラミングでそのようにしっかりと記述しないといけないようです。ここでは何もしていませんけれども。
テキストファイル保存時は、UTF8 エンコーディングを行うようにしています。
次に編集メニューです。
// [編集] - [元に戻す]
procedure TForm1.MenuItem7Click(Sender: TObject);
begin
try
Memo1.UnDo;
except
;
end;
// アンドゥをすると、Memoコンポーネントが
// 異常動作をします
end;
// [編集] - [切り取り(カット)]
procedure TForm1.MenuItem9Click(Sender: TObject);
begin
try
Memo1.CutToClipboard;
except
;
end;
end;
// [編集] - [コピー]
procedure TForm1.MenuItem10Click(Sender: TObject);
begin
try
Memo1.CopyToClipboard;
except
;
end;
end;
// [編集] - [貼り付け(ペースト)]
procedure TForm1.MenuItem11Click(Sender: TObject);
var
i,j : integer;
begin
i := Memo1.SelStart;
j := Length(Memo1.Text);
try
Memo1.PasteFromClipboard;
j := Length(Memo1.Text) - j;
Memo1.SelStart := i + j;
except
;
end;
end;
// [編集] - [削除]
procedure TForm1.MenuItem12Click(Sender: TObject);
begin
try
Memo1.DeleteSelection;
except
;
end;
end; |
標準のメソッドをそのまま使っているのがほとんどです。
やり直し(アンドゥ)は、Windowsアプリケーションの場合、実行しないほうが無難のようです。意味不明なエラーが発生したりします。異常です。
クリップボード経由での、貼り付け(ペースト)時、メモ帳のように、カーソルが貼り付いた文字の後ろに行くのではなく、元の位置で止まってしまっています。上記では、簡易補正を行なっていますが、完全ではありません。行末を含む場合、少し変な動作をします。ちゃんとしたい場合には、Memoコンポーネントの PosToTextPos、TextPosToPos メソッド等を利用するのかもしれませんがここでは行なっていません。
保存・コンパイル(ビルド)・実行を行うと、下図のようになります。
MacOSX の場合、(X)閉じるボタンで終了しようとすると、
「終了します。よろしいですか?」画面が 2回出てしまいます。
メニューの終了では出ません。
原因究明は行なっておりませんので不明です。
アイコンは、DelphiXE3 の提供するアイコンをそのまま使っています。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Dehi入門編
>Delphi2010
>DelphiXE3
▲2014/08/14
2014/08/19
▼[次ページ]
シェアウェア
Script!World
データベース
|