powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подстрочный индекс в TRichEdit
15 сообщений из 15, страница 1 из 1
Подстрочный индекс в TRichEdit
    #39597973
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как программно преобразовать выделенный текст (SelText) в TRichEdit к подстрочному индексу - вроде Х 2
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39597981
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У выбранного текста попробуй поиграться с SelAttributes
https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb787881(v=vs.85).aspx
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39598016
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я смотрел, но не нашёл подходящего свойства
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39598017
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39598018
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39598019
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39598034
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
непонятно, как бы я мог это прикрутить к формату rtf
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39598049
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как выглядит:
\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang9\f0\fs36 UsualText \sub Subscript\nosupersub \fs22\par
}
И мне нужно суметь прикрутить (или убрать) \sub и \nosupersub
Управление bold, italic... в SelAttributes есть, а sub и др - нету
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39598062
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
muk07непонятно, как бы я мог это прикрутить к формату rtf
Через SendMessage https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb774230(v=vs.85).aspx
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39598065
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько помню, штатный компонент - это Rich Text v.1.0
А мейчас везде как имнимум 3-я версия

Попробуй TRichText из состава JediVCL/RxLib
Попробуй TRichView
Попробуй какие-нибудь ориентированные на синтаксис редакторы, кажется был TSynView например. Написанные целиком на Delphi
Попробуй THtmlView - найдешь на гитхабе
Пожешь найти с исxодниками на delphi редактор UniRed и чат-кллиент VisualIRC и посмотрет ькак вних было реализовано
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39598066
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39598070
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понял, но это чересчур длинный, низкоуровневый путь.
И есть ли уверенность в том, что упр коды \sub и \nosupersub будут вставлены (удалены)?

Всё еще надеюсь найти чего нибудь попроще.
Ещё один путь, тоже неприятный, - рассматривать rtf как plain text вместе с управляющими кодами,
- так как я изобразил его выше
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39599465
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скомбинировал рекомендации wadman, ma1tus и форума cyberforum, большое спасибо. Работает.
Вот так: (с++builder)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void __fastcall TForm1::btnLowClick(TObject *Sender){
// в TRichEdit выделенный текст сделать подстрочным или наоборот
TCharFormat f;
f.cbSize = sizeof(f);
f.dwMask = CFM_OFFSET+CFM_SIZE;
f.yOffset = -50;
int siz=rich->SelAttributes->Size;
f.yHeight=15*siz; // 3/4 от полного size (полный - 20)
rich->Perform(EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&f);
}


Но:
Остаётся проблема:
в rtf текст вставляются упр коды \dn и \up,
а хотелось бы \sub и \nosupersub, как это делает wordpad.
В результате после преобразования текст не редактируем правильно в wordpad.
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39599491
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
muk07В результате после преобразования текст не редактируем правильно в wordpad.
кстати, ты так и не озвучил версию дельфей. Как верно заметил Arioch и насколько мне помнится, возможности RichEdit ограничены версией dll, которую она использует
https://www.experts-exchange.com/questions/11220197/Richedit-DLL-Versions.html
...
Рейтинг: 0 / 0
Подстрочный индекс в TRichEdit
    #39599531
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, если кому надо - минимальный код для использования RichEdit 5.0 (MSTFEdit) из новых версий винды:
Тестировалось на Delphi XE2
Код: pascal
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.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
unit sbRichEdit50;

interface

uses
  Winapi.Windows, Winapi.RichEdit, System.Classes, Vcl.Controls,
  Vcl.StdCtrls, Vcl.ComCtrls;

type
  TRichEdit50 = class(TCustomRichEdit)
  private
    FMSFTLoaded: Boolean;
  public
    procedure CreateParams(var Params: TCreateParams); override;
    property MSFTLoaded: Boolean read FMSFTLoaded;
    {$REGION ' Publishing properties '}
    property Align;
    property Alignment;
    property Anchors;
    property BevelEdges;
    property BevelInner;
    property BevelOuter;
    property BevelKind default bkNone;
    property BevelWidth;
    property BiDiMode;
    property BorderStyle;
    property BorderWidth;
    property Color;
    property Ctl3D;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property Font;
    property HideSelection;
    property HideScrollBars;
    property ImeMode;
    property ImeName;
    property Constraints;
    property Lines;
    property MaxLength;
    property ParentBiDiMode;
    property ParentColor;
    property ParentCtl3D;
    property ParentFont;
    property ParentShowHint;
    property PlainText;
    property PopupMenu;
    property ReadOnly;
    property ScrollBars;
    property ShowHint;
    property TabOrder;
    property TabStop default True;
    property Touch;
    property Visible;
    property WantTabs;
    property WantReturns;
    property WordWrap;
    property OnChange;
    property OnClick;
    property OnContextPopup;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnGesture;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnMouseActivate;
    property OnMouseDown;
    property OnMouseEnter;
    property OnMouseLeave;
    property OnMouseMove;
    property OnMouseUp;
    property OnMouseWheel;
    property OnMouseWheelDown;
    property OnMouseWheelUp;
    property OnProtectChange;
    property OnResizeRequest;
    property OnSaveClipboard;
    property OnSelectionChange;
    property OnStartDock;
    property OnStartDrag;
    {$ENDREGION}
  end;

procedure Register;

implementation

const
  MSFTModuleName = 'MSFTEDIT.DLL';

var
  FMSFTEditModule: THandle = 0;

{ TRichEdit50 }

procedure TRichEdit50.CreateParams(var Params: TCreateParams);
type
  TInheritedCreateParams = procedure (var Params: TCreateParams) of object;
const
  HideScrollBars: array[Boolean] of DWORD = (ES_DISABLENOSCROLL, 0);
  HideSelections: array[Boolean] of DWORD = (ES_NOHIDESEL, 0);
  RichEditClassName = 'RICHEDIT50W';
var
  InheritedCreateParams: TInheritedCreateParams;
begin
  // trying to load msftefit.dll
  if FMSFTEditModule = 0 then begin
    FMSFTEditModule := LoadLibrary(MSFTModuleName);
    if FMSFTEditModule <= HINSTANCE_ERROR then
      FMSFTEditModule := 0;
  end;
  FMSFTLoaded := FMSFTEditModule <> 0;
  // if not - reverting to default richedit 2.0
  if not FMSFTLoaded then
    inherited CreateParams(Params)
  else begin // else overriding TCustomRichEdit.CreateParams() with new ClassName
    TMethod(InheritedCreateParams).Code := @TCustomMemo.CreateParams;
    TMethod(InheritedCreateParams).Data := Self;
    InheritedCreateParams(Params); // inherited inherited CreateParams(Params);
    CreateSubClass(Params, RichEditClassName);
    with Params do begin
      Style := Style or HideScrollBars[Self.HideScrollBars] or
        HideSelections[HideSelection];
      WindowClass.style := WindowClass.style and not (CS_HREDRAW or CS_VREDRAW);
    end;
  end;
end;

procedure Register;
begin
  RegisterComponents('Win32', [TRichEdit50]);
end;

end.

...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подстрочный индекс в TRichEdit
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]