📄 ebarmdidemomain.pas
字号:
unit EBarMDIDemoMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, ComCtrls, dxBar, StdCtrls, dxBarExtItems, cxControls,
ImgList, ActnList, cxLookAndFeels, dxStatusBar, cxGraphics, EBarsUtils;
type
TEBarMDIDemoMainForm = class(TForm)
BarManager: TdxBarManager;
dxBarButtonNew: TdxBarLargeButton;
dxBarButtonOpen: TdxBarLargeButton;
dxBarButtonClose: TdxBarLargeButton;
dxBarButtonSave: TdxBarLargeButton;
dxBarButtonSaveAs: TdxBarLargeButton;
dxBarButtonPrint: TdxBarLargeButton;
dxBarButtonExit: TdxBarLargeButton;
dxBarButtonUndo: TdxBarLargeButton;
dxBarButtonCut: TdxBarLargeButton;
dxBarButtonCopy: TdxBarLargeButton;
dxBarButtonPaste: TdxBarLargeButton;
dxBarButtonClear: TdxBarLargeButton;
dxBarButtonSelectAll: TdxBarLargeButton;
dxBarButtonFind: TdxBarLargeButton;
dxBarButtonReplace: TdxBarLargeButton;
dxBarComboFontSize: TdxBarCombo;
dxBarButtonBold: TdxBarLargeButton;
dxBarButtonItalic: TdxBarLargeButton;
dxBarButtonUnderline: TdxBarLargeButton;
dxBarButtonBullets: TdxBarLargeButton;
dxBarButtonProtected: TdxBarLargeButton;
dxBarButtonAlignLeft: TdxBarLargeButton;
dxBarButtonCenter: TdxBarLargeButton;
dxBarButtonAlignRight: TdxBarLargeButton;
dxBarButtonFont: TdxBarLargeButton;
dxBarButtonNewWindow: TdxBarLargeButton;
dxBarButtonArrangeAll: TdxBarLargeButton;
dxBarButtonNextWindow: TdxBarLargeButton;
dxBarButtonPreviousWindow: TdxBarLargeButton;
dxBarListWindows: TdxBarListItem;
dxBarSubItemFile: TdxBarSubItem;
dxBarSubItemEdit: TdxBarSubItem;
dxBarSubItemFormat: TdxBarSubItem;
dxBarSubItemWindow: TdxBarSubItem;
dxBarSubItemHelp: TdxBarSubItem;
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
PrintDialog: TPrintDialog;
FontDialog: TFontDialog;
dxBarPopupMenu: TdxBarPopupMenu;
dxBarButtonEnhancedStyle: TdxBarLargeButton;
dxBarMRUFiles: TdxBarMRUListItem;
dxBarButtonStdStyle: TdxBarLargeButton;
dxBarButtonFlatStyle: TdxBarLargeButton;
dxBarDockControl1: TdxBarDockControl;
dxBarComboFontColor: TdxBarColorCombo;
dxBarGroup1: TdxBarGroup;
dxBarButtonXPStyle: TdxBarLargeButton;
dxBarButton1: TdxBarLargeButton;
dxBarButton2: TdxBarLargeButton;
dxBarButton3: TdxBarLargeButton;
dxBarButton4: TdxBarLargeButton;
dxBarButton5: TdxBarLargeButton;
dxBarButton6: TdxBarLargeButton;
dxBarButton7: TdxBarLargeButton;
dxBarButtonOffice11Style: TdxBarLargeButton;
Images: TImageList;
dxBarComboFontName: TdxBarFontNameCombo;
ilHotImages: TImageList;
ilDisabledImages: TImageList;
dxBarLargeButton1: TdxBarLargeButton;
dxBarLargeButton2: TdxBarLargeButton;
ilStatusBarImages: TImageList;
dxStatusBar: TdxStatusBar;
FindDialog: TFindDialog;
ReplaceDialog: TReplaceDialog;
procedure FormCreate(Sender: TObject);
procedure dxBarButtonNewClick(Sender: TObject);
procedure dxBarButtonOpenClick(Sender: TObject);
procedure dxBarButtonCloseClick(Sender: TObject);
procedure dxBarButtonSaveClick(Sender: TObject);
procedure dxBarButtonSaveAsClick(Sender: TObject);
procedure dxBarButtonPrintClick(Sender: TObject);
procedure dxBarButtonExitClick(Sender: TObject);
procedure dxBarButtonUndoClick(Sender: TObject);
procedure dxBarButtonCutClick(Sender: TObject);
procedure dxBarButtonCopyClick(Sender: TObject);
procedure dxBarButtonPasteClick(Sender: TObject);
procedure dxBarButtonClearClick(Sender: TObject);
procedure dxBarButtonSelectAllClick(Sender: TObject);
procedure dxBarButtonFindClick(Sender: TObject);
procedure dxBarButtonReplaceClick(Sender: TObject);
procedure dxBarComboFontNameChange(Sender: TObject);
procedure dxBarComboFontSizeChange(Sender: TObject);
procedure dxBarButtonBoldClick(Sender: TObject);
procedure dxBarButtonItalicClick(Sender: TObject);
procedure dxBarButtonUnderlineClick(Sender: TObject);
procedure dxBarComboFontColorChange(Sender: TObject);
procedure dxBarButtonBulletsClick(Sender: TObject);
procedure dxBarButtonAlignClick(Sender: TObject);
procedure dxBarButtonProtectedClick(Sender: TObject);
procedure dxBarButtonFontClick(Sender: TObject);
procedure dxBarButtonArrangeAllClick(Sender: TObject);
procedure dxBarButtonNextWindowClick(Sender: TObject);
procedure dxBarButtonPreviousWindowClick(Sender: TObject);
procedure dxBarListWindowsGetData(Sender: TObject);
procedure dxBarListWindowsClick(Sender: TObject);
procedure dxBarButtonEnhancedStyleClick(Sender: TObject);
procedure dxBarMRUFilesClick(Sender: TObject);
procedure dxBarButtonStdStyleClick(Sender: TObject);
procedure dxBarButtonFlatStyleClick(Sender: TObject);
procedure dxBarButtonXPStyleClick(Sender: TObject);
procedure dxBarButtonOffice11StyleClick(Sender: TObject);
procedure FindOne(Sender: TObject);
procedure ReplaceOne(Sender: TObject);
private
FUpdating: Boolean;
function GetEditor: TRichEdit;
function GetEditorCol: Integer;
function GetEditorRow: Integer;
function GetFileName: string;
procedure SetFileName(Value: string);
public
CreatedMDICount: Integer;
procedure EditorChange(Sender: TObject);
procedure EditorSelectionChange(Sender: TObject);
function SaveFile(ASaveAs: Boolean): Boolean;
procedure SetModified(Value: Boolean);
procedure ShowItems(AShow: Boolean);
property Editor: TRichEdit read GetEditor;
property EditorCol: Integer read GetEditorCol;
property EditorRow: Integer read GetEditorRow;
property FileName: string read GetFileName write SetFileName;
end;
var
EBarMDIDemoMainForm: TEBarMDIDemoMainForm;
implementation
{$R *.DFM}
{$R windowsxp.res}
uses
RichEdit, EBarMDIDemoChild, EBarMDIDemoAbout;
const
sRichEditFoundResultCaption = 'Information';
sRichEditTextNotFound = 'The search text is not found.';
sRichEditReplaceAllResult = 'Replaced %d occurances.';
function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric;
FontType: Integer; Data: Pointer): Integer; stdcall;
begin
TStrings(Data).Add(LogFont.lfFaceName);
Result := 1;
end;
function TEBarMDIDemoMainForm.GetEditor: TRichEdit;
begin
if ActiveMDIChild = nil then Result := nil
else Result := TEBarMDIDemoChildForm(ActiveMDIChild).Editor;
end;
function TEBarMDIDemoMainForm.GetEditorCol: Integer;
begin
with Editor do
Result := SelStart - SendMessage(Handle, EM_LINEINDEX, EditorRow, 0);
end;
function TEBarMDIDemoMainForm.GetEditorRow: Integer;
begin
with Editor do
Result := SendMessage(Handle, EM_LINEFROMCHAR, SelStart, 0);
end;
function TEBarMDIDemoMainForm.GetFileName: string;
begin
if ActiveMDIChild = nil then Result := ''
else Result := TEBarMDIDemoChildForm(ActiveMDIChild).FileName;
end;
procedure TEBarMDIDemoMainForm.SetFileName(Value: string);
begin
if ActiveMDIChild <> nil then
TEBarMDIDemoChildForm(ActiveMDIChild).FileName := Value;
end;
procedure TEBarMDIDemoMainForm.FindOne(Sender: TObject);
var
StartPos, FindLength, FoundAt: Integer;
Flags: TSearchTypes;
P: TPoint;
CaretR, R, IntersectR: TRect;
begin
with Editor, TFindDialog(Sender) do
begin
if frDown in Options then
begin
if SelLength = 0 then StartPos := SelStart
else StartPos := SelStart + SelLength;
FindLength := Length(Text) - StartPos;
end
else
begin
StartPos := SelStart;
FindLength := -StartPos;
end;
Flags := [];
if frMatchCase in Options then Include(Flags, stMatchCase);
if frWholeWord in Options then Include(Flags, stWholeWord);
Screen.Cursor := crHourglass;
FoundAt := Editor.FindText(FindText, StartPos, FindLength, Flags);
if not (frReplaceAll in Options) then Screen.Cursor := crDefault;
if FoundAt > -1 then
if frReplaceAll in Options then
begin
SelStart := FoundAt;
SelLength := Length(FindText);
end
else
begin
SetFocus;
SelStart := FoundAt;
SelLength := Length(FindText);
GetCaretPos(P);
P := ClientToScreen(P);
CaretR := Rect(P.X, P.Y, P.X + 2, P.Y + 20);
GetWindowRect(Handle, R);
if IntersectRect(IntersectR, CaretR, R) then
if P.Y < Screen.Height div 2 then
Top := P.Y + 40
else
Top := P.Y - (R.Bottom - R.Top + 20);
end
else
if not (frReplaceAll in Options) then
Application.MessageBox(sRichEditTextNotFound,
sRichEditFoundResultCaption, MB_ICONINFORMATION);
end;
end;
procedure TEBarMDIDemoMainForm.ReplaceOne(Sender: TObject);
var
ReplacedCount, OldSelStart, PrevSelStart: Integer;
S: string;
begin
with Editor, TReplaceDialog(Sender) do
begin
ReplacedCount := 0;
OldSelStart := SelStart;
if frReplaceAll in Options then
Screen.Cursor := crHourglass;
repeat
if (SelLength > 0) and ((SelText = FindText) or
(not (frMatchCase in Options) and
(AnsiUpperCase(SelText) = AnsiUpperCase(FindText)))) then
begin
SelText := ReplaceText;
Inc(ReplacedCount);
end;
PrevSelStart := SelStart;
FindOne(Sender);
until not (frReplaceAll in Options) or (SelStart = PrevSelStart);
if frReplaceAll in Options then
begin
Screen.Cursor := crDefault;
if ReplacedCount = 0 then S := sRichEditTextNotFound
else
begin
SelStart := OldSelStart;
S := Format(sRichEditReplaceAllResult, [ReplacedCount]);
end;
Application.MessageBox(PChar(S), sRichEditFoundResultCaption,
MB_ICONINFORMATION);
end;
end;
end;
procedure TEBarMDIDemoMainForm.EditorChange(Sender: TObject);
begin
if Editor = nil then Exit;
Editor.OnSelectionChange(Editor);
SetModified(Editor.Modified);
dxStatusBar.Panels[1].Text := ActiveMDIChild.Caption;
TdxStatusBarTextPanelStyle(dxStatusBar.Panels[1].PanelStyle).ImageIndex := 0;
TdxStatusBarTextPanelStyle(dxStatusBar.Panels[0].PanelStyle).ImageIndex := 2;
dxBarButtonUndo.Enabled := SendMessage(Editor.Handle, EM_CANUNDO, 0, 0) <> 0;
end;
procedure TEBarMDIDemoMainForm.EditorSelectionChange(Sender: TObject);
begin
with Editor, SelAttributes do
begin
FUpdating := True;
dxBarComboFontSize.OnChange := nil;
dxBarComboFontName.OnChange := nil;
dxBarComboFontColor.OnChange := nil;
try
dxStatusBar.Panels[0].Text := Format('Line: %3d Col: %3d', [1 + EditorRow, 1 + EditorCol]);
dxBarButtonCopy.Enabled := SelLength > 0;
dxBarButtonCut.Enabled := dxBarButtonCopy.Enabled;
dxBarButtonPaste.Enabled := SendMessage(Editor.Handle, EM_CANPASTE, 0, 0) <> 0;
dxBarButtonClear.Enabled := dxBarButtonCopy.Enabled;
dxBarComboFontSize.Text := IntToStr(Size);
dxBarComboFontName.Text := Name;
dxBarComboFontColor.Color := Color;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -