Difference between revisions of "TMemo/ja"
(Created page with "{{TMemo}} {{ Japanese Menu }} A '''TMemo''' image:tmemo.png is a control with multiple lines of editable text. It is available from the [[Standard tab/ja|Standardタブ]...") |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 3: | Line 3: | ||
{{ Japanese Menu }} | {{ Japanese Menu }} | ||
− | + | '''TMemo''' [[image:tmemo.png]]は複数行を編集できるコントロールである。[[Component Palette/ja|コンポーネントパレット]]タブの[[Standard tab/ja|Standardタブ]]から利用できる。 | |
− | == | + | ==使い方== |
− | + | TMemoを用いるには[[TForm|form]]の''Standard''コンポーネントパレットで選択しフォーム上でクリックすればよい。このテキストボックスで実行時に複数行のテキストを編集できる。 | |
− | + | 例えば、フォーム、''Form1''へTMemo ''Memo1''を加えると[[String]]に'''<code>Memo1.Text:='これは1行のテキストです';</code>'''と割り当てることができる。 | |
− | + | また、'''<code>myString:=Memo1.Text;</code>'''として、保存されたテキスト''Memo1''をソースの中のどこでも使うことができる。 | |
− | + | 複数行のテキスト、'''<code>Memo1.Text:=' これは '+LineEnding+' 複数行の '+LineEnding+' テキスト '+LineEnding+' です ';</code>'''を割り当てることも可能である。 | |
− | </code>''' | ||
− | === | + | ===TStringsもしくはTStringListを割り当てる=== |
− | + | 通常、TMemoにテキストを割り当てるには、[[TStringList-TStrings Tutorial|TStringList]]、もしくはその親の[[TStringList-TStrings Tutorial|TStrings]]を利用する。以下の例([[TForm|form]] ''Form1''とTMemo ''Memo1''を用いて挿入された[[TButton/ja|TButton]] ''Button1''イベントハンドラで)はこれを示している: | |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
Line 23: | Line 22: | ||
myStringList: TStringList; | myStringList: TStringList; | ||
begin | begin | ||
− | myStringList:=TStringList.Create; // | + | myStringList:=TStringList.Create; //StringListを作る |
− | myStringList.Add('This is the first line.'); // | + | myStringList.Add('This is the first line.'); //1行加える |
myStringList.Add('This is the second line.'); | myStringList.Add('This is the second line.'); | ||
myStringList.Add('This is the third line.'); | myStringList.Add('This is the third line.'); | ||
myStringList.Add('etc.'); | myStringList.Add('etc.'); | ||
− | Memo1.Lines.Assign(myStringList); // | + | Memo1.Lines.Assign(myStringList); //テキスト内容を割り当てる |
− | myStringList.Free; // | + | myStringList.Free; //StringListを解放 |
end; | end; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | === | + | ===直接行を挿入する=== |
− | + | この例ようにメモの内容を直接加えることもできる: | |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
procedure TForm1.Button1Click(Sender: TObject); | procedure TForm1.Button1Click(Sender: TObject); | ||
begin | begin | ||
− | Memo1.Lines.Clear; // | + | Memo1.Lines.Clear; //Memo1のすべての行を削除 |
− | Memo1.Lines.Add('This is the first line.'); // | + | Memo1.Lines.Add('This is the first line.'); //1行加える。 |
Memo1.Lines.Add('This is the second line.'); | Memo1.Lines.Add('This is the second line.'); | ||
Memo1.Lines.Add('This is the third line.'); | Memo1.Lines.Add('This is the third line.'); | ||
Line 47: | Line 46: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | === | + | ===行を読む=== |
− | + | 特定の行に何が入っているがを知りたい場合には、直接'''<code>myString:=Memo1.Lines[Index];</code>'''で調べることができる。注意、''TMemo.Lines''はゼロから始まっている。即ち、最初の行は: '''<code>myString:=Memo1.Lines[0];</code>'''となる。 | |
− | + | 続く例はさらにTButton ''Button2''を加えて、以下のように3つ目の行を表示している: | |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
Line 59: | Line 58: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | === | + | ===テキストを選択する=== |
− | + | テキスト部分をマウスの左ボタンを押し続けるか、[Shift]キーを押すことで、マウスやキーボードでテキストを選択することができる。このテキスト[[String]]をこのように表示することができる: | |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
Line 69: | Line 68: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | === | + | ===テキストを検索する=== |
− | + | 以上の例とは対照的に、TMemoにある([[String]])を探し、その場所を返すこともできる: '''<code>Position:=Memo1.SelStart;</code>''' | |
− | + | 以下の例ではmemoのなかにあるテキストを探し、さらに探している: | |
− | * | + | * [[TEdit]] ''Edit1''、TMemo ''Memo1''、[[TButton/ja|TButton]] ''Button1'' と ''Button2''を持つ新しいアプリケーションを作る。 |
− | * | + | * Uses節に '''LCLProc''' と '''strutils''' を加える。 |
− | * | + | * [[TMemo#Insert lines directly|Insert lines directly]]例のように、''Button1''の''OnClick''イベントを何らかのテキストで埋める |
− | * | + | * ソーステキストエディタで以下の関数を(ドイツのLazarusフォーラム [http://www.lazarusforum.de/viewtopic.php?p=39260#p39260]に基づく)入力する: |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
− | // FindInMemo: | + | // FindInMemo: 探す文字列が見つかった場所を返す |
function FindInMemo(AMemo: TMemo; AString: String; StartPos: Integer): Integer; | function FindInMemo(AMemo: TMemo; AString: String; StartPos: Integer): Integer; | ||
begin | begin | ||
Line 93: | Line 92: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | * | + | * ここで、''Button2''のイベントハンドラで''OnClick''に以下のコードを加える: |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
procedure TForm1.Button2Click(Sender: TObject); | procedure TForm1.Button2Click(Sender: TObject); | ||
const | const | ||
− | SearchStr: String = ''; // | + | SearchStr: String = ''; // 探す文字列 |
− | SearchStart: Integer = 0; // | + | SearchStart: Integer = 0; // 探す文字列の最後の場所 |
begin | begin | ||
if SearchStr <> Edit1.Text then begin // Falls sich der zu suchende String geändert hat | if SearchStr <> Edit1.Text then begin // Falls sich der zu suchende String geändert hat | ||
Line 113: | Line 112: | ||
end; | end; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | * | + | * 実行時に''Button1''でmemoを埋め、''Edit1''に探されるべきテキストを入れ、''Button2''でそれらを探す、探し続けることができる。 |
==== EM_SCROLLCARET ==== | ==== EM_SCROLLCARET ==== | ||
− | + | Windowsで用いられているように EM_SCROLLCARET のようなメッセージはLazarusでは使えないので、別法が必要である... | |
− | === | + | ===保存と読み込み=== |
− | + | 全く簡単に、[[TStringList-TStrings Tutorial|TStrings]]クラスのメソッド、''SaveToFile''と''LoadFromFile''を用いて、memoの内容を保存、読み込みできる。 | |
− | + | 以下の例でどのようにするかを示す: | |
− | * | + | * TMemo ''Memo1''と3つのボタン、[[TButton/ja|TButton]] ''Button1''、''Button2''、''Button3''を持つ新しいアプリケーションを作る。 |
− | * | + | * さらに、コンポーネントパレット''Dialogs''から[[TSaveDialog]]と[[TOpenDialog]]をとり、フォームに置く。 |
− | * | + | * ''Button1''のキャプション「メモを記入」へ変える。 |
− | * | + | * ''Button1''の''OnClick''イベントハンドラで、[[TMemo#Insert lines directly|Insert lines directly]]の例にあるように、何かのテキストで、memoを埋める。 |
− | * | + | * ''Button2''のキャプションを「メモを保存」と変える。 |
− | * | + | * ''Button3''のキャプションを「メモを開く」と変える。 |
− | * | + | * これで、ボタンの''OnClick''イベントハンドラを変更できる。 |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
Line 145: | Line 144: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == | + | ==以下も参照のこと== |
* [[doc:lcl/stdctrls/tmemo.html|TMemo doc]] | * [[doc:lcl/stdctrls/tmemo.html|TMemo doc]] | ||
* [[RichMemo|TRichMemo]] - Like Delphi TRichEdit component: formatted text (color, size, etc.) | * [[RichMemo|TRichMemo]] - Like Delphi TRichEdit component: formatted text (color, size, etc.) | ||
* [[TListBox]] - A scrollable list of strings | * [[TListBox]] - A scrollable list of strings | ||
− | {{LCL Components}} | + | {{LCL Components/ja}} |
Latest revision as of 06:49, 20 March 2024
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
日本語 (ja) │
русский (ru) │
TMemo は複数行を編集できるコントロールである。コンポーネントパレットタブのStandardタブから利用できる。
使い方
TMemoを用いるにはformのStandardコンポーネントパレットで選択しフォーム上でクリックすればよい。このテキストボックスで実行時に複数行のテキストを編集できる。
例えば、フォーム、Form1へTMemo Memo1を加えるとStringにMemo1.Text:='これは1行のテキストです';
と割り当てることができる。
また、myString:=Memo1.Text;
として、保存されたテキストMemo1をソースの中のどこでも使うことができる。
複数行のテキスト、Memo1.Text:=' これは '+LineEnding+' 複数行の '+LineEnding+' テキスト '+LineEnding+' です ';
を割り当てることも可能である。
TStringsもしくはTStringListを割り当てる
通常、TMemoにテキストを割り当てるには、TStringList、もしくはその親のTStringsを利用する。以下の例(form Form1とTMemo Memo1を用いて挿入されたTButton Button1イベントハンドラで)はこれを示している:
procedure TForm1.Button1Click(Sender: TObject);
var
myStringList: TStringList;
begin
myStringList:=TStringList.Create; //StringListを作る
myStringList.Add('This is the first line.'); //1行加える
myStringList.Add('This is the second line.');
myStringList.Add('This is the third line.');
myStringList.Add('etc.');
Memo1.Lines.Assign(myStringList); //テキスト内容を割り当てる
myStringList.Free; //StringListを解放
end;
直接行を挿入する
この例ようにメモの内容を直接加えることもできる:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear; //Memo1のすべての行を削除
Memo1.Lines.Add('This is the first line.'); //1行加える。
Memo1.Lines.Add('This is the second line.');
Memo1.Lines.Add('This is the third line.');
Memo1.Lines.Add('etc.');
end;
行を読む
特定の行に何が入っているがを知りたい場合には、直接myString:=Memo1.Lines[Index];
で調べることができる。注意、TMemo.Linesはゼロから始まっている。即ち、最初の行は: myString:=Memo1.Lines[0];
となる。
続く例はさらにTButton Button2を加えて、以下のように3つ目の行を表示している:
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(Memo1.Lines[2]);
end;
テキストを選択する
テキスト部分をマウスの左ボタンを押し続けるか、[Shift]キーを押すことで、マウスやキーボードでテキストを選択することができる。このテキストStringをこのように表示することができる:
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(Memo1.SelText);
end;
テキストを検索する
以上の例とは対照的に、TMemoにある(String)を探し、その場所を返すこともできる: Position:=Memo1.SelStart;
以下の例ではmemoのなかにあるテキストを探し、さらに探している:
- TEdit Edit1、TMemo Memo1、TButton Button1 と Button2を持つ新しいアプリケーションを作る。
- Uses節に LCLProc と strutils を加える。
- Insert lines directly例のように、Button1のOnClickイベントを何らかのテキストで埋める
- ソーステキストエディタで以下の関数を(ドイツのLazarusフォーラム [1]に基づく)入力する:
// FindInMemo: 探す文字列が見つかった場所を返す
function FindInMemo(AMemo: TMemo; AString: String; StartPos: Integer): Integer;
begin
Result := PosEx(AString, AMemo.Text, StartPos);
if Result > 0 then
begin
AMemo.SelStart := UTF8Length(PChar(AMemo.Text), Result - 1);
AMemo.SelLength := Length(AString);
AMemo.SetFocus;
end;
end;
- ここで、Button2のイベントハンドラでOnClickに以下のコードを加える:
procedure TForm1.Button2Click(Sender: TObject);
const
SearchStr: String = ''; // 探す文字列
SearchStart: Integer = 0; // 探す文字列の最後の場所
begin
if SearchStr <> Edit1.Text then begin // Falls sich der zu suchende String geändert hat
SearchStart := 0;
SearchStr := Edit1.Text;
end;
SearchStart := FindInMemo(Memo1, SearchStr, SearchStart + 1);
if SearchStart > 0 then
Caption := 'Found at position['+IntToStr(SearchStart)+']!'
else
Caption := 'No further finds!';
end;
- 実行時にButton1でmemoを埋め、Edit1に探されるべきテキストを入れ、Button2でそれらを探す、探し続けることができる。
EM_SCROLLCARET
Windowsで用いられているように EM_SCROLLCARET のようなメッセージはLazarusでは使えないので、別法が必要である...
保存と読み込み
全く簡単に、TStringsクラスのメソッド、SaveToFileとLoadFromFileを用いて、memoの内容を保存、読み込みできる。
以下の例でどのようにするかを示す:
- TMemo Memo1と3つのボタン、TButton Button1、Button2、Button3を持つ新しいアプリケーションを作る。
- さらに、コンポーネントパレットDialogsからTSaveDialogとTOpenDialogをとり、フォームに置く。
- Button1のキャプション「メモを記入」へ変える。
- Button1のOnClickイベントハンドラで、Insert lines directlyの例にあるように、何かのテキストで、memoを埋める。
- Button2のキャプションを「メモを保存」と変える。
- Button3のキャプションを「メモを開く」と変える。
- これで、ボタンのOnClickイベントハンドラを変更できる。
procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
以下も参照のこと
- TMemo doc
- TRichMemo - Like Delphi TRichEdit component: formatted text (color, size, etc.)
- TListBox - A scrollable list of strings