Sign in Join
Wiki copytemporary

TMemo/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: TMemo/ru

OldNewLine
1+**TMemo** ![](/wiki-images/1/1b/Tmemo.png) является элементом управления с многострочным полем для редактирования текста. Данный компонент доступен на вкладке [[Standard tab/ru|Standard]] [[Component Palette/ru|палитры компонентов]].
2+
3+## Использование
4+
5+Для использования элемента **TMemo** на [[TForm/ru|форме]] вам необходимо просто выбрать его на вкладке *Standard* палитры компонентов и разместить на форме с помощью щелчка мыши. В данном текстовом поле вы можете редактировать многострочный текст во время выполнения программы.
6+
7+Например, если вы добавили элемент **TMemo** с именем *Memo1* на форму с именем *Form1*, то для того чтобы присвоить значение типа [[String/ru|String]] данному элементу, вы можете использовать такую инструкцию **`Memo1.Text := 'Это однострочный текст';`**.
8+
9+Также вы можете использовать текст из элемента с именем *Memo1* в любом месте исходного кода с помощью следующей инструкции **`myString := Memo1.Text;`**.
10+
11+Кроме того можно присвоить многострочный текст элементу с именем *Memo1* с помощью такой инструкции **`Memo1.Text:='This'+LineEnding+'is'+LineEnding+'a'+LineEnding+'multiline'+LineEnding+'text';`**.
12+
13+### Присваивание строк из TStrings или TStringList
14+
15+В общем, для присваивания текста элементу **TMemo** используется класс [[TStringList-TStrings Tutorial/ru|TStringList]] или его родительский класс - [[TStringList-TStrings Tutorial/ru|TStrings]]. Это показано в следующем примере (данный код располагается в обработчике события [[TButton/ru|кнопки]] с именем *Button1*, расположенной на [[TForm/ru|форме]] с именем *Form1*; также на форме должен быть расположен элемент **TMemo** с именем *Memo1*):
16+
17+``` pascal
18+procedure TForm1.Button1Click(Sender: TObject);
19+var
20+ myStringList: TStringList;
21+begin
22+ myStringList:=TStringList.Create; //создаем объект myStringList
23+ myStringList.Add('Это первая строка.'); //добавляем в него строки
24+ myStringList.Add('Это вторая строка.');
25+ myStringList.Add('Это третья строка.');
26+ myStringList.Add('и т.д.');
27+ Memo1.Lines.Assign(myStringList); //присваиваем текст элементу Memo1
28+ myStringList.Free; //уничтожаем объект myStringList
29+end;
30+```
31+
32+### Непосредственное добавление строк
33+
34+Вы можете непосредственно добавлять строки в элемент **TMemo**, как показано в следующем примере:
35+
36+``` pascal
37+procedure TForm1.Button1Click(Sender: TObject);
38+begin
39+ Memo1.Lines.Clear; //удалить все строки из элемента Memo1
40+ Memo1.Lines.Add('Это первая строка.'); //добавить строку
41+ Memo1.Lines.Add('Это вторая строка.');
42+ Memo1.Lines.Add('Это третья строка.');
43+ Memo1.Lines.Add('и т.д.');
44+end;
45+```
46+
47+### Чтение стоки
48+
49+Если вы хотите узнать, что содержится в определенной строке, вы можете непосредственно проверить это с помощью такой инструкции **`myString:=Memo1.Lines[Index];`**. Обратите внимание, что индексы строк в *TMemo.Lines* начинаются с 0, т.е. первая строка будет иметь индекс 0: **`myString:=Memo1.Lines[0];`**
50+
51+Добавьте ещё одну кнопку с именем *Button2* к предыдущему примеру для того, чтобы отобразить содержимое третьей строки, как показано в следующем примере:
52+
53+``` pascal
54+procedure TForm1.Button2Click(Sender: TObject);
55+begin
56+ ShowMessage(Memo1.Lines[2]);
57+end;
58+```
59+
60+### Выделенный текст
61+
62+Вы можете отметить часть текста в режиме выполнения программы с помощью левой кнопки мыши или удерживать клавишу \[Shift\] и выбрать текст с помощью мыши или стрелок на клавиатуре. Выделенный текст ([[String/ru|String]]) можно отобразить с помощью следующей инструкции:
63+
64+``` pascal
65+procedure TForm1.Button2Click(Sender: TObject);
66+begin
67+ ShowMessage(Memo1.SelText);
68+end;
69+```
70+
71+### Поиск текста
72+
73+В отличие от предыдущего примера вы также можете искать текст ([[String/ru|String]]) в элементе **TMemo** и определять место, где он находится: **`Position:=Memo1.SelStart;`**
74+
75+В следующем примере показано, как вы можете искать текст в элементе **TMemo**:
76+
77+- Создайте новое приложение со следующими элементами: [[TEdit/ru|TEdit]] с именем *Edit1*, **TMemo** с именем *Memo1* и две [[TButton/ru|кнопки]] с именами *Button1* и *Button2*.
78+- Добавьте в раздел [[Uses/ru|Uses]] строки **LCLProc**, **strutils** и **LazUTF8**.
79+- В обработчике события *OnClick* кнопки *Button1* заполните строки элемента *Memo1* любым текстом, как в примере [[TMemo/ru|Непосредственное добавление строк]].
80+- В редакторе исходного кода добавьте следующую функцию (основана на этом примере [1](http://www.lazarusforum.de/viewtopic.php?p=39260#p39260) с German Lazarusforum):
81+
82+``` pascal
83+// Функция FindInMemo: Возвращает позицию найденной строки
84+function FindInMemo(AMemo: TMemo; AString: String; StartPos: Integer): Integer;
85+begin
86+ Result := PosEx(AString, AMemo.Text, StartPos);
87+ if Result > 0 then
88+ begin
89+ AMemo.SelStart := UTF8Length(PChar(AMemo.Text), Result - 1);
90+ AMemo.SelLength := Length(AString);
91+ AMemo.SetFocus;
92+ end;
93+end;
94+```
95+
96+- Добавьте следующий код в обработчик события *OnClick* кнопки *Button2*:
97+
98+``` pascal
99+procedure TForm1.Button2Click(Sender: TObject);
100+const
101+ SearchStr: String = ''; // Строка, которую ищем
102+ SearchStart: Integer = 0; // Позиция, с которой начинаем искать строку
103+begin
104+ if SearchStr <> Edit1.Text then begin
105+ SearchStart := 0;
106+ SearchStr := Edit1.Text;
107+ end;
108+ SearchStart := FindInMemo(Memo1, SearchStr, SearchStart + 1);
109+
110+ if SearchStart > 0 then
111+ Caption := 'Найдена в позиции['+IntToStr(SearchStart)+']!'
112+ else
113+ Caption := 'Нет совпадений!';
114+end;
115+```
116+
117+- Теперь вы можете заполнить текстом элемент *Memo1* в режиме выполнения программы с помощью кнопки *Button1*, вставить текст, который нужно найти в элемент *Edit1* и найти его с помощью кнопки *Button2*.
118+
119+### Сохранение и загрузка текста
120+
121+Вы можете довольно легко сохранять и загружать содержимое в элемент **TMemo**, используя методы *SaveToFile* и *LoadFromFile* класса [[TStringList-TStrings Tutorial/ru|TStrings]].
122+
123+В следующем примере показано, как это можно сделать:
124+
125+- Создайте новое приложение со следующими элементами: **TMemo** с именем *Memo1* и три [[TButton/ru|кнопки]] с именами *Button1*, *Button2* и *Button3*.
126+- Дополнительно поместите на форму элементы [[TSaveDialog/ru|TSaveDialog]] и [[TOpenDialog/ru|TOpenDialog]], расположенные на вкладке *[[Dialogs tab/ru|Dialogs]]* палитры компонентов.
127+- Измените свойство *Caption* кнопки *Button1* на "Fill memo".
128+- В обработчике события *OnClick* кнопки *Button1* заполните элемент **TMemo** любым текстом, как в примере [[TMemo/ru|Непосредственное добавление строк]].
129+- Измените свойство *Caption* кнопки *Button2* на "Save memo".
130+- Измените свойство *Caption* кнопки *Button3* на "Load memo".
131+- Теперь отредактируйте обработчики событий *OnClick* кнопок *Button2* и *Button3*:
132+
133+``` pascal
134+procedure TForm1.Button2Click(Sender: TObject);
135+begin
136+ if SaveDialog1.Execute then
137+ Memo1.Lines.SaveToFile(SaveDialog1.FileName);
138+end;
139+
140+procedure TForm1.Button3Click(Sender: TObject);
141+begin
142+ if OpenDialog1.Execute then
143+ Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
144+end;
145+```
146+
147+## См. также
148+
149+- [[doc:lcl/stdctrls/tmemo.html|Документация по TMemo]]
150+- [[RichMemo/ru|TRichMemo]] - Delphi-подобный компонент TRichEdit: работа с форматированным текстом (изменение цвета текста, размера шрифта и т.д.)
151+- [[TListBox/ru|TListBox]] - Список строк с прокруткой
152+
153+---
154+*From the Free Pascal wiki, page "TMemo/ru", as it stood on 2020-03-01 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history