mirror of
http://gitlab.expertsoft.com.ua/git/expertcad
synced 2026-01-11 22:45:39 +02:00
424 lines
12 KiB
ObjectPascal
424 lines
12 KiB
ObjectPascal
unit RichForm;
|
||
|
||
interface
|
||
|
||
uses
|
||
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
||
ComCtrls, ToolWin, ExtCtrls, StdCtrls, RichEdit2, Menus,PCTypesUtils,
|
||
{$ifndef DELPHI3}
|
||
ImgList,
|
||
{$endif}
|
||
Spin, siComp, siLngLnk;
|
||
|
||
type
|
||
TfrmRichEdit = class(TForm)
|
||
ToolBar1: TToolBar;
|
||
ToolButton1: TToolButton;
|
||
ToolButton2: TToolButton;
|
||
ToolButton3: TToolButton;
|
||
Panel1: TPanel;
|
||
Panel3: TPanel;
|
||
Panel4: TPanel;
|
||
ToolButton4: TToolButton;
|
||
ToolButton5: TToolButton;
|
||
ToolButton7: TToolButton;
|
||
ToolButton8: TToolButton;
|
||
ToolButton9: TToolButton;
|
||
ToolButton10: TToolButton;
|
||
ToolButton11: TToolButton;
|
||
ToolButton12: TToolButton;
|
||
ComboBox1: TComboBox;
|
||
ToolButton13: TToolButton;
|
||
ImageList1: TImageList;
|
||
ColorDialog1: TColorDialog;
|
||
PopupMenu1: TPopupMenu;
|
||
LoadFromFile1: TMenuItem;
|
||
SaveToFile1: TMenuItem;
|
||
N1: TMenuItem;
|
||
InsertObject1: TMenuItem;
|
||
N2: TMenuItem;
|
||
ToolButton6: TToolButton;
|
||
ToolButton14: TToolButton;
|
||
ToolButton15: TToolButton;
|
||
ToolButton16: TToolButton;
|
||
ToolButton17: TToolButton;
|
||
ToolButton18: TToolButton;
|
||
ToolButton19: TToolButton;
|
||
ToolButton20: TToolButton;
|
||
SetLanguage1: TMenuItem;
|
||
SaveDialog1: TSaveDialog;
|
||
SpinEdit1: TSpinEdit;
|
||
N3: TMenuItem;
|
||
Numbering1: TMenuItem;
|
||
None1: TMenuItem;
|
||
Bullets1: TMenuItem;
|
||
Bumbers1: TMenuItem;
|
||
LowerCase1: TMenuItem;
|
||
UpperCase1: TMenuItem;
|
||
Sequance1: TMenuItem;
|
||
SetStartNumber1: TMenuItem;
|
||
OpenDialog1: TOpenDialog;
|
||
Panel2: TPanel;
|
||
bOK: TButton;
|
||
bCancel: TButton;
|
||
lng_Forms: TsiLangLinked;
|
||
procedure bOKClick(Sender: TObject);
|
||
procedure ToolButton1Click(Sender: TObject);
|
||
procedure ToolButton2Click(Sender: TObject);
|
||
procedure ToolButton3Click(Sender: TObject);
|
||
procedure ToolButton5Click(Sender: TObject);
|
||
procedure FormCreate(Sender: TObject);
|
||
procedure ComboBox1Change(Sender: TObject);
|
||
procedure RichEdit1SelectionChange(Sender: TObject);
|
||
procedure ToolButton6Click(Sender: TObject);
|
||
procedure FormShow(Sender: TObject);
|
||
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||
procedure ToolButton16Click(Sender: TObject);
|
||
procedure ToolButton15Click(Sender: TObject);
|
||
procedure ToolButton14Click(Sender: TObject);
|
||
procedure ToolButton7Click(Sender: TObject);
|
||
procedure ToolButton8Click(Sender: TObject);
|
||
procedure ToolButton9Click(Sender: TObject);
|
||
procedure ToolButton12Click(Sender: TObject);
|
||
procedure ToolButton18Click(Sender: TObject);
|
||
procedure ToolButton19Click(Sender: TObject);
|
||
procedure RichEdit1MouseDown(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
procedure LoadFromFile1Click(Sender: TObject);
|
||
procedure SaveToFile1Click(Sender: TObject);
|
||
procedure InsertObject1Click(Sender: TObject);
|
||
procedure SpinEdit1Change(Sender: TObject);
|
||
procedure None1Click(Sender: TObject);
|
||
procedure Bullets1Click(Sender: TObject);
|
||
procedure Bumbers1Click(Sender: TObject);
|
||
procedure LowerCase1Click(Sender: TObject);
|
||
procedure UpperCase1Click(Sender: TObject);
|
||
procedure SetStartNumber1Click(Sender: TObject);
|
||
procedure bCancelClick(Sender: TObject);
|
||
|
||
private
|
||
{ Private declarations }
|
||
public
|
||
fStream: TMemorystream;
|
||
RichEdit1: TRichEdit98;
|
||
TextChangesCount : integer; // Tolik 10/03/2020 --
|
||
procedure LngClick(Sender: TObject);
|
||
procedure OnFormKeyPress(Sender: TObject; var Key: Char);
|
||
procedure OnFormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||
procedure OnFormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||
Procedure onTextChange(Sender: TObject);
|
||
end;
|
||
|
||
var
|
||
frmRichEdit: TfrmRichEdit;
|
||
langcodes : array[1..69] of Integer = (1078,1052,1025,1069,2067,2060,1046,
|
||
1026,1059,1027,1050,1029,1030,1043,3081,4105,5129,7177,2057,1033,1061,1080,
|
||
1065,1035,2077,1036,3084,1031,1032,1037,1038,1040,1039,1057,1041,1042,1062,
|
||
1063,1071,1086,2058,1044,2068,1045,2070,1048,1049,3098,2074,1072,2052,1051,
|
||
1060,1034,3082,1053,4108,2055,2064,1054,1028,1073,1074,1055,1058,1075,1066,
|
||
1076,1077);
|
||
innerChange: Boolean;
|
||
|
||
|
||
|
||
|
||
implementation
|
||
|
||
{$R *.DFM}
|
||
|
||
procedure TfrmRichEdit.ToolButton1Click(Sender: TObject);
|
||
begin
|
||
if fsBold in richedit1.SelAttributes.Style then
|
||
richedit1.SelAttributes.Style := richedit1.SelAttributes.Style - [fsBold]
|
||
else
|
||
richedit1.SelAttributes.Style := richedit1.SelAttributes.Style + [fsBold];
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ToolButton2Click(Sender: TObject);
|
||
begin
|
||
if fsItalic in richedit1.SelAttributes.Style then
|
||
richedit1.SelAttributes.Style := richedit1.SelAttributes.Style - [fsItalic]
|
||
else
|
||
richedit1.SelAttributes.Style := richedit1.SelAttributes.Style + [fsItalic];
|
||
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ToolButton3Click(Sender: TObject);
|
||
begin
|
||
if fsUnderLine in richedit1.SelAttributes.Style then
|
||
richedit1.SelAttributes.Style := richedit1.SelAttributes.Style - [fsUnderLine]
|
||
else
|
||
richedit1.SelAttributes.Style := richedit1.SelAttributes.Style + [fsUnderLine];
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ToolButton5Click(Sender: TObject);
|
||
begin
|
||
if colordialog1.Execute then begin
|
||
richedit1.SelAttributes.Color := colordialog1.color;
|
||
end;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.FormCreate(Sender: TObject);
|
||
var i,a:integer;
|
||
xParent,subItem: TMenuItem;
|
||
begin
|
||
TextChangesCount := 0; // Tolik 10/03/2020
|
||
|
||
richEdit1 := TRichEdit98.Create(self);
|
||
richEdit1.parent := self;
|
||
richedit1.visible := true;
|
||
richedit1.align := alClient;
|
||
richedit1.HideSelection := false;
|
||
RichEdit1.OnMouseDown := RichEdit1MouseDown;
|
||
RichEdit1.OnSelectionChange := RichEdit1SelectionChange;
|
||
RichEdit1.OnKeyPress := OnFormKeyPress;
|
||
RichEdit1.OnKeyDown := OnFormKeyDown;
|
||
RichEdit1.OnKeyUp := OnFormKeyUp;
|
||
|
||
for i := 0 to Screen.Fonts.Count -1 do
|
||
begin
|
||
Combobox1.Items.Add(Screen.Fonts[i]);
|
||
end;
|
||
Combobox1.ItemIndex := 0;
|
||
|
||
xParent := popUpMenu1.Items[popUpMenu1.Items.Count-1];
|
||
|
||
for a := 1 to 69 do
|
||
begin
|
||
subItem := TMenuItem.Create(self);
|
||
subItem.Caption := LanguageName(TLanguage(langcodes[a]));
|
||
subItem.Tag := langcodes[a];
|
||
subItem.OnClick := lngClick;
|
||
xParent.Add(subItem);
|
||
end;
|
||
innerchange := false;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ComboBox1Change(Sender: TObject);
|
||
begin
|
||
if innerchange then exit;
|
||
richedit1.SelAttributes.Name := Combobox1.Text;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.RichEdit1SelectionChange(Sender: TObject);
|
||
begin
|
||
innerchange := true;
|
||
Combobox1.ItemIndex := Combobox1.Items.IndexOf(richedit1.SelAttributes.Name);
|
||
SpinEdit1.Value := richedit1.SelAttributes.Size;
|
||
innerchange := false;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ToolButton6Click(Sender: TObject);
|
||
begin
|
||
richedit1.Paragraph.Alignment := taJustify;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.FormShow(Sender: TObject);
|
||
var
|
||
SelChange: TNotifyEvent; // Tolik 05/10/2021 --
|
||
begin
|
||
richedit1.SetFocus;
|
||
RichEdit1SelectionChange(nil);
|
||
|
||
SelChange := RichEdit1.OnSelectionChange;
|
||
RichEdit1.OnSelectionChange := nil;
|
||
RichEdit1.OnChange := nil;
|
||
|
||
RichEdit1.Lines.LoadFromStream(fStream, nil );
|
||
|
||
RichEdit1.OnSelectionChange := SelChange; // Tolik 05/10/2021 --
|
||
RichEdit1.OnChange := onTextChange; // Tolik 10/03/2020 --
|
||
|
||
RichEdit1SelectionChange(nil);
|
||
end;
|
||
|
||
procedure TfrmRichEdit.FormClose(Sender: TObject;
|
||
var Action: TCloseAction);
|
||
begin
|
||
// ModalResult := mrCancel;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ToolButton16Click(Sender: TObject);
|
||
begin
|
||
richedit1.SelAttributes.IndexKind := ikSuperscript;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ToolButton15Click(Sender: TObject);
|
||
begin
|
||
richedit1.SelAttributes.IndexKind := ikSubscript;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ToolButton14Click(Sender: TObject);
|
||
begin
|
||
richedit1.SelAttributes.IndexKind := ikNone;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ToolButton7Click(Sender: TObject);
|
||
begin
|
||
richedit1.Paragraph.Alignment := taLeft;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ToolButton8Click(Sender: TObject);
|
||
begin
|
||
richedit1.Paragraph.Alignment := taCenter;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ToolButton9Click(Sender: TObject);
|
||
begin
|
||
richedit1.Paragraph.Alignment := taRight;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ToolButton12Click(Sender: TObject);
|
||
begin
|
||
richedit1.Paragraph.Numbering := nsBullet;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ToolButton18Click(Sender: TObject);
|
||
begin
|
||
richedit1.Paragraph.Numbering := nsNumber;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.ToolButton19Click(Sender: TObject);
|
||
begin
|
||
richedit1.Paragraph.Numbering := nsNone;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.RichEdit1MouseDown(Sender: TObject;
|
||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||
var pnt: TPoint;
|
||
begin
|
||
|
||
if button = mbRight then
|
||
begin
|
||
pnt := RichEdit1.ClientToScreen(Point(x,y));
|
||
pOpUpMenu1.Popup(pnt.x,pnt.y);
|
||
end;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.LngClick(Sender: TObject);
|
||
begin
|
||
RichEdit1.Language := TLanguage(TMEnuItem(sender).tag);
|
||
end;
|
||
|
||
procedure TfrmRichEdit.LoadFromFile1Click(Sender: TObject);
|
||
begin
|
||
if opendialog1.Execute then
|
||
richedit1.lines.LoadFromFile(opendialog1.filename);
|
||
end;
|
||
|
||
procedure TfrmRichEdit.SaveToFile1Click(Sender: TObject);
|
||
begin
|
||
if savedialog1.Execute then
|
||
richedit1.lines.SaveToFile(savedialog1.filename, nil );
|
||
end;
|
||
|
||
procedure TfrmRichEdit.InsertObject1Click(Sender: TObject);
|
||
begin
|
||
richedit1.InsertObjectDialog;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.SpinEdit1Change(Sender: TObject);
|
||
begin
|
||
if innerchange then exit;
|
||
if Spinedit1.Text = '' then exit;
|
||
if SpinEdit1.Value > 0 then
|
||
richedit1.SelAttributes.Size := SpinEdit1.Value;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.None1Click(Sender: TObject);
|
||
begin
|
||
richedit1.Paragraph.Numbering := nsNone;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.Bullets1Click(Sender: TObject);
|
||
begin
|
||
richedit1.Paragraph.Numbering := nsBullet;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.Bumbers1Click(Sender: TObject);
|
||
begin
|
||
richedit1.Paragraph.Numbering := nsNumber;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.LowerCase1Click(Sender: TObject);
|
||
begin
|
||
richedit1.Paragraph.Numbering := nsLowercase;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.UpperCase1Click(Sender: TObject);
|
||
begin
|
||
richedit1.Paragraph.Numbering := nsUpperCase;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.SetStartNumber1Click(Sender: TObject);
|
||
var strx: string;
|
||
begin
|
||
strx := inputbox('Numbering Start','Enter a Number','');
|
||
if strx <> '' then begin
|
||
richedit1.Paragraph.NumberingStart := strtointdef(strx,0);
|
||
end;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.bOKClick(Sender: TObject);
|
||
begin
|
||
// ModalResult := mrOk;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.bCancelClick(Sender: TObject);
|
||
begin
|
||
// ModalResult := mrCancel;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.OnFormKeyPress(Sender: TObject; var Key: Char);
|
||
begin
|
||
// Tolik 13/02/2020 --
|
||
richedit1.SelAttributes.Name := Combobox1.Text;
|
||
//richedit1.Font.Name := Combobox1.Text;
|
||
if Combobox1.Text = 'GOST' then
|
||
begin
|
||
if Key = '<27>' then
|
||
begin
|
||
Key := chr(35);
|
||
richedit1.Refresh;
|
||
//Font.Name := 'GOST'
|
||
end;
|
||
end;
|
||
|
||
// <20><> Esc - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||
if Key = #27 then
|
||
begin
|
||
bCancel.Click;
|
||
end;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.OnFormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||
begin
|
||
//if richedit1.SelText <> '' then
|
||
//if sender <> RichEdit1 then
|
||
begin
|
||
richedit1.SelAttributes.Name := Combobox1.Text;
|
||
|
||
//richedit1.Font.Name := Combobox1.Text;
|
||
end;
|
||
{ if richedit1.SelAttributes.Name = 'GOST' then
|
||
richedit1.Font.Charset := 204; }
|
||
if (ssCtrl in Shift) and (Key = 13) then
|
||
begin
|
||
Key := 0;
|
||
bOK.Click;
|
||
end;
|
||
end;
|
||
|
||
procedure TfrmRichEdit.OnFormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||
begin
|
||
|
||
end;
|
||
|
||
// Tolik 10/03/2020 --
|
||
Procedure TfrmRichEdit.onTextChange(Sender: TObject);
|
||
begin
|
||
inc(TextChangesCount);
|
||
end;
|
||
|
||
end.
|