Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 07.04.2018
Сообщений: 9

Кодировка в текстовом редакторе

24.11.2018, 21:27. Показов 1852. Ответов 6

Студворк — интернет-сервис помощи студентам
Задача: сделать простейший текстовый редактор. Сделано. При сохранении текста выводи абракадабру (другая кодировка).

Например, сохранил текст "1111" в .txt. Открывая файл вижу следующее:

{\rtf1\ansi\ansicpg1251\deff0\deflang104 9{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}{\f1\fnil\fcharset204 MS Sans Serif;}{\f2\fnil MS Sans Serif;}}
\viewkind4\uc1\pard\f0\fs16 1\f1 1111\f2
\par }

Как сделать так, чтобы после сохранения блокнот открывался с нормальным текстом?

Текст программы:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ComCtrls;
 
type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    MainMenu1: TMainMenu;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    FontDialog1: TFontDialog;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.N2Click(Sender: TObject);
begin
if opendialog1.Execute then
richedit1.Lines.LoadFromFile(opendialog1.FileName);
end;
 
procedure TForm1.N3Click(Sender: TObject);
begin
if savedialog1.Execute then
richedit1.Lines.SaveToFile(savedialog1.FileName);
end;
 
procedure TForm1.N4Click(Sender: TObject);
begin
close;
end;
 
procedure TForm1.N6Click(Sender: TObject);
begin
if fontdialog1.Execute then
RichEdit1.SelAttributes.Assign(Fontdialog1.Font);
end;
 
end.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.11.2018, 21:27
Ответы с готовыми решениями:

Создание абзаца в текстовом редакторе
Всем доброго времени суток! Заранее благодарна всем кто хоть чем-то сможет помочь. Создаю программу текстового редактора - минимальный...

Отступы в текстовом редакторе Delphi
Мне надо сделать так чтобы я вводил число в Edit, а в memo делался отступ на это число, в общем сделать текстовый редактор с...

Combobox и шрифт в текстовом редакторе
Есть рабочий блокнотик..проблема в том, что надо сделать в combobox'e выбор шрифта и выделенный текст изменится на выбранный шрифт из...

6
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,169
Записей в блоге: 3
24.11.2018, 21:45
у SaveToFile есть еще одни вариант работы

Delphi
1
procedure SaveToFile(const FileName: string; Encoding: TEncoding); virtual; overload;
почитай что такое TEncoding и как его использовать в твоем случае
1
62 / 48 / 20
Регистрация: 01.09.2017
Сообщений: 381
24.11.2018, 22:38
Лучший ответ Сообщение было отмечено Theej как решение

Решение

Theej, Тут не нужно никаких премудростей. Всё гораздо проще. Вы пользуетесь компонентом richedit вероятно не совсем понимая, что это такое. Если вы хотите работать с txt файлами, то вам нужен просто компонент MEMO и проблем не будет вообще. Но компонент richedit это же вам не txt, он призван обрабатывать файлы RTF с которыми работает Microsoft Word. И естественно тут сохранение идёт не прямым текстом, а в алгоритме сохранения WORD. Если вы откроете например документ Word через блокнот, то увидите не обычный текст, а кракозябры. В вашем случае нужно открывать фалы RTF и сохранять естественно в RTF.

Добавлено через 5 минут
Я пробовал сохранять и выводить в формате RTF , всё нормально сохраняет и считывает.
1
0 / 0 / 0
Регистрация: 07.04.2018
Сообщений: 9
25.11.2018, 01:14  [ТС]
qwertehok, спасибо.

920403, большое спасибо за развернутый ответ.

Добавлено через 56 минут
Теперь выдает ошибку по Memo1.SelAttributes.Assign(Fontdialog1.F ont);

[Ошибка] Unit1.pas(59): Undeclared identifier: 'SelAttributes'.

Каким образом в Memo можно задать разрешение на то, чтобы менять атрибуты вводимого текста, чтобы как в текстовом редакторе выходило стандартное окно правки шрифтов?
0
62 / 48 / 20
Регистрация: 01.09.2017
Сообщений: 381
25.11.2018, 01:45
Theej, Тут ничего сложного. Просто для того, что-бы понять, как нужно реализовывать для конкретного компонента, просто кликни на компонент и посмотри в инспекторе объектов как выйти на конкретную опцию с учётом вложенности. Вот так делается с мемо
Delphi
1
memo1.Font.Assign(Fontdialog1.Font);
Если внимательно посмотреть, то увидеть не сложно, что в Memo нет такого атрибута как SelAttributes

Добавлено через 7 минут
Когда ты после имени компонента ставишь точку, то сразу видно в всплывающей подсказке, что там есть и чего там нет.
1
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,405
Записей в блоге: 3
25.11.2018, 06:00
Theej, кодировки тут совсем не при чем, хотя знать про такую возможность надо...
При использовании RichEdit у Вас есть 2 варианта действий:
1. Использовать все возможности этого редактора: изменение выделенных фрагментов текста (наименование шрифта, стиль, размер, цвет и т.д.), но сохранять это дело придется в формате RTF, чтобы при последующей загрузке этого файла все Ваши изменения формата текста были сохранены...
2. Установить свойство PlainText в true. В этом случае Вы можете проделать все эти фишки с текстом в сеансе работы программы, но при сохранении про все проделанное форматирование придется забыть. Но зато Вы получите нормально читаемый текстовый файл.
1
0 / 0 / 0
Регистрация: 07.04.2018
Сообщений: 9
25.11.2018, 18:13  [ТС]
D1973, благодарю за ответ. Спасибо!

Добавлено через 9 часов 13 минут
920403, большое спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.11.2018, 18:13
Помогаю со студенческими работами здесь

Пункт новый в текстовом редакторе
как можно описать пункт создания нового документа в текстовом редакторе если procedure TForm1.N2Click(Sender: TObject); var...

Не открывается файл в текстовом редакторе
В общем есть многооконный текстовый редактор, состоящий и главной формы, и каким угодно количеством дочерних форм. в общем проблема такая....

Выбор стиля через ComboBox в текстовом редакторе
Есть такой вопрос: подруге нужно сделать выбор стиля (определённый шрифт и цвет текста) в элементе ComboBox (например выбирается Стиль 1:...

Как через TColorDialog изменить цвет шрифта в текстовом редакторе?
Как через TColorDialog изменить цвет шрифта в текстовом редакторе?

Как сделать чтоб файл в текстовом редакторе не сохранялся если он пустой
как сделать чтоб файл в текстовыом редакторе не сохранялся если он пустой???????????


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru