@@ -30,6 +30,7 @@ interface
3030 TfrmExportGrid = class (TExtForm)
3131 btnOK: TButton;
3232 btnCancel: TButton;
33+ chkFocusedColumnOnly: TCheckBox;
3334 grpSelection: TRadioGroup;
3435 grpOutput: TGroupBox;
3536 radioOutputCopyToClipboard: TRadioButton;
@@ -201,6 +202,7 @@ procedure TfrmExportGrid.FormCreate(Sender: TObject);
201202 grpSelection.ItemIndex := 0 ; // Always use selected cells in copy mode
202203 chkIncludeColumnNames.Checked := AppSettings.ReadBool(asGridExportClpColumnNames);
203204 chkIncludeAutoIncrement.Checked := AppSettings.ReadBool(asGridExportClpIncludeAutoInc);
205+ chkFocusedColumnOnly.Checked := False;
204206 chkIncludeQuery.Checked := False; // Always off in copy mode
205207 chkRemoveLinebreaks.Checked := AppSettings.ReadBool(asGridExportClpRemoveLinebreaks);
206208 chkOpenFile.Checked := False; // Always off in copy mode
@@ -215,6 +217,7 @@ procedure TfrmExportGrid.FormCreate(Sender: TObject);
215217 grpSelection.ItemIndex := AppSettings.ReadInt(asGridExportSelection);
216218 chkIncludeColumnNames.Checked := AppSettings.ReadBool(asGridExportColumnNames);
217219 chkIncludeAutoIncrement.Checked := AppSettings.ReadBool(asGridExportIncludeAutoInc);
220+ chkFocusedColumnOnly.Checked := AppSettings.ReadBool(asGridExportFocusedColumnOnly);
218221 chkIncludeQuery.Checked := AppSettings.ReadBool(asGridExportIncludeQuery);
219222 chkRemoveLinebreaks.Checked := AppSettings.ReadBool(asGridExportRemoveLinebreaks);
220223 chkOpenFile.Checked := AppSettings.ReadBool(asGridExportOpenFile);
@@ -228,12 +231,19 @@ procedure TfrmExportGrid.FormCreate(Sender: TObject);
228231
229232
230233procedure TfrmExportGrid.FormShow (Sender: TObject);
234+ var
235+ FocusedCol: String;
231236begin
232237 // Show dialog. Expect "Grid" property to be set now by the caller.
233238 Width := AppSettings.ReadIntDpiAware(asGridExportWindowWidth, Self);
234239 Height := AppSettings.ReadIntDpiAware(asGridExportWindowHeight, Self);
235240 chkIncludeAutoIncrement.OnClick := CalcSize;
241+ chkFocusedColumnOnly.OnClick := CalcSize;
236242 CalcSize(Sender);
243+ // Show name of focused column
244+ FocusedCol := IfThen(Grid.FocusedColumn > NoColumn, Grid.Header.Columns[Grid.FocusedColumn].Text, ' ' );
245+ chkFocusedColumnOnly.Caption := f_(' Only focused column (%s)' , [FocusedCol]);
246+ chkFocusedColumnOnly.Enabled := not FocusedCol.IsEmpty;
237247end ;
238248
239249
@@ -252,6 +262,7 @@ procedure TfrmExportGrid.FormClose(Sender: TObject; var Action: TCloseAction);
252262 AppSettings.WriteInt(asGridExportSelection, grpSelection.ItemIndex);
253263 AppSettings.WriteBool(asGridExportColumnNames, chkIncludeColumnNames.Checked);
254264 AppSettings.WriteBool(asGridExportIncludeAutoInc, chkIncludeAutoIncrement.Checked);
265+ AppSettings.WriteBool(asGridExportFocusedColumnOnly, chkFocusedColumnOnly.Checked);
255266 AppSettings.WriteBool(asGridExportIncludeQuery, chkIncludeQuery.Checked);
256267 AppSettings.WriteBool(asGridExportRemoveLinebreaks, chkRemoveLinebreaks.Checked);
257268 AppSettings.WriteBool(asGridExportOpenFile, chkOpenFile.Checked);
@@ -476,11 +487,12 @@ procedure TfrmExportGrid.CalcSize(Sender: TObject);
476487var
477488 GridData: TDBQuery;
478489 Node: PVirtualNode;
479- Col, ExcludeCol : TColumnIndex;
490+ Col, ExcludeAutoIncCol, IncludeFocusedCol : TColumnIndex;
480491 ResultCol: Integer;
481492 RowNum: PInt64;
482493 SelectedSize, AllSize: Int64;
483494 CalculatedCount, SelectedCount, AllCount: Int64;
495+ DoIncludeCol: Boolean;
484496begin
485497 GridData := Mainform.GridResult(Grid);
486498 if not Assigned(GridData) then begin
@@ -489,10 +501,13 @@ procedure TfrmExportGrid.CalcSize(Sender: TObject);
489501 end ;
490502 AllSize := 0 ;
491503 SelectedSize := 0 ;
492- chkIncludeAutoIncrement.Enabled := GridData.AutoIncrementColumn > -1 ;
493- ExcludeCol := -1 ;
504+ chkIncludeAutoIncrement.Enabled := ( GridData.AutoIncrementColumn > -1 ) and ( not chkFocusedColumnOnly.Checked) ;
505+ ExcludeAutoIncCol := -1 ;
494506 if chkIncludeAutoIncrement.Enabled and (not chkIncludeAutoIncrement.Checked) then
495- ExcludeCol := GridData.AutoIncrementColumn;
507+ ExcludeAutoIncCol := GridData.AutoIncrementColumn;
508+ IncludeFocusedCol := -1 ;
509+ if chkFocusedColumnOnly.Enabled and chkFocusedColumnOnly.Checked then
510+ IncludeFocusedCol := Grid.FocusedColumn;
496511
497512 Node := GetNextNode(Grid, nil , False);
498513 CalculatedCount := 0 ;
@@ -510,7 +525,9 @@ procedure TfrmExportGrid.CalcSize(Sender: TObject);
510525 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
511526 while Col > NoColumn do begin
512527 ResultCol := Col - 1 ;
513- if Col <> ExcludeCol then begin
528+ DoIncludeCol := (Col <> ExcludeAutoIncCol) and
529+ ((IncludeFocusedCol < 0 ) or (Col = IncludeFocusedCol));
530+ if DoIncludeCol then begin
514531 Inc(AllSize, GridData.ColumnLengths(ResultCol));
515532 if vsSelected in Node.States then
516533 Inc(SelectedSize, GridData.ColumnLengths(ResultCol));
@@ -651,7 +668,7 @@ function TfrmExportGrid.FormatLatex(Text: String): String;
651668
652669procedure TfrmExportGrid.btnOKClick (Sender: TObject);
653670var
654- Col, ExcludeCol : TColumnIndex;
671+ Col, ExcludeAutoIncCol, IncludeFocusedCol : TColumnIndex;
655672 ResultCol: Integer;
656673 Header, Data, tmp, Encloser, Separator, Terminator, TableName, Filename: String;
657674 Node: PVirtualNode;
@@ -666,6 +683,12 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
666683 Encoding: TEncoding;
667684 Bom: TBytes;
668685 CurrentExportFormat: TGridExportFormat;
686+
687+ function DoIncludeCol : Boolean;
688+ begin
689+ Result := (Col <> ExcludeAutoIncCol) and
690+ ((IncludeFocusedCol < 0 ) or (Col = IncludeFocusedCol))
691+ end ;
669692begin
670693 Filename := GetOutputFilename(editFilename.Text, MainForm.ActiveDbObj);
671694
@@ -694,9 +717,12 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
694717 except
695718 TableName := _(' UnknownTable' );
696719 end ;
697- ExcludeCol := NoColumn;
698- if (not chkIncludeAutoIncrement.Checked) or (not chkIncludeAutoIncrement.Enabled) then
699- ExcludeCol := GridData.AutoIncrementColumn + 1 ;
720+ ExcludeAutoIncCol := NoColumn;
721+ if chkIncludeAutoIncrement.Enabled and (not chkIncludeAutoIncrement.Checked) then
722+ ExcludeAutoIncCol := GridData.AutoIncrementColumn + 1 ;
723+ IncludeFocusedCol := NoColumn;
724+ if chkFocusedColumnOnly.Checked then
725+ IncludeFocusedCol := Grid.FocusedColumn;
700726 // Calling (Get)ExportFormat is slow, so we store it in a local variable
701727 CurrentExportFormat := ExportFormat;
702728
@@ -759,7 +785,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
759785 CodeIndent(4 ) + ' <tr>' + sLineBreak;
760786 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
761787 while Col > NoColumn do begin
762- if Col <> ExcludeCol then
788+ if DoIncludeCol then
763789 Header := Header + CodeIndent(5 ) + ' <th class="col' + IntToStr(Col) + ' ">' + Grid.Header.Columns[Col].Text + ' </th>' + sLineBreak;
764790 Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
765791 end ;
@@ -779,7 +805,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
779805 while Col > NoColumn do begin
780806 // Alter column name in header if data is not raw.
781807 ResultCol := Col - 1 ;
782- if Col <> ExcludeCol then begin
808+ if DoIncludeCol then begin
783809 Data := Grid.Header.Columns[Col].Text;
784810 if (GridData.DataType(ResultCol).Category in [dtcBinary, dtcSpatial]) and (not Mainform.actBlobAsText.Checked) then
785811 Data := ' HEX(' + Data + ' )' ;
@@ -811,15 +837,15 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
811837 Header := Header + ' {' ;
812838 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
813839 while Col > NoColumn do begin
814- if Col <> ExcludeCol then
840+ if DoIncludeCol then
815841 Header := Header + ' c ' ;
816842 Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
817843 end ;
818844 Header := Header + ' }' + CRLF;
819845 if chkIncludeColumnNames.Checked then begin
820846 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
821847 while Col > NoColumn do begin
822- if Col <> ExcludeCol then
848+ if DoIncludeCol then
823849 Header := Header + FormatLatex(Grid.Header.Columns[Col].Text) + Separator;
824850 Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
825851 end ;
@@ -836,7 +862,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
836862 Header := TrimLeft(Separator);
837863 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
838864 while Col > NoColumn do begin
839- if Col <> ExcludeCol then
865+ if DoIncludeCol then
840866 Header := Header + Grid.Header.Columns[Col].Text + Separator;
841867 Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
842868 end ;
@@ -864,7 +890,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
864890 Header := Header + TrimLeft(Separator);
865891 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
866892 while Col > NoColumn do begin
867- if Col <> ExcludeCol then begin
893+ if DoIncludeCol then begin
868894 if chkIncludeColumnNames.Checked then
869895 Header := Header + Grid.Header.Columns[Col].Text + Separator
870896 else
@@ -878,7 +904,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
878904 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
879905 while Col > NoColumn do begin
880906 ResultCol := Col - 1 ;
881- if Col <> ExcludeCol then begin
907+ if DoIncludeCol then begin
882908 Header := Header + ' ---' ;
883909 if GridData.DataType(ResultCol).Category in [dtcInteger, dtcReal] then
884910 Header := Header + ' :' ;
@@ -946,7 +972,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
946972 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
947973 while Col > NoColumn do begin
948974 ResultCol := Col - 1 ;
949- if (Col <> ExcludeCol) and (not GridData.ColIsVirtual(ResultCol)) then
975+ if DoIncludeCol and (not GridData.ColIsVirtual(ResultCol)) then
950976 tmp := tmp + GridData.Connection.QuoteIdent(Grid.Header.Columns[Col].Text)+' , ' ;
951977 Col := Grid.Header.Columns.GetNextVisibleColumn(Col);
952978 end ;
@@ -983,7 +1009,7 @@ procedure TfrmExportGrid.btnOKClick(Sender: TObject);
9831009 Col := Grid.Header.Columns.GetFirstVisibleColumn(True);
9841010 while Col > NoColumn do begin
9851011 ResultCol := Col - 1 ;
986- if Col <> ExcludeCol then begin
1012+ if DoIncludeCol then begin
9871013 if (GridData.DataType(ResultCol).Category in [dtcBinary, dtcSpatial])
9881014 and (not Mainform.actBlobAsText.Checked) then begin
9891015 Data := GridData.HexValue(ResultCol);
0 commit comments