Delphi CxGrid 요약(2)
그러나 cxGrid는 다음과 같은 다중 헤더 형식을 실현할 수 없다. ----------------------------------------------------------------------------------------------|설명3 |설명5 |설명6 | 필드1 | 필드2 | 필드3 | 필드4 | 필드5 | 누가 이런 다중 헤더를 실현할 수 있는지 모르겠다.
**************************************************************************** 18. 주종표 구조에서'+'를 눌렀을 때 어떻게 상응하는 주표의 기록에 초점을 맞춥니까?해결: var HitTest: TcxCustomGridHitTest,
procedure TColumnsShareDemoMainForm.tvProjectsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin//Note that the Sender parameter is a Site HitTest := (Sender as TcxGridSite).GridView.ViewInfo.GetHitTest(X, Y);//The point belongs to the [+]/[-] button area if HitTest is TcxGridExpandButtonHitTest then//Move focus to the record TcxGridExpandButtonHitTest(HitTest).GridRecord.Focused := True; end;
******************************************************************************** 19 CXGrid4 모든 노드 해결 방법: GridDBTableView1.DataController.Groups.FullExpand;
**************************************************************************** 20. cxGrid 는 Items 의 Editor 항목을 동적으로 생성하는 방법해결: cxGrid의 열에는 속성이 있습니다. 편집 상자는combobox,spinedit 등을 지정할 수 있습니다.디자인할 때combobox의items에 항목을 추가할 수 있습니다.동적 생성이 가능합니까?(run-time 시 프로그램에 가입)
var
A:TDataSource:
B:TcxlookupcomboboxProperties;
begin
A:=TDataSource.create(self);
B:=tcxlookupcomboboxproperties.create(self);
A.Dataset:=Dic_ry_xb;// 。
b.listdource:=a;// listsource 。
b.keyfieldnames:='a'; //
b.listfieldnames:='b'; // 。
b.listcolumns.items[0].caption:='x; // , name, 。
cxGrid1DBTableView1c1_sex_code.Properties:=b; // 。
end; //
**************************************************************************** 21. 파일 복사 시 진행 상태 해결:
procedure TForm1.mycopyfile(sourcef,targetf:string);
var
FromF, ToF: file;
NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
n:integer;
begin
AssignFile(FromF, sourcef);
Reset(FromF, 1); { Record size = 1 }
AssignFile(ToF,targetf); { Open output file }
Rewrite(ToF, 1); { Record size = 1 }
n:=0;
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
form1.label1.caption:=IntToStr(sizeof(buf)*n*100 div FileSize(FromF))+'100%';
application.ProcessMessages;
//
BlockWrite(ToF, Buf, NumRead, NumWritten);
inc(n);
until (NumRead = 0) or (NumWritten <> NumRead);
form1.Label1.Caption:='100%';
CloseFile(FromF);
CloseFile(ToF);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
mycopyfile('e:/components/tv2k-w2k.zip','c:/a.zip');
end;
**************************************************************************** 22. cxGrid 설정 횡단보도 해결:TcxGrid DBBandedTable View.Styles 속성에 ContentEven(홀수 행 스타일)ContentOdd(짝수 행 스타일)가 있으니 스타일을 설정하면 됩니다. ***********************************************************************************************************************************23 기록 내용에 따라 글꼴 색상 변경 해결: 범례CustomDrawTableViewDemo를 참고하십시오. 주로 TcxGridDBBandedTableView에 있습니다.OnCustomDrawCell 이벤트에서 수행됩니다.다음 코드:
if(Pos('-', AViewInfo.GridRecord.DisplayTexts[colOrderProductCount.Index])>0) > 0) then begin//표지 음수 기록//ACanvas.Canvas.Brush.Color:= clMoneyGreen; ACanvas.Canvas.Font.Color:= clRed;//clActiveCaption end;
여기서 colOrderProductCount는 제품 주문 열입니다.
한 걸음 더 가야 돼요. 디스플레이를 새로 고쳐야 돼요.
TcxGridDBBandedTableView.LayoutChanged();//tvCars.LayoutChanged(False); TcxGridDBBandedTableView.Painter.Invalidate;
********************************************************************************* 24 코드로 확장/축소 주종구조로 해결: Self.tvDepartment.ViewData.Expand(True); Self.tvDepartment.ViewData.Collaspe(True);참고: tvDepartment 마스터 테이블에 해당하는 TableView
***************************************************************************25 내장 마우스 오른쪽 버튼 메뉴 뒤에 메뉴 항목 해결 추가: 우선 Form에 cxGridPopupupmMenu 컨트롤을 추가하여 오른쪽 버튼 메뉴 UseBuildInPopue를 True로 설정합니다.
procedure TFormItemList.FormCreate(Sender: TObject);
var
AMenu: TComponent;
FMenuItem, FSubMenuItem: TMenuItem;
begin
AMenu := nil;
if cxGridPopupMenu.BuiltInPopupMenus.Count = 0 then
Exit;
AMenu := cxGridPopupMenu.BuiltInPopupMenus[0].PopupMenu; // ( )
if Assigned(AMenu) and AMenu.InheritsFrom(TPopupMenu) then
begin
TPopupMenu(AMenu).AutoHotkeys := maManual; //
//-------------------------
FMenuItem := TMenuItem.Create(Self);
FMenuItem.Caption := '-';
FMenuItem.Name := 'miLineForGroup';
TPopupMenu(AMenu).Items.Add(FMenuItem);
//
FMenuItem := TMenuItem.Create(Self);
FMenuItem.Name := 'miExpandAllGroup';
FMenuItem.Caption := ' (&X)';
FMenuItem.OnClick := miExpandAllGroupClick;
TPopupMenu(AMenu).Items.Add(FMenuItem);
//
FMenuItem := TMenuItem.Create(Self);
FMenuItem.Name := 'miCollapseAllGroup';
FMenuItem.Caption := ' (&O)';
FMenuItem.OnClick := miCollapseAllGroupClick;
TPopupMenu(AMenu).Items.Add(FMenuItem);
//-------------------------
FMenuItem := TMenuItem.Create(Self);
FMenuItem.Caption := '-';
TPopupMenu(AMenu).Items.Add(FMenuItem);
//
FMenuItem := TMenuItem.Create(Self);
FMenuItem.Name := 'miFilterPanel';
FMenuItem.Caption := ' (&P)';
//
FSubMenuItem := TMenuItem.Create(Self);
FSubMenuItem.Name := 'miFilterPanelAuto';
FSubMenuItem.Caption := ' (&A)';
FSubMenuItem.RadioItem := True;
FSubMenuItem.GroupIndex := 5; //
FSubMenuItem.Checked := True;
FSubMenuItem.OnClick := miFilterPanelClick;
FMenuItem.Add(FSubMenuItem); //
//
FSubMenuItem := TMenuItem.Create(Self);
FSubMenuItem.Name := 'miFilterPanelAlways';
FSubMenuItem.Caption := ' (&W)';
FSubMenuItem.RadioItem := True;
FSubMenuItem.GroupIndex := 5;
FSubMenuItem.OnClick := miFilterPanelClick;
FMenuItem.Add(FSubMenuItem);
//
FSubMenuItem := TMenuItem.Create(Self);
FSubMenuItem.Name := 'miFilterPanelNerver';
FSubMenuItem.Caption := ' (&N)';
FSubMenuItem.RadioItem := True;
FSubMenuItem.GroupIndex := 5;
FSubMenuItem.OnClick := miFilterPanelClick;
FMenuItem.Add(FSubMenuItem);
TPopupMenu(AMenu).Items.Add(FMenuItem);
//
FMenuItem := TMenuItem.Create(Self);
FMenuItem.Name := 'miCustomFilter';
FMenuItem.Caption := ' (&M)';
FMenuItem.OnClick := miCustomFilterClick;
TPopupMenu(AMenu).Items.Add(FMenuItem);
//
FMenuItem := TMenuItem.Create(Self);
FMenuItem.Name := 'miFilterBuilder';
TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend, 44); //
FMenuItem.ImageIndex := TPopupMenu(AMenu).Images.Count - 1; //
FMenuItem.Caption := ' ';
FMenuItem.OnClick := Self.miFilterBuilderClick;
TPopupMenu(AMenu).Items.Add(FMenuItem);
//---------------------
FMenuItem := TMenuItem.Create(Self);
FMenuItem.Caption := '-';
TPopupMenu(AMenu).Items.Add(FMenuItem);
//
FMenuItem := TMenuItem.Create(Self);
FMenuItem.Name := 'miExport';
TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend, 37);
FMenuItem.ImageIndex := TPopupMenu(AMenu).Images.Count - 1;
FMenuItem.Caption := ' (&E)';
FMenuItem.OnClick := Self.miExportClick;
TPopupMenu(AMenu).Items.Add(FMenuItem);
//
FMenuItem := TMenuItem.Create(Self);
FMenuItem.Name := 'miPrint';
FMenuItem.Caption := ' (&P)';
TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend, 14);
FMenuItem.ImageIndex := TPopupMenu(AMenu).Images.Count - 1;
FMenuItem.OnClick := Self.miPrintClick;
TPopupMenu(AMenu).Items.Add(FMenuItem);
end;
end;
procedure TFormItemList.miExportClick(Sender: TObject);
var
FileName, FileExt, msg: String;
begin
if Self.aqyQuery.IsEmpty then
begin
msg := ' ...';
Application.MessageBox(PChar(msg), PChar(Application.Title),
MB_OK or MB_IconWarning);
Exit;
end;
Self.SaveDialogExport.Filter := 'Excel (*.xls)|*.xls|XML (*.xml)|*.xml'
+ '| (*.txt)|*.txt| (*.html)|*.html';
Self.SaveDialogExport.Title := ' ';
if not Self.SaveDialogExport.Execute then
Exit;
FileName := Self.SaveDialogExport.FileName;
FileExt := LowerCase(ExtractFileExt(FileName));
if FileExt = '.xls' then
ExportGrid4ToExcel(FileName, Self.cxGrid1)
else if FileExt = '.xml' then
ExportGrid4ToXML(FileName, Self.cxGrid1)
else if FileExt = '.txt' then
ExportGrid4ToText(FileName, Self.cxGrid1)
else if FileExt = '.html' then
ExportGrid4ToHTML(FileName, Self.cxGrid1)
else
begin
msg := ' ...';
Application.MessageBox(PChar(msg), PChar(Application.Title),
MB_OK or MB_IconError);
Exit;
end;
msg := ' ...';
Application.MessageBox(PChar(msg), PChar(Application.Title),
MB_OK or MB_IconInformation);
end;
procedure TFormItemList.miPrintClick(Sender: TObject);
begin
//
Self.dxComponentPrinter.Preview(True, Self.dxComponentPrinterLink1);
end;
procedure TFormItemList.cxGridPopupMenuPopup(ASenderMenu: TComponent;
AHitTest: TcxCustomGridHitTest; X, Y: Integer; var AllowPopup: Boolean);
begin
if GetHitTypeByHitCode(AHitTest.HitTestCode) = gvhtColumnHeader then //
begin
//if tvResult.DataController.Groups.GroupingItemCount > 0 then
if tvResult.GroupedColumnCount > 0 then //
begin
TMenuItem(Self.FindComponent('miLineForGroup')).Visible := True;
TMenuItem(Self.FindComponent('miExpandAllGroup')).Visible := True;
TMenuItem(Self.FindComponent('miCollapseAllGroup')).Visible := True;
end
else
begin
TMenuItem(Self.FindComponent('miLineForGroup')).Visible := False;
TMenuItem(Self.FindComponent('miExpandAllGroup')).Visible := False;
TMenuItem(Self.FindComponent('miCollapseAllGroup')).Visible := False;
end;
end;
end;
procedure TFormItemList.miFilterBuilderClick(Sender: TObject);
begin
//
// Filter Builder Dialog
tvResult.Filtering.RunCustomizeDialog;
end;
procedure TFormItemList.miCustomFilterClick(Sender: TObject);
var
AHitTest: TcxCustomGridHitTest;
begin
//
// Custom Filter Dialog
AHitTest := cxGridPopupMenu.HitTest;
if GetHitTypeByHitCode(AHitTest.HitTestCode) = gvhtColumnHeader then //
tvResult.Filtering.RunCustomizeDialog(TcxGridColumnHeaderHitTest(AHitTest).Column);
end;
procedure TFormItemList.miFilterPanelClick(Sender: TObject);
var
mi: TMenuItem;
begin
// /
mi := TMenuItem(Sender);
mi.Checked := True;
if mi.Name = 'miFilterPanelAlways' then
tvResult.Filtering.Visible := fvAlways
else if mi.Name = 'miFilterPanelNerver' then
tvResult.Filtering.Visible := fvNever
else
tvResult.Filtering.Visible := fvNonEmpty;
end;
procedure TFormItemList.miExpandAllGroupClick(Sender: TObject);
begin
//
tvResult.DataController.Groups.FullExpand;
end;
procedure TFormItemList.miCollapseAllGroupClick(Sender: TObject);
begin
//
tvResult.DataController.Groups.FullCollapse;
end;
******************************************************************************26 열의 값에 따라 다른 열의 편집 가능한 해결을 설정합니다:procedure TFormUser.tvUserEditing(Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem; var AAllow: Boolean);3열 값이 True이면 4열에서 if(tvUser.Controller.FocusedRecord.Value[2] = True) and(Aitem.Index = 4) then Aallow: = False else Aallow: = True; end;
****************************************************************************** 27 Grid 레이아웃 해결 저장/복원: 메쉬 왼쪽 상단에 있는 사용자 정의 레이아웃 버튼: TableView-?OptionsCustiomize?ColumnsQuickCustomization true;
//
IniFileName := ExtractFilePath(Application.ExeName) + 'Layout/' + Self.Name + '.ini';
if FileExists(IniFileName) then
Self.tvResult.RestoreFromIniFile(IniFileName) //
else
begin
Self.tvResult.BeginUpdate;
for i := 0 to Self.tvResult.ItemCount - 1 do
Self.tvResult.Items[i].ApplyBestFit; //
Self.tvResult.EndUpdate;
end;
//
IniFileName := ExtractFilePath(Application.ExeName) + 'Layout/' + Self.Name + '.ini';
if not DirectoryExists(ExtractFileDir(IniFileName)) then
CreateDir(ExtractFileDir(IniFileName));
Self.tvResult.StoreToIniFile(IniFileName); //
:
IniFileName: string;
procedure TMainFM.FormCreate(Sender: TObject); //
var i: Integer;
begin
qyHed.Open;
IniFileName := ExtractFilePath(Application.ExeName) + '/Layout/' + cxGrd.Owner.ClassName + cxGrd.Name + '.ini';
if FileExists(IniFileName) then
Self.cxTbv.RestoreFromIniFile(IniFileName) //
else
begin
Self.cxTbv.BeginUpdate;
for i := 0 to Self.cxTbv.ItemCount - 1 do
Self.cxTbv.Items[i].ApplyBestFit; //
Self.cxTbv.EndUpdate;
end;
end;
procedure TMainFM.NSaveGrdClick(Sender: TObject); //
begin
try
IniFileName := ExtractFilePath(Application.ExeName) + '/Layout/' + cxGrd.Owner.ClassName + cxGrd.Name + '.ini';
if not DirectoryExists(ExtractFileDir(IniFileName)) then
CreateDir(ExtractFileDir(IniFileName));
Self.cxTbv.StoreToIniFile(IniFileName);
except
end;
end;
****************************************************************************
28 요약 행의 레이아웃 해결을 저장/복원:
zj: 이 조항과 50개 중복
****************************************************************************
28 마스터 종속 TableView에서 마스터 TableView에 따라 해당하는 종속 TableView 해결:
var ADetailDC: TcxGridDataController; AView: TcxCustomGridTableView; begin with cxGrid1DBTableView1.DataController do ADetailDC := TcxGridDataController(GetDetailDataController(FocusedRecordIndex, 0)); AView := ADetailDC.GridView; end;
==============================================================================
29 첫 줄에 위치하고 내장 편집기 보이기
cxDBVerticalGrid1.FocusedRow := cxDBVerticalGrid1.Rows[0]; cxDBVerticalGrid1.ShowEdit;
==============================================================================
30 "
이 텍스트는 scxGridNoDataInfoText 자원 문자열에 저장되며, 이 자원 문자열의 내용을 비워 텍스트를 숨길 수 있습니다.
uses cxClasses, cxGridStrs; ... cxSetResourceString(@scxGridNoDataInfoText, '');
//"
============================================================
31 필터링된 행 제거
var I: Integer; begin with
=============================================================
32 단원의 값 설정 스타일에 따라 해결: procedure
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Delphi] TStringBuilder그리고 꼭 사용해야만 할까? 그림처럼 Heap 영역에 "Hello" 공간을 생성하고 포인팅을 한다. "Hello World" 공간을 새로 생성한 후 포인팅을 하게 된다. 결국 "Hello" 라는 String 객체가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.