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

546 lines
19 KiB
C++

//---------------------------------------------------------------------------
#include <vcl.h>
#include <shellapi.h>
#pragma hdrstop
#include "EBarMDIDemoMain.h"
#include "EBarMDIDemoChild.h"
#include "EBarsDemoRating.h"
#include "EBarMDIDemoAbout.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "dxBar"
#pragma link "dxBarExtItems"
#pragma link "cxControls"
#pragma link "dxStatusBar"
#pragma link "cxGraphics"
#pragma link "dxStatusBar"
#pragma resource "*.dfm"
TEBarMDIDemoMainForm *EBarMDIDemoMainForm;
char
*sRichEditFoundResultCaption = "Information",
*sRichEditTextNotFound = "The search text is not found.",
*sRichEditReplaceAllResult = "Replaced %d occurances.";
//---------------------------------------------------------------------------
__fastcall TEBarMDIDemoMainForm::TEBarMDIDemoMainForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
TRichEdit *__fastcall TEBarMDIDemoMainForm::GetEditor()
{
if (ActiveMDIChild == NULL) return NULL;
else return ((TEBarMDIDemoChildForm*) ActiveMDIChild)->Editor;
}
//---------------------------------------------------------------------------
int __fastcall TEBarMDIDemoMainForm::GetEditorCol()
{
return Editor->SelStart - SendMessage(Editor->Handle, EM_LINEINDEX, EditorRow, 0);
}
//---------------------------------------------------------------------------
int __fastcall TEBarMDIDemoMainForm::GetEditorRow()
{
return SendMessage(Editor->Handle, EM_LINEFROMCHAR, Editor->SelStart, 0);
}
//---------------------------------------------------------------------------
AnsiString __fastcall TEBarMDIDemoMainForm::GetFileName()
{
if (ActiveMDIChild == NULL) return NULL;
else return ((TEBarMDIDemoChildForm*) ActiveMDIChild)->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::SetFileName(AnsiString Value)
{
if (ActiveMDIChild != NULL)
((TEBarMDIDemoChildForm*) ActiveMDIChild)->FileName = Value;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::EditorChange(TObject *Sender)
{
if (Editor == NULL) return;
Editor->OnSelectionChange(Editor);
SetModified(Editor->Modified);
dxStatusBar->Panels->Items[1]->Text = ActiveMDIChild->Caption;
((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[1]->PanelStyle)->ImageIndex = 0;
((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[0]->PanelStyle)->ImageIndex = 2;
dxBarButtonUndo->Enabled = (SendMessage(Editor->Handle, EM_CANUNDO, 0, 0) != 0);
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::EditorSelectionChange(TObject *Sender)
{
FUpdating = True;
try
{
dxBarComboFontSize->OnChange = 0;
dxBarComboFontName->OnChange = 0;
dxBarComboFontColor->OnChange = 0;
dxStatusBar->Panels->Items[0]->Text =
Format("Line: %3d Col: %3d", ARRAYOFCONST((1 + EditorRow, 1 + EditorCol)));
dxBarButtonCopy->Enabled = Editor->SelLength > 0;
dxBarButtonCut->Enabled = dxBarButtonCopy->Enabled;
dxBarButtonPaste->Enabled = (SendMessage(Editor->Handle, EM_CANPASTE, 0, 0) != 0);
dxBarButtonClear->Enabled = dxBarButtonCopy->Enabled;
dxBarComboFontSize->Text = IntToStr(Editor->SelAttributes->Size);
dxBarComboFontName->Text = Editor->SelAttributes->Name;
dxBarComboFontColor->Color = Editor->SelAttributes->Color;
dxBarButtonBold->Down = Editor->SelAttributes->Style.Contains(fsBold);
dxBarButtonItalic->Down = Editor->SelAttributes->Style.Contains(fsItalic);
dxBarButtonUnderline->Down = Editor->SelAttributes->Style.Contains(fsUnderline);
dxBarButtonBullets->Down = Boolean(Editor->Paragraph->Numbering);
switch ((int) Editor->Paragraph->Alignment)
{
case 0: dxBarButtonAlignLeft->Down = True; break;
case 1: dxBarButtonAlignRight->Down = True; break;
case 2: dxBarButtonCenter->Down = True; break;
}
dxBarButtonProtected->Down = Editor->SelAttributes->Protected;
}
__finally
{
FUpdating = False;
dxBarComboFontSize->OnChange = dxBarComboFontSizeChange;
dxBarComboFontName->OnChange = dxBarComboFontNameChange;
dxBarComboFontColor->OnChange = dxBarComboFontColorChange;
}
}
//---------------------------------------------------------------------------
bool __fastcall TEBarMDIDemoMainForm::SaveFile(bool ASaveAs)
{
if (ASaveAs || (FileName == ""))
{
SaveDialog->FileName = FileName;
if (!SaveDialog->Execute()) return False;
FileName = SaveDialog->FileName;
}
Editor->Lines->SaveToFile(FileName);
SetModified(False);
return True;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::SetModified(bool Value)
{
Editor->Modified = Value;
if (Value) {
dxStatusBar->Panels->Items[2]->Text = "Modified";
((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[2]->PanelStyle)->ImageIndex = 1;
}
else {
dxStatusBar->Panels->Items[2]->Text = "";
((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[2]->PanelStyle)->ImageIndex = 4;
}
dxBarButtonSave->Enabled = Value;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::ShowItems(bool AShow)
{
TdxBarItemVisible AVisible;
BarManager->LockUpdate = True;
if (!AShow)
{
dxStatusBar->Panels->Items[0]->Text = "";
dxStatusBar->Panels->Items[1]->Text = "";
}
BarManager->Groups[0]->Enabled = AShow;
if (AShow) AVisible = ivAlways;
else AVisible = ivInCustomizing;
dxBarSubItemEdit->Visible = AVisible;
dxBarSubItemFormat->Visible = AVisible;
BarManager->LockUpdate = False;
((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[0]->PanelStyle)->ImageIndex = 5;
((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[1]->PanelStyle)->ImageIndex = 3;
((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[2]->PanelStyle)->ImageIndex = 4;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::FormCreate(TObject *Sender)
{
dmCommonData->AboutFormClass = __classid(TEBarMDIDemoAboutForm);
const AnsiString Filter = "Rich Text Files (*.RTF)|*.RTF";
OpenDialog->Filter = Filter;
SaveDialog->Filter = Filter;
OpenDialog->InitialDir = ExtractFilePath(ParamStr(0));
SaveDialog->InitialDir = OpenDialog->InitialDir;
ShowItems(False);
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonNewClick(TObject *Sender)
{
new TEBarMDIDemoChildForm(Application);
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonOpenClick(TObject *Sender)
{
OpenDialog->FileName = "";
if (OpenDialog->Execute())
{
TEBarMDIDemoChildForm *AForm = new TEBarMDIDemoChildForm(Application);
AForm->FileName = OpenDialog->FileName;
AForm->Editor->Lines->LoadFromFile(AForm->FileName);
SetModified(False);
dxBarMRUFiles->RemoveItem(OpenDialog->FileName, NULL);
}
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonCloseClick(TObject *Sender)
{
ActiveMDIChild->Close();
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonSaveClick(TObject *Sender)
{
SaveFile(False);
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::FindOne(TObject *Sender)
{
TFindDialog *ADialog = ((TFindDialog*) Sender);
int StartPos, FindLength, FoundAt;
TSearchTypes Flags;
TPoint P;
RECT R, CaretR, IntersectR;
if (ADialog->Options.Contains(frDown))
{
if (Editor->SelLength == 0) StartPos = Editor->SelStart;
else StartPos = Editor->SelStart + Editor->SelLength;
FindLength = Editor->Text.Length() - StartPos;
}
else
{
StartPos = Editor->SelStart;
FindLength = -StartPos;
}
Flags.Clear();
if (ADialog->Options.Contains(frMatchCase)) Flags << stMatchCase;
if (ADialog->Options.Contains(frWholeWord)) Flags << stWholeWord;
Screen->Cursor = crHourGlass;
FoundAt = Editor->FindText(ADialog->FindText, StartPos, FindLength, Flags);
if (!(ADialog->Options.Contains(frReplaceAll))) Screen->Cursor = crDefault;
if (FoundAt > -1)
if (ADialog->Options.Contains(frReplaceAll))
{
Editor->SelStart = FoundAt;
Editor->SelLength = ADialog->FindText.Length();
}
else
{
Editor->SetFocus();
Editor->SelStart = FoundAt;
Editor->SelLength = ADialog->FindText.Length();
GetCaretPos(&P);
P = Editor->ClientToScreen(P);
CaretR = Rect(P.x, P.y, P.x + 2, P.y + 20);
GetWindowRect(Editor->Handle, &R);
if (IntersectRect(&IntersectR, &CaretR, &R))
if (P.y < Screen->Height / 2)
ADialog->Top = P.y + 40;
else
ADialog->Top = P.y - (R.bottom - R.top + 20);
}
else
if (!(ADialog->Options.Contains(frReplaceAll)))
Application->MessageBox(sRichEditTextNotFound,
sRichEditFoundResultCaption, MB_ICONINFORMATION);
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::ReplaceOne(TObject *Sender)
{
TReplaceDialog *ADialog = ((TReplaceDialog*) Sender);
int ReplacedCount, OldSelStart, PrevSelStart;
AnsiString S;
ReplacedCount = 0;
OldSelStart = Editor->SelStart;
if (ADialog->Options.Contains(frReplaceAll)) Screen->Cursor = crHourGlass;
do
{
if ((Editor->SelLength > 0) && ((Editor->SelText == ADialog->FindText) ||
(!(ADialog->Options.Contains(frMatchCase)) &&
(AnsiUpperCase(Editor->SelText) == AnsiUpperCase(ADialog->FindText)))))
{
Editor->SelText = ADialog->ReplaceText;
ReplacedCount++;
}
PrevSelStart = Editor->SelStart;
FindOne(Sender);
}
while (!(!(ADialog->Options.Contains(frReplaceAll)) || (Editor->SelStart == PrevSelStart)));
if (ADialog->Options.Contains(frReplaceAll))
{
Screen->Cursor = crDefault;
if (ReplacedCount == 0) S = sRichEditTextNotFound;
else
{
Editor->SelStart = OldSelStart;
S = Format(sRichEditReplaceAllResult, ARRAYOFCONST((ReplacedCount)));
}
Application->MessageBox(S.c_str(), sRichEditFoundResultCaption,
MB_ICONINFORMATION);
}
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonSaveAsClick(TObject *Sender)
{
SaveFile(True);
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonPrintClick(TObject *Sender)
{
if (PrintDialog->Execute()) Editor->Print(FileName);
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonUndoClick(TObject *Sender)
{
SendMessage(Editor->Handle, EM_UNDO, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonCutClick(TObject *Sender)
{
Editor->CutToClipboard();
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonCopyClick(TObject *Sender)
{
Editor->CopyToClipboard();
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonPasteClick(TObject *Sender)
{
Editor->PasteFromClipboard();
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonClearClick(TObject *Sender)
{
Editor->ClearSelection();
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonSelectAllClick(TObject *Sender)
{
Editor->SelectAll();
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonFindClick(TObject *Sender)
{
Editor->SelLength = 0;
FindDialog->Execute();
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonReplaceClick(TObject *Sender)
{
Editor->SelLength = 0;
ReplaceDialog->Execute();
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarComboFontNameChange(TObject *Sender)
{
if (!FUpdating)
Editor->SelAttributes->Name = dxBarComboFontName->Text;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarComboFontSizeChange(TObject *Sender)
{
if (!FUpdating)
Editor->SelAttributes->Size = StrToInt(dxBarComboFontSize->Text);
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonBoldClick(TObject *Sender)
{
if (dxBarButtonBold->Down)
Editor->SelAttributes->Style = Editor->SelAttributes->Style << fsBold;
else
Editor->SelAttributes->Style = Editor->SelAttributes->Style >> fsBold;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonItalicClick(TObject *Sender)
{
if (dxBarButtonItalic->Down)
Editor->SelAttributes->Style = Editor->SelAttributes->Style << fsItalic;
else
Editor->SelAttributes->Style = Editor->SelAttributes->Style >> fsItalic;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonUnderlineClick(TObject *Sender)
{
if (dxBarButtonUnderline->Down)
Editor->SelAttributes->Style = Editor->SelAttributes->Style << fsUnderline;
else
Editor->SelAttributes->Style = Editor->SelAttributes->Style >> fsUnderline;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarComboFontColorChange(TObject *Sender)
{
Editor->SelAttributes->Color = dxBarComboFontColor->Color;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonBulletsClick(TObject *Sender)
{
Editor->Paragraph->Numbering = (TNumberingStyle) dxBarButtonBullets->Down;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonAlignClick(TObject *Sender)
{
if (((TdxBarButton *)Sender)->Down)
Editor->Paragraph->Alignment = (TAlignment)((TdxBarButton *)Sender)->Tag;
else
Editor->Paragraph->Alignment = taLeftJustify;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonProtectedClick(TObject *Sender)
{
Editor->SelAttributes->Protected = !Editor->SelAttributes->Protected;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonFontClick(TObject *Sender)
{
FontDialog->Font->Assign(Editor->SelAttributes);
if (FontDialog->Execute())
Editor->SelAttributes->Assign(FontDialog->Font);
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonArrangeAllClick(TObject *Sender)
{
Tile();
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonNextWindowClick(TObject *Sender)
{
Next();
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonPreviousWindowClick(TObject *Sender)
{
Previous();
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarListWindowsClick(TObject *Sender)
{
((TCustomForm *)dxBarListWindows->Items->Objects[dxBarListWindows->ItemIndex])->Show();
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarListWindowsGetData(TObject *Sender)
{
dxBarListWindows->ItemIndex = dxBarListWindows->Items->IndexOfObject(ActiveMDIChild);
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonOnWebClick(TObject *Sender)
{
ShellExecute(0, NULL, "http://www.devexpress.com", NULL, NULL, SW_RESTORE);
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonEnhancedStyleClick(TObject *Sender)
{
BarManager->Style = bmsEnhanced;
dxStatusBar->PaintStyle = stpsStandard;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonStdStyleClick(TObject *Sender)
{
BarManager->Style = bmsStandard;
dxStatusBar->PaintStyle = stpsStandard;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonFlatStyleClick(TObject *Sender)
{
BarManager->Style = bmsFlat;
dxStatusBar->PaintStyle = stpsFlat;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarMRUFilesClick(TObject *Sender)
{
AnsiString AFileName;
TEBarMDIDemoChildForm *CForm;
AFileName = dxBarMRUFiles->Items->Strings[dxBarMRUFiles->ItemIndex];
if (FileExists(AFileName))
{
CForm = new TEBarMDIDemoChildForm(Application);
CForm->FileName = AFileName;
CForm->Editor->Lines->LoadFromFile(FileName);
SetModified(False);
}
else
Application->MessageBox(AnsiString(AFileName+"\nFile not found.").c_str(),"Open",MB_OK || MB_ICONERROR);
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonOffice11StyleClick(TObject *Sender)
{
BarManager->Style = bmsOffice11;
dxStatusBar->PaintStyle = stpsOffice11;
}
//---------------------------------------------------------------------------
void __fastcall TEBarMDIDemoMainForm::dxBarButtonXPStyleClick(TObject *Sender)
{
BarManager->Style = bmsXP;
dxStatusBar->PaintStyle = stpsXP;
}
//---------------------------------------------------------------------------