//--------------------------------------------------------------------------- #include #include "shellapi.hpp" #pragma hdrstop #include "GridMenuViewsDemoMain.h" #include "GridMenuViewsDemoData.h" #include "AboutDemoForm.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "cxClasses" #pragma link "cxControls" #pragma link "cxCustomData" #pragma link "cxData" #pragma link "cxDBData" #pragma link "cxEdit" #pragma link "cxFilter" #pragma link "cxGraphics" #pragma link "cxGrid" #pragma link "cxGridCustomTableView" #pragma link "cxGridCustomView" #pragma link "cxGridDBTableView" #pragma link "cxGridLevel" #pragma link "cxGridTableView" #pragma link "cxStyles" #pragma link "cxGridCustomPopupMenu" #pragma link "cxGridPopupMenu" #pragma link "cxLookAndFeels" #pragma resource "*.dfm" TGridMenuViewsDemoMainForm *GridMenuViewsDemoMainForm; //--------------------------------------------------------------------------- __fastcall TGridMenuViewsDemoMainForm::TGridMenuViewsDemoMainForm(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TGridMenuViewsDemoMainForm::miAboutClick(TObject *Sender) { ShowAboutDemoForm(); } //--------------------------------------------------------------------------- void __fastcall TGridMenuViewsDemoMainForm::miExitClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TGridMenuViewsDemoMainForm::FormShow(TObject *Sender) { if (GridMenuViewsDemoDataDM->tblOrders->Active) { tvOrders->DataController->Groups->FullCollapse(); tvOrders->DataController->Groups->ChangeExpanding(0, false, false); tvOrders->DataController->GotoFirst(); } } //--------------------------------------------------------------------------- void __fastcall TGridMenuViewsDemoMainForm::miCopyToClipboardClick(TObject *Sender) { Variant AValue; TcxCustomGridHitTest *AHitTest = GridPopupMenu->HitTest; TcxGridViewHitType AHitType = GetHitTypeByHitCode(AHitTest->HitTestCode(AHitTest->ClassType())); switch (AHitType){ case gvhtFooterCell: AValue = GetFooterSummaryValue((TcxGridFooterCellHitTest*)AHitTest); break; case gvhtGroupFooterCell: AValue = GetGroupFooterSummaryValue((TcxGridGroupFooterCellHitTest*)AHitTest); } Clipboard()->AsText = VarToStr(AValue); MessageDlg("Clipboard: "+ VarToStr(AValue), mtInformation, TMsgDlgButtons() << mbOK, 0); } //--------------------------------------------------------------------------- int TGridMenuViewsDemoMainForm::GetSummaryItemIndexByColumn(TcxDataSummaryItems *ASummaryItems, TcxGridColumn *AColumn) { int Result = -1; for (int I = 0; I < ASummaryItems->Count; I++) if ((((TcxGridTableSummaryItem*)(ASummaryItems->Items[I]))->Column == AColumn) && (ASummaryItems->Items[I]->Position == spFooter)) Result = I; return Result; } //--------------------------------------------------------------------------- Variant TGridMenuViewsDemoMainForm::GetFooterSummaryValue(TcxGridFooterCellHitTest *AHitTest) { TcxDataSummary *ASummary = tvOrders->DataController->Summary; return ASummary->FooterSummaryValues[ GetSummaryItemIndexByColumn(ASummary->FooterSummaryItems, AHitTest->Column)]; } //--------------------------------------------------------------------------- Variant TGridMenuViewsDemoMainForm::GetGroupFooterSummaryValue(TcxGridGroupFooterCellHitTest *AHitTest) { TcxDataSummary *ASummary = tvOrders->DataController->Summary; TcxDataControllerGroups *ADataControllerGroups = tvOrders->DataController->Groups; int ARowIndex = ((TcxGridRowFooterCellViewInfo*)(AHitTest->ViewInfo))->GridRecord->Index; int ADataGroupIndex = ADataControllerGroups->DataGroupIndexByRowIndex[ARowIndex]; return ASummary->GroupSummaryValues[ADataGroupIndex] [GetSummaryItemIndexByColumn(ASummary->DefaultGroupSummaryItems, AHitTest->Column)]; } //--------------------------------------------------------------------------- void __fastcall TGridMenuViewsDemoMainForm::FormCreate(TObject *Sender) { InsertMenuItem(); } //--------------------------------------------------------------------------- void __fastcall TGridMenuViewsDemoMainForm::GridMenuPopup(TComponent *ASenderMenu, TcxCustomGridHitTest *AHitTest, int X, int Y) { PopupMenu->Popup(X, Y); } //--------------------------------------------------------------------------- void __fastcall TGridMenuViewsDemoMainForm::miDeleteClick(TObject *Sender) { tvOrders->Controller->DeleteSelection(); } //--------------------------------------------------------------------------- void __fastcall TGridMenuViewsDemoMainForm::miInsertClick(TObject *Sender) { tvOrders->DataController->Insert(); } //--------------------------------------------------------------------------- void __fastcall TGridMenuViewsDemoMainForm::miUseBuiltInPopupMenuClick(TObject *Sender) { ((TMenuItem*)Sender)->Checked = !((TMenuItem*)Sender)->Checked; GridPopupMenu->UseBuiltInPopupMenus = ((TMenuItem*)Sender)->Checked; if (((TMenuItem*)Sender)->Checked) { InsertMenuItem(); miAddCopyToClipboard->Enabled = true; miAddCopyToClipboard->Checked = true; } else miAddCopyToClipboard->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TGridMenuViewsDemoMainForm::miUseCopyClipboardItemClick(TObject *Sender) { ((TMenuItem*)Sender)->Checked = !((TMenuItem*)Sender)->Checked; if (GridPopupMenu->UseBuiltInPopupMenus) FMenuItem->Visible = ((TMenuItem*)Sender)->Checked; } //--------------------------------------------------------------------------- void __fastcall TGridMenuViewsDemoMainForm::miUseCustomPopupMenuClick(TObject *Sender) { ((TMenuItem*)Sender)->Checked = !((TMenuItem*)Sender)->Checked; if (((TMenuItem*)Sender)->Checked){ GridPopupMenu->PopupMenus->Items[0]->OnPopup = GridMenuPopup; GridPopupMenu->PopupMenus->Items[0]->PopupMenu = PopupMenu; } else{ GridPopupMenu->PopupMenus->Items[0]->OnPopup = NULL; GridPopupMenu->PopupMenus->Items[0]->PopupMenu = NULL; } } //--------------------------------------------------------------------------- void TGridMenuViewsDemoMainForm::InsertMenuItem() { TComponent *AMenu = NULL; TcxGridDefaultPopupMenu *ABuiltInMenus = GridPopupMenu->BuiltInPopupMenus; for (int I = 0; I < ABuiltInMenus->Count; I++) if ((TcxGridViewHitTypes()<MenuInfos[I]->HitTypes != TcxGridViewHitTypes()) AMenu = ABuiltInMenus->MenuInfos[I]->PopupMenu; if (AMenu != NULL && AMenu->InheritsFrom(__classid(TPopupMenu))) { FMenuItem = new TMenuItem(this); FMenuItem->Caption = "-"; ((TPopupMenu*)AMenu)->Items->Add(FMenuItem); FMenuItem = new TMenuItem(this); FMenuItem->Caption = "Copy To Clipboard"; FMenuItem->Hint = "Copy the contents to clipboard"; FMenuItem->OnClick = miCopyToClipboardClick; ((TPopupMenu*)AMenu)->Items->Add(FMenuItem); } } //---------------------------------------------------------------------------