Api і freebasic
API і FreeBasic. (RichEdit: основи)
Про контроль можна думати, як про функціонально-розширеному засобі редагування. Він забезпечує безліч корисних особливостей, яких немає в простих засобах редагування, наприклад, можливість використовувати безліч видів і розмірів шрифту, глибокий рівень скасування / відновлення, операцією пошуку по тексту, вбудовані OLE-об'єкти, підтримка редагування методом перетягування (drag-and-drop) , і т.д. Так як richedit контрол має так багато особливостей, він збережений в окремій DLL-бібліотеці. Це також означає що, щоб його використовувати, вам недостатньо просто викликати InitCommonControls. як в інших Common-контроль. Ви повинні викликати LoadLibrary. щоб завантажити richedit DLL.
Проблема полягає в тому, що в даний час є вже три версії richedit контрола. Версія 1,2, і 3. У таблиці нижче показані імена DLL для кожної версії.
Ім'я класу Richedit'а
Вищевказана таблиця ні в якому разі не повна: я тільки перерахував важливі особливості.
Створення richedit контрола
Після завантаження richedit.dll, Ви можете викликати CreateWindowEx. для створення контрола. Ви можете використовувати стилі засобів редагування і common windows стилі в CreateWindowEx крім ES_LOWERCASE, ES_UPPERCASE і ES_OEMCONVERT.
Установка за замовчуванням кольору тексту і фону
У вас може виникнути проблема з установкою кольору тексту і фону в засобах редагування. Але ця проблема була виправлена в richedit контролі. Щоб встановити колір фону richedit контрола, вам потрібно послати йому EM_SETBKGNDCOLOR. Це повідомлення має наступний синтаксис:
WParam == колір. Значення 0 в цьому параметрі означає, що Windows використовує значення кольору з lParam як колір фону. Якщо це значення відмінне від нуля, Windows використовує колір фону системи Windows. Так як ми посилаємо це повідомлення, щоб змінити колір фону, ми повинні помістити 0 в wParam.
LParam == визначає структуру COLORREF кольору, який Ви хочете встановити, якщо wParam - 0.
Наприклад, якби я захотів встановити колір фону в синій, я б помістив цей код:
Встановлюючи колір тексту, richedit контрол створює нове повідомлення, EM_SETCHARFORMAT. Це повідомлення управляє форматуванням тексту в діапазоні від символу у виділенні до всього тексту. Це повідомлення має наступний синтаксис:
WParam == опції форматування:
Операція зачіпає весь текст в контролі.
Операція зачіпає тільки виділений текст
SCF_WORD або SCF_SELECTION
Зачіпає слово у виділенні. Якщо нічого не виділеної, то операція торкнеться то слово на якому знаходиться курсор. Прапор SCF_WORD повинен використовуватися з SCF_SELECTION.
LParam == покажчик на структуру CHARFORMAT АБО CHARFORMAT2. яка визначає форматування тексту, яке потрібно застосувати. CHARFORMAT2 доступний тільки для richedit 2.0 і вище. Це не має на увазі, що Ви повинні використовувати CHARFORMAT2 з RichEdit 2.0 і вище. Ви все ще можете використовувати CHARFORMAT. якщо додані в CHARFORMAT2 особливості вам не потрібні.
Розмір структури. RichEdit контрол використовує це поле, щоб визначити версію структури, чи є це CHARFORMAT або CHARFORMAT2
Розряди прапорів, які визначають, які з наступних членів є правильними.
Символьний масив з нульовим символом в кінці, що визначає ім'я шрифту
З дослідження структури, Ви побачите, що ми можемо змінювати ефекти тексту (напівжирний, курсивний, закреслений, підкреслений), колір тексту (crTextColor) і шрифт (вид / розмір / набір символів). Текст з прапором CFE_RPOTECTED. відзначений як захищений, це означає, що, коли користувач спробує змінити його, то батьківському вікну буде послано повідомну повідомлення EN_PROTECTED. І Ви можете або дозволити, або заборонити зміни.
CHARFORMAT2 додає більшу кількість текстових стилів, таких як weight шрифту, інтервалу, кольору фону тексту, кернинга, і т.д. Якщо Ви не маєте потребу в цих додаткових особливості, просто використовуйте CHARFORMAT.
Щоб встановити формат тексту, Ви повинні вказати діапазон тексту, до якого хочете застосувати формат. Richedit контрол привласнює кожному символу свій номер (ідентифікатор), що починається з 0: перший символ має ідентифікатор 0, другий - 1 і так далі. Щоб вказати діапазон тексту, ви повинні дати richedit контролю, два числа: ідентифікатор першого і останнього символу діапазону. Щоб застосувати форматування до тексту з EM_SETCHARFORMAT. у вас є 3 вибору:- Застосувати до всього тексту (SCF_ALL)
- Застосувати до виділеного тексту (SCF_SELECTION)
- Застосувати до цілого слова в виділеної області (SCF_WORD or SCF_SELECTION)
Перший і другий вибори прямі, останній вимагає деяких пояснень. Якщо поточне виділення охоплює тільки один або більшу кількість символів в слові, але не, ціле слово, визначаючи прапор SCF_WORD + SCF_SELECTION. застосовується форматування тексту до цілого слова. Навіть якщо нічого не виділено, форматування застосовується до цілого слова, над яким знаходиться курсор вставки.
Щоб використовувати EM_SETCHARFORMAT. Ви повинні заповнити деякі члени структури CHARFORMAT (або CHARFORMAT2). Наприклад, якщо ми хочемо встановити колір тексту, ми заповнимо структуру CHARFORMAT наступним чином:
Цей фрагмент коду встановлює колір тексту richedit контрола в синій. Зверніть увагу, що, якщо в richedit контролі немає ніякого тексту, коли ми посилаємо повідомлення EM_SETCHARFORMAT. текст, введений в richedit контролі після повідомлення буде використовувати формат тексту, зазначений з повідомленням EM_SETCHARFORMAT.
Установка тексту / збереження тексту
Ті, хто вже використовували Edit контроли, напевно знайомі з WM_GETTEXT / WM_SETTEXT. для установки / отримання тексту в \ з контрола. Цей метод працює і з richedit контролом, але не може працювати з великими файлами. Edit контрол обмежує текст, який може бути введений в нього 64Кб, але richedit контрол може приймати текст набагато більше. Це було б не правильне рішення, виділити дуже великий блок пам'яті (типу 10 мб) щоб отримати текст за допомогою WM_GETTEXT. Richedit контрол пропонує новий підхід до цього методу, такий як текстовий потік.
Обидва повідомлення EM_STREAMIN і EM_STREAMOUT використовують однаковий синтаксис:
Дані в форматі RTF (rich-text format)