diff --git a/components/rx/trunk/Demos/RxDBGrid/RxDBGridDemo.lpi b/components/rx/trunk/Demos/RxDBGrid/RxDBGridDemo.lpi
index 9af1e4d2c..8f2b20cd1 100644
--- a/components/rx/trunk/Demos/RxDBGrid/RxDBGridDemo.lpi
+++ b/components/rx/trunk/Demos/RxDBGrid/RxDBGridDemo.lpi
@@ -54,7 +54,7 @@
-
+
@@ -71,6 +71,7 @@
+
@@ -102,15 +103,14 @@
-
-
-
+
+
-
-
+
+
@@ -200,9 +200,12 @@
-
-
-
+
+
+
+
+
+
@@ -500,7 +503,7 @@
-
+
@@ -510,7 +513,7 @@
-
+
@@ -797,123 +800,159 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
@@ -943,6 +982,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/rx/trunk/Demos/RxDBGrid/rxdbgridmainunit.lfm b/components/rx/trunk/Demos/RxDBGrid/rxdbgridmainunit.lfm
index 583a58852..3193ef291 100644
--- a/components/rx/trunk/Demos/RxDBGrid/rxdbgridmainunit.lfm
+++ b/components/rx/trunk/Demos/RxDBGrid/rxdbgridmainunit.lfm
@@ -1,20 +1,20 @@
object RxDBGridMainForm: TRxDBGridMainForm
- Left = 306
+ Left = 59
Height = 721
- Top = 142
+ Top = 36
Width = 1187
ActiveControl = Panel1
Caption = 'RxDBGrid Demo'
- ClientHeight = 698
+ ClientHeight = 696
ClientWidth = 1187
Menu = MainMenu1
OnCreate = FormCreate
ShowHint = True
- LCLVersion = '1.1'
+ LCLVersion = '1.3'
object RxDBGrid1: TRxDBGrid
Left = 0
- Height = 634
- Top = 64
+ Height = 630
+ Top = 66
Width = 1187
TitleButtons = True
AutoSort = True
@@ -241,6 +241,11 @@ object RxDBGridMainForm: TRxDBGridMainForm
Command = rxgcHideQuickFilter
ShortCut = 16456
Enabled = True
+ end
+ item
+ Command = rxgcCopyCellValue
+ ShortCut = 16451
+ Enabled = True
end>
FooterOptions.Active = True
FooterOptions.Color = clYellow
@@ -268,22 +273,22 @@ object RxDBGridMainForm: TRxDBGridMainForm
end
object Panel1: TPanel
Left = 0
- Height = 64
+ Height = 66
Top = 0
Width = 1187
Align = alTop
AutoSize = True
- ClientHeight = 64
+ ClientHeight = 66
ClientWidth = 1187
TabOrder = 1
object Label1: TLabel
AnchorSideLeft.Control = Button2
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel1
- Left = 270
- Height = 15
+ Left = 260
+ Height = 19
Top = 7
- Width = 35
+ Width = 33
BorderSpacing.Around = 6
Caption = 'Mode'
ParentColor = False
@@ -292,9 +297,9 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = Panel1
Left = 7
- Height = 27
+ Height = 31
Top = 7
- Width = 86
+ Width = 85
Action = actCalcTotal
AutoSize = True
BorderSpacing.Around = 6
@@ -304,10 +309,10 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Control = Button1
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel1
- Left = 99
- Height = 27
+ Left = 98
+ Height = 31
Top = 7
- Width = 165
+ Width = 156
Action = actOptimizeColumnsWidthAll
AutoSize = True
BorderSpacing.Around = 6
@@ -318,11 +323,11 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = CheckBox2
AnchorSideTop.Side = asrBottom
- Left = 499
- Height = 22
+ Left = 489
+ Height = 23
Hint = 'Use filter line'
- Top = 35
- Width = 83
+ Top = 36
+ Width = 79
BorderSpacing.Left = 6
Caption = 'Use filter'
OnChange = CheckBox1Change
@@ -332,9 +337,9 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Control = Label1
AnchorSideTop.Control = Label1
AnchorSideTop.Side = asrBottom
- Left = 276
- Height = 25
- Top = 28
+ Left = 266
+ Height = 27
+ Top = 32
Width = 217
BorderSpacing.Around = 6
ItemHeight = 0
@@ -352,11 +357,11 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Control = ComboBox1
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel1
- Left = 499
- Height = 22
+ Left = 489
+ Height = 23
Hint = 'Auto fill column width'
Top = 7
- Width = 133
+ Width = 125
BorderSpacing.Around = 6
Caption = 'Auto fill columns'
OnChange = CheckBox2Change
@@ -366,10 +371,10 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Control = CheckBox2
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel1
- Left = 638
- Height = 22
+ Left = 620
+ Height = 23
Top = 7
- Width = 120
+ Width = 115
BorderSpacing.Around = 6
Caption = 'Show indicator'
Checked = True
@@ -382,10 +387,10 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = CheckBox3
AnchorSideTop.Side = asrBottom
- Left = 638
- Height = 22
- Top = 35
- Width = 115
+ Left = 620
+ Height = 23
+ Top = 36
+ Width = 110
BorderSpacing.Around = 6
Caption = 'Show headers'
Checked = True
@@ -397,8 +402,8 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Control = CheckBox3
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel1
- Left = 764
- Height = 22
+ Left = 741
+ Height = 23
Top = 7
Width = 93
BorderSpacing.Around = 6
@@ -543,7 +548,7 @@ object RxDBGridMainForm: TRxDBGridMainForm
Size = 15
end
end
- object Datasource1: TDatasource
+ object Datasource1: TDataSource
DataSet = RxMemoryData1
left = 120
top = 264
@@ -607,7 +612,7 @@ object RxDBGridMainForm: TRxDBGridMainForm
OnExecute = hlpAboutExecute
end
end
- object Datasource2: TDatasource
+ object Datasource2: TDataSource
DataSet = RxMemoryData2
left = 288
top = 368
diff --git a/components/rx/trunk/languages/rxdconst.es.po b/components/rx/trunk/languages/rxdconst.es.po
index 79d876c54..8ae023568 100644
--- a/components/rx/trunk/languages/rxdconst.es.po
+++ b/components/rx/trunk/languages/rxdconst.es.po
@@ -225,6 +225,10 @@ msgstr "Tomar estructura..."
msgid "Copy only metadata"
msgstr "Copiar solo metadata"
+#: rxdconst.srxdbgridcopycellvalue
+msgid "Copy cell value"
+msgstr ""
+
#: rxdconst.srxdbgridemptifilter
msgid "(Empty)"
msgstr "(Todos)"
diff --git a/components/rx/trunk/languages/rxdconst.po b/components/rx/trunk/languages/rxdconst.po
index 92b6a84a6..1869b9b83 100644
--- a/components/rx/trunk/languages/rxdconst.po
+++ b/components/rx/trunk/languages/rxdconst.po
@@ -225,6 +225,10 @@ msgstr ""
msgid "Copy only metadata"
msgstr ""
+#: rxdconst.srxdbgridcopycellvalue
+msgid "Copy cell value"
+msgstr ""
+
#: rxdconst.srxdbgridemptifilter
msgid "(Empty)"
msgstr ""
diff --git a/components/rx/trunk/languages/rxdconst.ru.po b/components/rx/trunk/languages/rxdconst.ru.po
index e2c1a8d14..c08cd5aba 100644
--- a/components/rx/trunk/languages/rxdconst.ru.po
+++ b/components/rx/trunk/languages/rxdconst.ru.po
@@ -225,6 +225,10 @@ msgstr "Обзор структуры..."
msgid "Copy only metadata"
msgstr "Копировать только метаданные..."
+#: rxdconst.srxdbgridcopycellvalue
+msgid "Copy cell value"
+msgstr ""
+
#: rxdconst.srxdbgridemptifilter
msgid "(Empty)"
msgstr "(Нет)"
diff --git a/components/rx/trunk/languages/rxdconst.uk.po b/components/rx/trunk/languages/rxdconst.uk.po
index 0a5926a19..65685dbaa 100644
--- a/components/rx/trunk/languages/rxdconst.uk.po
+++ b/components/rx/trunk/languages/rxdconst.uk.po
@@ -234,6 +234,10 @@ msgstr "Огляд структури ..."
msgid "Copy only metadata"
msgstr "Копіювати тільки метадані ..."
+#: rxdconst.srxdbgridcopycellvalue
+msgid "Copy cell value"
+msgstr ""
+
#: rxdconst.srxdbgridemptifilter
msgid "(Empty)"
msgstr "(Немає)"
diff --git a/components/rx/trunk/rxdbgrid.pas b/components/rx/trunk/rxdbgrid.pas
index 5cfc2bdc8..5c8ec0047 100644
--- a/components/rx/trunk/rxdbgrid.pas
+++ b/components/rx/trunk/rxdbgrid.pas
@@ -107,7 +107,7 @@ type
TRxDBGridCommand = (rxgcNone, rxgcShowFindDlg, rxgcShowColumnsDlg,
rxgcShowFilterDlg, rxgcShowSortDlg, rxgcShowQuickFilter,
rxgcHideQuickFilter, rxgcSelectAll, rxgcDeSelectAll, rxgcInvertSelection,
- rxgcOptimizeColumnsWidth
+ rxgcOptimizeColumnsWidth, rxgcCopyCellValue
);
@@ -649,6 +649,7 @@ type
procedure OnSortBy(Sender: TObject);
procedure OnChooseVisibleFields(Sender: TObject);
procedure OnSelectAllRows(Sender: TObject);
+ procedure OnCopyCellValue(Sender: TObject);
procedure Loaded; override;
procedure UpdateFooterRowOnUpdateActive;
@@ -820,10 +821,10 @@ procedure RegisterRxDBGridSortEngine(RxDBGridSortEngineClass: TRxDBGridSortEngin
implementation
uses Math, rxdconst, rxstrutils, rxdbgrid_findunit, rxdbgrid_columsunit,
- rxlookup, tooledit, LCLProc, rxfilterby, rxsortby, variants;
+ rxlookup, tooledit, LCLProc, Clipbrd, rxfilterby, rxsortby, variants;
const
- EditorCommandStrs: array[0..10] of TIdentMapEntry =
+ EditorCommandStrs: array[rxgcNone .. High(TRxDBGridCommand)] of TIdentMapEntry =
(
(Value: Ord(rxgcNone); Name: 'rxcgNone'),
(Value: Ord(rxgcShowFindDlg); Name: 'rxgcShowFindDlg'),
@@ -835,7 +836,8 @@ const
(Value: Ord(rxgcSelectAll); Name: 'rxgcSelectAll'),
(Value: Ord(rxgcDeSelectAll); Name: 'rxgcDeSelectAll'),
(Value: Ord(rxgcInvertSelection); Name: 'rxgcInvertSelection'),
- (Value: Ord(rxgcOptimizeColumnsWidth); Name: 'rxgcOptimizeColumnsWidth')
+ (Value: Ord(rxgcOptimizeColumnsWidth); Name: 'rxgcOptimizeColumnsWidth'),
+ (Value: Ord(rxgcCopyCellValue); Name: 'rxgcCopyCellValue')
);
var
@@ -1700,6 +1702,7 @@ begin
CreateMenuItem('C', sRxDBGridSortByColumns, @OnSortBy);
CreateMenuItem('W', sRxDBGridSelectColumns, @OnChooseVisibleFields);
CreateMenuItem('A', sRxDBGridSelectAllRows, @OnSelectAllRows);
+ CreateMenuItem(#0, sRxDBGridCopyCellValue, @OnCopyCellValue);
end;
{$IFDEF RxDBGridDepricatedProps}
@@ -3560,6 +3563,7 @@ begin
rxgcDeSelectAll: DeSelectAllRows;
rxgcInvertSelection:InvertSelection;
rxgcOptimizeColumnsWidth:OptimizeColumnsWidthAll;
+ rxgcCopyCellValue:OnCopyCellValue(Self);
else
exit;
end;
@@ -4297,6 +4301,19 @@ begin
SelectAllRows;
end;
+procedure TRxDBGrid.OnCopyCellValue(Sender: TObject);
+begin
+ if DatalinkActive and Assigned(SelectedField) then
+ begin
+ try
+ Clipboard.Open;
+ Clipboard.AsText:=SelectedField.DisplayText;
+ finally
+ Clipboard.Close;
+ end;
+ end;
+end;
+
procedure TRxDBGrid.Loaded;
begin
inherited Loaded;
@@ -5350,23 +5367,16 @@ begin
inherited SetItem(Index, AValue);
end;
-{function TRxDBGridKeyStrokes.GetOwner: TPersistent;
-begin
- Result:=FOwn;
-end;
-}
procedure TRxDBGridKeyStrokes.Update(Item: TCollectionItem);
begin
inherited Update(Item);
- if (UpdateCount = 0) and Assigned(Owner) and
- Assigned(TRxDBGrid(Owner).FKeyStrokes) then
+ if (UpdateCount = 0) and Assigned(Owner) and Assigned(TRxDBGrid(Owner).FKeyStrokes) then
TRxDBGrid(Owner).UpdateJMenuKeys;
end;
constructor TRxDBGridKeyStrokes.Create(AOwner: TPersistent);
begin
- //FOwn := AOwner;
inherited Create(AOwner, TRxDBGridKeyStroke);
end;
@@ -5414,6 +5424,7 @@ begin
AddE(rxgcDeSelectAll, Menus.ShortCut(Ord('-'), [ssCtrl]));
AddE(rxgcInvertSelection, Menus.ShortCut(Ord('*'), [ssCtrl]));
AddE(rxgcOptimizeColumnsWidth, Menus.ShortCut(Ord('+'), [ssCtrl]));
+ AddE(rxgcCopyCellValue, Menus.ShortCut(Ord('C'), [ssCtrl]));
end;
function TRxDBGridKeyStrokes.FindRxCommand(AKey: word;
diff --git a/components/rx/trunk/rxdconst.pas b/components/rx/trunk/rxdconst.pas
index c21184218..4ac06102f 100644
--- a/components/rx/trunk/rxdconst.pas
+++ b/components/rx/trunk/rxdconst.pas
@@ -111,6 +111,7 @@ resourcestring
sRxDBGridSelectColumns = 'Select visible collumns';// Ctrl+W';'Seleccionar Columnas Ctrl+W';
sRxDBGridEmptiFilter = '(Empty)';
sRxDBGridSelectAllRows = 'Select all rows';// Ctrl+W';'Seleccionar Columnas Ctrl+W';
+ sRxDBGridCopyCellValue = 'Copy cell value';// Ctrl+W';'Seleccionar Columnas Ctrl+W';
//RxDBGrid filter form
sRxFilterFormSelectExp = 'Enter filter expression for data in table:';