Componentes.Terceros.FastRe.../internal/4.2/1/Source/frxEditMemo.pas
2007-11-18 19:40:07 +00:00

303 lines
7.6 KiB
ObjectPascal

{******************************************}
{ }
{ FastReport v4.0 }
{ Memo editor }
{ }
{ Copyright (c) 1998-2007 }
{ by Alexander Tzyganenko, }
{ Fast Reports Inc. }
{ }
{******************************************}
unit frxEditMemo;
interface
{$I frx.inc}
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, ToolWin, frxClass,
frxEditFormat, frxEditHighlight
{$IFDEF Delphi6}
, Variants
{$ENDIF};
type
TfrxMemoEditorForm = class(TForm)
PageControl1: TPageControl;
TextTS: TTabSheet;
FormatTS: TTabSheet;
HighlightTS: TTabSheet;
ToolBar: TToolBar;
ExprB: TToolButton;
AggregateB: TToolButton;
LocalFormatB: TToolButton;
WordWrapB: TToolButton;
OkB: TButton;
CancelB: TButton;
procedure FormShow(Sender: TObject);
procedure WordWrapBClick(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure MemoKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ExprBClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure AggregateBClick(Sender: TObject);
procedure LocalFormatBClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
FFormat: TfrxFormatEditorForm;
FHighlight: TfrxHighlightEditorForm;
FMemoView: TfrxCustomMemoView;
FIsUnicode: Boolean;
FText: WideString;
public
Memo: TMemo;
property MemoView: TfrxCustomMemoView read FMemoView write FMemoView;
property Text: WideString read FText write FText;
end;
implementation
{$R *.DFM}
uses frxEditSysMemo, IniFiles, frxDock, frxRes, frxUnicodeCtrls;
{ TfrxMemoEditorForm }
procedure TfrxMemoEditorForm.FormShow(Sender: TObject);
var
Ini: TCustomIniFile;
begin
FIsUnicode := FMemoView.Font.Charset = DEFAULT_CHARSET;
if FIsUnicode then
Memo := TUnicodeMemo.Create(Self)
else
Memo := TMemo.Create(Self);
with Memo do
begin
Parent := TextTS;
Align := alClient;
ScrollBars := ssBoth;
TabOrder := 1;
OnKeyDown := MemoKeyDown;
end;
FFormat := TfrxFormatEditorForm.Create(Owner);
FFormat.Format.Assign(MemoView.DisplayFormat);
FFormat.HostControls(FormatTS);
FHighlight := TfrxHighlightEditorForm.Create(Owner);
FHighlight.MemoView := MemoView;
FHighlight.HostControls(HighlightTS);
Icon := TForm(Owner).Icon;
Toolbar.Images := frxResources.MainButtonImages;
Ini := TfrxCustomDesigner(Owner).Report.GetIniFile;
Ini.WriteBool('Form4.TfrxMemoEditorForm', 'Visible', True);
WordWrapB.Down := Ini.ReadBool('Form4.TfrxMemoEditorForm', 'WordWrap', False);
WordWrapBClick(nil);
frxRestoreFormPosition(Ini, Self);
Ini.Free;
with TfrxCustomDesigner(Owner) do
begin
if UseObjectFont then
begin
Memo.Font := FMemoView.Font;
Memo.Font.Color := clBlack;
Memo.Font.Height := FMemoView.Font.Height;
end
else
begin
Memo.Font.Name := MemoFontName;
Memo.Font.Size := MemoFontSize;
end;
end;
if FIsUnicode then
TUnicodeMemo(Memo).Text := FMemoView.Text
else
Memo.Text := FMemoView.Text;
Memo.SetFocus;
Memo.Perform(EM_SETSEL, 0, 0);
Memo.Perform(EM_SCROLLCARET, 0, 0);
PageControl1.SetBounds(0, 0, ClientWidth, ClientHeight - OkB.Height - 8);
OkB.Left := ClientWidth - OkB.Width - CancelB.Width - 8;
CancelB.Left := ClientWidth - CancelB.Width - 4;
OkB.Top := ClientHeight - OkB.Height - 4;
CancelB.Top := OkB.Top;
end;
procedure TfrxMemoEditorForm.FormHide(Sender: TObject);
var
Ini: TCustomIniFile;
begin
Ini := TfrxCustomDesigner(Owner).Report.GetIniFile;
frxSaveFormPosition(Ini, Self);
Ini.WriteBool('Form4.TfrxMemoEditorForm', 'WordWrap', Memo.WordWrap);
Ini.Free;
if FIsUnicode then
FText := TUnicodeMemo(Memo).Text
else
FText := Memo.Text;
FFormat.UnhostControls;
if ModalResult = mrOk then
FMemoView.DisplayFormat.Assign(FFormat.Format);
FFormat.Free;
FHighlight.UnhostControls(ModalResult);
FHighlight.Free;
end;
procedure TfrxMemoEditorForm.ExprBClick(Sender: TObject);
var
s, s1, s2: String;
function BracketCount: Integer;
var
i: Integer;
begin
Result := 0;
for i := 1 to Length(s) do
if s[i] = '<' then
Inc(Result);
end;
begin
s := TfrxCustomDesigner(Owner).InsertExpression('');
if s <> '' then
begin
s1 := MemoView.ExpressionDelimiters;
s2 := Copy(s1, Pos(',', s1) + 1, 255);
s1 := Copy(s1, 1, Pos(',', s1) - 1);
if (s[1] = '<') and (s[Length(s)] = '>') and (BracketCount = 1) then
s := Copy(s, 2, Length(s) - 2);
Memo.SelText := s1 + s + s2;
end;
end;
procedure TfrxMemoEditorForm.WordWrapBClick(Sender: TObject);
var
s: WideString;
begin
s := '';
if FIsUnicode then
s := TUnicodeMemo(Memo).Text;
Memo.WordWrap := WordWrapB.Down;
if Memo.WordWrap then
Memo.ScrollBars := ssVertical
else
Memo.ScrollBars := ssBoth;
if FIsUnicode then
TUnicodeMemo(Memo).Text := s;
end;
procedure TfrxMemoEditorForm.MemoKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = vk_Return) and (ssCtrl in Shift) then
ModalResult := mrOk
else if Key = vk_Escape then
ModalResult := mrCancel
else if (Key = Ord('A')) and (Shift = [ssCtrl]) then
Memo.SelectAll;
end;
procedure TfrxMemoEditorForm.FormCreate(Sender: TObject);
begin
Caption := frxGet(3900);
ExprB.Hint := frxGet(3901);
AggregateB.Hint := frxGet(3902);
LocalFormatB.Hint := frxGet(3903);
WordWrapB.Hint := frxGet(3904);
TextTS.Caption := frxGet(3905);
FormatTS.Caption := frxGet(3906);
HighlightTS.Caption := frxGet(3907);
OkB.Caption := frxGet(1);
CancelB.Caption := frxGet(2);
if UseRightToLeftAlignment then
FlipChildren(True);
end;
procedure TfrxMemoEditorForm.AggregateBClick(Sender: TObject);
begin
with TfrxSysMemoEditorForm.Create(Owner) do
begin
AggregateOnly := True;
if ShowModal = mrOk then
Memo.SelText := Text;
Free;
end;
end;
procedure TfrxMemoEditorForm.LocalFormatBClick(Sender: TObject);
var
s: String;
i: Integer;
begin
with TfrxFormatEditorForm.Create(Owner) do
begin
if ShowModal = mrOk then
begin
case Format.Kind of
fkText:
s := '';
fkNumeric:
begin
s := Format.FormatStr;
for i := 1 to Length(s) do
if s[i] in ['.', ',', '-'] then
if Format.DecimalSeparator <> '' then
s[i] := Format.DecimalSeparator[1] else
s[i] := DecimalSeparator;
s := ' #n' + s;
end;
fkDateTime:
s := ' #d' + Format.FormatStr;
fkBoolean:
s := ' #b' + Format.FormatStr;
end;
if s <> '' then
begin
i := Memo.SelStart;
if (i > 0) and (Memo.Text[i] = ']') then
Memo.SelStart := Memo.SelStart - 1;
Memo.SelText := s;
end;
end;
Free;
end;
end;
procedure TfrxMemoEditorForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_F1 then
frxResources.Help(Self);
end;
end.
//862fd5d6aa1a637203d9b08a3c0bcfb0