Componentes.Terceros.DevExp.../internal/x.36/1/ExpressBars 6/Demos/Delphi/EBarMDIDemo/EBarMDIDemoMain.pas
2008-09-04 11:31:51 +00:00

649 lines
20 KiB
ObjectPascal

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;
dxBarButtonBold.Down := fsBold in Style;
dxBarButtonItalic.Down := fsItalic in Style;
dxBarButtonUnderline.Down := fsUnderline in Style;
dxBarButtonBullets.Down := Boolean(Paragraph.Numbering);
case Ord(Paragraph.Alignment) of
0: dxBarButtonAlignLeft.Down := True;
1: dxBarButtonAlignRight.Down := True;
2: dxBarButtonCenter.Down := True;
end;
dxBarButtonProtected.Down := Protected;
finally
FUpdating := False;
dxBarComboFontSize.OnChange := dxBarComboFontSizeChange;
dxBarComboFontName.OnChange := dxBarComboFontNameChange;
dxBarComboFontColor.OnChange := dxBarComboFontColorChange;
end;
end;
end;
function TEBarMDIDemoMainForm.SaveFile(ASaveAs: Boolean): Boolean;
begin
if ASaveAs or (FileName = '') then
begin
SaveDialog.FileName := FileName;
Result := SaveDialog.Execute;
if not Result then Exit;
FileName := SaveDialog.FileName;
end;
Editor.Lines.SaveToFile(FileName);
dxStatusBar.Panels[1].Text := ActiveMDIChild.Caption;
SetModified(False);
Result := True;
end;
procedure TEBarMDIDemoMainForm.SetModified(Value: Boolean);
begin
Editor.Modified := Value;
if Value then
begin
dxStatusBar.Panels[2].Text := 'Modified';
TdxStatusBarTextPanelStyle(dxStatusBar.Panels[2].PanelStyle).ImageIndex := 1;
end
else
begin
dxStatusBar.Panels[2].Text := '';
TdxStatusBarTextPanelStyle(dxStatusBar.Panels[2].PanelStyle).ImageIndex := 4;
end;
dxBarButtonSave.Enabled := Value;
end;
procedure TEBarMDIDemoMainForm.ShowItems(AShow: Boolean);
var
AVisible: TdxBarItemVisible;
begin
BarManager.LockUpdate := True;
try
if not AShow then
begin
dxStatusBar.Panels[0].Text := '';
dxStatusBar.Panels[1].Text := '';
dxStatusBar.Panels[2].Text := '';
end;
BarManager.Groups[0].Enabled := AShow;
if AShow then AVisible := ivAlways
else AVisible := ivInCustomizing;
dxBarSubItemEdit.Visible := AVisible;
dxBarSubItemFormat.Visible := AVisible;
finally
BarManager.LockUpdate := False;
end;
TdxStatusBarTextPanelStyle(dxStatusBar.Panels[0].PanelStyle).ImageIndex := 5;
TdxStatusBarTextPanelStyle(dxStatusBar.Panels[1].PanelStyle).ImageIndex := 3;
TdxStatusBarTextPanelStyle(dxStatusBar.Panels[2].PanelStyle).ImageIndex := 4;
end;
procedure TEBarMDIDemoMainForm.FormCreate(Sender: TObject);
const
Filter = 'Rich Text Files (*.RTF)|*.RTF';
begin
dmCommonData.AboutFormClass := TEBarMDIDemoAboutForm;
OpenDialog.Filter := Filter;
SaveDialog.Filter := Filter;
OpenDialog.InitialDir := ExtractFilePath(ParamStr(0));
SaveDialog.InitialDir := OpenDialog.InitialDir;
ShowItems(False);
end;
procedure TEBarMDIDemoMainForm.dxBarButtonNewClick(Sender: TObject);
begin
TEBarMDIDemoChildForm.Create(Application);
end;
procedure TEBarMDIDemoMainForm.dxBarButtonOpenClick(Sender: TObject);
begin
OpenDialog.FileName := '';
if OpenDialog.Execute then
begin
with TEBarMDIDemoChildForm.Create(Application) do
begin
FileName := OpenDialog.FileName;
Editor.Lines.LoadFromFile(FileName);
SetModified(False);
end;
dxBarMRUFiles.RemoveItem(OpenDialog.FileName, nil);
end;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonCloseClick(Sender: TObject);
begin
ActiveMDIChild.Close;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonSaveClick(Sender: TObject);
begin
SaveFile(False);
end;
procedure TEBarMDIDemoMainForm.dxBarButtonSaveAsClick(Sender: TObject);
begin
SaveFile(True);
end;
procedure TEBarMDIDemoMainForm.dxBarButtonPrintClick(Sender: TObject);
begin
if PrintDialog.Execute then Editor.Print(FileName);
end;
procedure TEBarMDIDemoMainForm.dxBarButtonExitClick(Sender: TObject);
begin
Close;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonUndoClick(Sender: TObject);
begin
SendMessage(Editor.Handle, EM_UNDO, 0, 0);
end;
procedure TEBarMDIDemoMainForm.dxBarButtonCutClick(Sender: TObject);
begin
Editor.CutToClipboard;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonCopyClick(Sender: TObject);
begin
Editor.CopyToClipboard;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonPasteClick(Sender: TObject);
begin
Editor.PasteFromClipboard;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonClearClick(Sender: TObject);
begin
Editor.ClearSelection;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonSelectAllClick(Sender: TObject);
begin
Editor.SelectAll;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonFindClick(Sender: TObject);
begin
Editor.SelLength := 0;
FindDialog.Execute;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonReplaceClick(Sender: TObject);
begin
Editor.SelLength := 0;
ReplaceDialog.Execute;
end;
procedure TEBarMDIDemoMainForm.dxBarComboFontNameChange(Sender: TObject);
begin
if not FUpdating then
Editor.SelAttributes.Name := dxBarComboFontName.Text;
end;
procedure TEBarMDIDemoMainForm.dxBarComboFontSizeChange(Sender: TObject);
begin
if not FUpdating then
Editor.SelAttributes.Size := StrToInt(dxBarComboFontSize.Text);
end;
procedure TEBarMDIDemoMainForm.dxBarButtonBoldClick(Sender: TObject);
begin
with Editor.SelAttributes do
if dxBarButtonBold.Down then
Style := Style + [fsBold]
else
Style := Style - [fsBold];
end;
procedure TEBarMDIDemoMainForm.dxBarButtonItalicClick(Sender: TObject);
begin
with Editor.SelAttributes do
if dxBarButtonItalic.Down then
Style := Style + [fsItalic]
else
Style := Style - [fsItalic];
end;
procedure TEBarMDIDemoMainForm.dxBarButtonUnderlineClick(Sender: TObject);
begin
with Editor.SelAttributes do
if dxBarButtonUnderline.Down then
Style := Style + [fsUnderline]
else
Style := Style - [fsUnderline];
end;
procedure TEBarMDIDemoMainForm.dxBarComboFontColorChange(Sender: TObject);
begin
Editor.SelAttributes.Color := dxBarComboFontColor.Color;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonBulletsClick(Sender: TObject);
begin
Editor.Paragraph.Numbering := TNumberingStyle(dxBarButtonBullets.Down);
end;
procedure TEBarMDIDemoMainForm.dxBarButtonAlignClick(Sender: TObject);
begin
if TdxBarLargeButton(Sender).Down then
Editor.Paragraph.Alignment := TAlignment(TdxBarLargeButton(Sender).Tag)
else
Editor.Paragraph.Alignment := taLeftJustify;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonProtectedClick(Sender: TObject);
begin
with Editor.SelAttributes do Protected := not Protected;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonFontClick(Sender: TObject);
begin
FontDialog.Font.Assign(Editor.SelAttributes);
if FontDialog.Execute then
Editor.SelAttributes.Assign(FontDialog.Font);
end;
procedure TEBarMDIDemoMainForm.dxBarButtonArrangeAllClick(Sender: TObject);
begin
Tile;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonNextWindowClick(Sender: TObject);
begin
Next;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonPreviousWindowClick(Sender: TObject);
begin
Previous;
end;
procedure TEBarMDIDemoMainForm.dxBarListWindowsGetData(Sender: TObject);
begin
with dxBarListWindows do
ItemIndex := Items.IndexOfObject(ActiveMDIChild);
end;
procedure TEBarMDIDemoMainForm.dxBarListWindowsClick(Sender: TObject);
begin
with dxBarListWindows do
TCustomForm(Items.Objects[ItemIndex]).Show;
end;
procedure TEBarMDIDemoMainForm.dxBarMRUFilesClick(Sender: TObject);
var
AFileName: String;
begin
AFileName := dxBarMRUFiles.Items[dxBarMRUFiles.ItemIndex];
if FileExists(AFileName) then
with TEBarMDIDemoChildForm.Create(Application) do
begin
FileName := AFileName;
Editor.Lines.LoadFromFile(FileName);
SetModified(False);
end
else
Application.MessageBox(PChar(AFileName+#10#13+'File not found.'),'Open',MB_OK or MB_ICONERROR)
end;
procedure TEBarMDIDemoMainForm.dxBarButtonStdStyleClick(Sender: TObject);
begin
BarManager.Style := bmsStandard;
dxStatusBar.PaintStyle := stpsStandard;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonEnhancedStyleClick(Sender: TObject);
begin
BarManager.Style := bmsEnhanced;
dxStatusBar.PaintStyle := stpsStandard;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonFlatStyleClick(Sender: TObject);
begin
BarManager.Style := bmsFlat;
dxStatusBar.PaintStyle := stpsFlat;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonXPStyleClick(Sender: TObject);
begin
BarManager.Style := bmsXP;
dxStatusBar.PaintStyle := stpsXP;
end;
procedure TEBarMDIDemoMainForm.dxBarButtonOffice11StyleClick(Sender: TObject);
begin
BarManager.Style := bmsOffice11;
dxStatusBar.PaintStyle := stpsOffice11;
end;
end.