Політ: книга програмера  
0. Вступ
1. Особливості політівських програм
2. Події та їх обробники
3. Елементи керування: принципи, Button, Label, Check, Radio,
InpLine, PicCtl, Header, Progress, Track, TimerCtl, Notebook,
SpinEdit, PopupBtn, Switcher, MainMenu, Splitter, Memo, ListBox

Сайт Польоту
 

Елементи керування
Текстовий редактор - Memo (модуль Ctl2)

Політівський текстовий редактор є майже повним аналогом Windows'ного поля Memo. Він так само дозволяє показувати та редагувати багаторядкові тексти, виконувати операції з блоками (за допомогою контекстного меню або гарячих клавіш). Але є у нього одна приємна особливість - політівський Memo розуміє кодировки DOS, Win1251, KOI та навіть при завантаженні файла автоматично визначає його кодировку.

Так само, як і з полем вводу InpLine, сам по собі Memo є дуже складним елементом керування (розмір його коду лише трохи менше за розмір коду кернела), але працювати з Memo просто.




Створення редактора
Function Memo_Create(Prog:PProg; VKind:TMemoKind; 
  Enabled:Boolean; Hint:String): PControl;
VKind - тип (режим роботи) редактора: mkEditable - звичайний, mkReadOnly - лише для читання.



Малювання редактора
Procedure Memo_Paint(Me:PControl; 
  VX1,VY1,VX2,VY2:Integer);
VX1, VY1, VX2, VY2 - координати поля.



Очистити редактор
Procedure Memo_Clear(Me:PControl);


Встановити тип редактора
Procedure Memo_SetKind(Me:PControl; VKind:TMemoKind);
VKind - тип (режим роботи) редактора: mkEditable - звичайний, mkReadOnly - лише для читання.



Встановити шрифт редактора
Procedure Memo_SetFont(Me:PControl; VFont:Pointer);
VFont - вказівник на шрифт. Шрифт - це просто відповідний файл формату RAF, як є завантажений у пам'ять. Для завантаження шрифтів дуже зручно юзати функцію завантаження ресурса Kernel.LoadRes, про яку я буду розповідати потім.



Завантажити файл у редактор
Procedure Memo_LoadFile(Me:PControl; 
  FName:String; ToClear:Boolean);
  • FName - ім'я файла.
  • ToClear - флажок: чи очищувати редактор перед завантаженням файла. True - завантажений файл заміняє текст, що був у редакторі раніше; False - вставити файл у позицію курсора.


Зберегти текст у редакторі
Procedure Memo_SaveToFile(Me:PControl; FName:String;
  KeepWordWrap,SaveBAK,DoRecodeBack:Boolean);
  • FName - ім'я файла, в якому буде збережений текст.
  • KeepWordWrap - флажок, як розбивати текст на абзаци при збереженні: True - вставляти CR/LF (символ кінця абзаца) після рядків, на які текст зараз розбитий у вікні; False - вставляти CR/LF тільки в кінці абзаців. Рекомендую юзати False.
  • SaveBAK - флажок, чи зберігати резервну копію файла. True - попередня версія файла зберігається із розширенням BAK, False - не робити резервну копію.
  • DoRecodeBack - флажок, в якій кодировці зберігати файл: True - в якій він і був до завантаження, False - у кодировці DOS.


Взагалі-то найкращий приклад використання Memo - це політівський Записник, Notepad.pas. Там використовуються майже всі прийоми роботи з Memo і немає майже нічого зайвого. Хіба що робота з гарячими клавішами і вікном FileDlg, що вам теж в принципі не завадить. А можливо, я потім передумаю і все ж вигадаю окремий приклад...