diff --git a/help/h22.html b/help/h22.html index 44fa886..a2b2a52 100644 --- a/help/h22.html +++ b/help/h22.html @@ -109,6 +109,14 @@ For LoTW operations see here.
+
In order to keep the structure of the exported csv file you can check + checkbox 'Keep csv structure'. This the number of columns will always be the same and not + depend on whether specific export items are selected or not. Thus the number for each + column will stay the same and you do not need to re-design your glabels template upon + (un-)selecting items to export. Not selected items are simply exported as empty values. +
+ +
For both methods, the filtering potential can be utilized. For example, you can filter out all QSOs with DJ3 stations and print QSL labels for them. You will get such output: diff --git a/help/img/h70.png b/help/img/h70.png index 61541f4..1216964 100644 Binary files a/help/img/h70.png and b/help/img/h70.png differ diff --git a/src/fExLabelPrint.lfm b/src/fExLabelPrint.lfm index 8509d59..642fbcc 100644 --- a/src/fExLabelPrint.lfm +++ b/src/fExLabelPrint.lfm @@ -1,7 +1,7 @@ object frmExLabelPrint: TfrmExLabelPrint - Left = 709 + Left = 2485 Height = 522 - Top = 11 + Top = 248 Width = 424 HelpType = htKeyword HelpKeyword = 'help/h22.html#bh4' @@ -14,15 +14,15 @@ object frmExLabelPrint: TfrmExLabelPrint OnClose = FormClose OnShow = FormShow Position = poMainFormCenter - LCLVersion = '2.0.4.0' + LCLVersion = '2.0.10.0' object Label1: TLabel AnchorSideLeft.Control = gchkExport AnchorSideTop.Control = edtQSOsToLabel AnchorSideTop.Side = asrCenter Left = 5 - Height = 17 + Height = 15 Top = 139 - Width = 34 + Width = 36 BorderSpacing.Top = 11 Caption = 'Print ' ParentColor = False @@ -32,21 +32,21 @@ object frmExLabelPrint: TfrmExLabelPrint AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtQSOsToLabel AnchorSideTop.Side = asrCenter - Left = 94 - Height = 17 + Left = 96 + Height = 15 Top = 139 - Width = 119 + Width = 121 BorderSpacing.Left = 4 Caption = 'QSOs on one label' ParentColor = False end object lblProgress: TLabel AnchorSideLeft.Control = chkMarkSent - AnchorSideTop.Control = chkMarkSent + AnchorSideTop.Control = chkKeepCsvStructure AnchorSideTop.Side = asrBottom Left = 5 Height = 20 - Top = 431 + Top = 456 Width = 412 Alignment = taCenter AutoSize = False @@ -93,7 +93,7 @@ object frmExLabelPrint: TfrmExLabelPrint AnchorSideTop.Side = asrBottom Left = 5 Height = 97 - Top = 303 + Top = 302 Width = 412 Caption = ' Export to ' ClientHeight = 79 @@ -106,7 +106,7 @@ object frmExLabelPrint: TfrmExLabelPrint AnchorSideRight.Side = asrBottom Left = 320 Height = 25 - Top = 43 + Top = 42 Width = 75 Anchors = [akTop, akRight] BorderSpacing.Top = 3 @@ -119,7 +119,7 @@ object frmExLabelPrint: TfrmExLabelPrint AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = GroupBox1 Left = 16 - Height = 34 + Height = 33 Top = 6 Width = 379 BorderSpacing.Top = 6 @@ -131,8 +131,8 @@ object frmExLabelPrint: TfrmExLabelPrint AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gchkExport AnchorSideTop.Side = asrBottom - Left = 42 - Height = 34 + Left = 44 + Height = 33 Top = 130 Width = 48 BorderSpacing.Left = 3 @@ -147,7 +147,7 @@ object frmExLabelPrint: TfrmExLabelPrint AnchorSideTop.Side = asrBottom Left = 5 Height = 136 - Top = 167 + Top = 166 Width = 412 BorderSpacing.Top = 3 Caption = ' Remarks ' @@ -160,7 +160,7 @@ object frmExLabelPrint: TfrmExLabelPrint Left = 9 Height = 23 Top = 3 - Width = 198 + Width = 203 BorderSpacing.Left = 9 BorderSpacing.Top = 3 Caption = 'Print ''Comment(s) to QSO''' @@ -185,7 +185,7 @@ object frmExLabelPrint: TfrmExLabelPrint AnchorSideTop.Control = rbOwnRemarks AnchorSideTop.Side = asrBottom Left = 17 - Height = 34 + Height = 33 Top = 52 Width = 376 BorderSpacing.Top = 3 @@ -198,8 +198,8 @@ object frmExLabelPrint: TfrmExLabelPrint AnchorSideTop.Side = asrBottom Left = 9 Height = 23 - Top = 87 - Width = 256 + Top = 86 + Width = 262 BorderSpacing.Top = 1 Caption = 'Remove separator (;) from remarks' TabOrder = 3 @@ -211,8 +211,8 @@ object frmExLabelPrint: TfrmExLabelPrint AnchorSideTop.Side = asrBottom Left = 5 Height = 23 - Top = 403 - Width = 208 + Top = 402 + Width = 215 BorderSpacing.Top = 3 Caption = 'Mark QSLs sent after export' TabOrder = 4 @@ -223,7 +223,7 @@ object frmExLabelPrint: TfrmExLabelPrint AnchorSideTop.Side = asrBottom Left = 11 Height = 25 - Top = 463 + Top = 488 Width = 75 BorderSpacing.Left = 6 BorderSpacing.Top = 12 @@ -238,7 +238,7 @@ object frmExLabelPrint: TfrmExLabelPrint AnchorSideTop.Side = asrBottom Left = 174 Height = 25 - Top = 463 + Top = 488 Width = 75 BorderSpacing.Top = 12 Caption = 'Help' @@ -252,7 +252,7 @@ object frmExLabelPrint: TfrmExLabelPrint AnchorSideRight.Side = asrBottom Left = 336 Height = 25 - Top = 463 + Top = 488 Width = 75 Anchors = [akTop, akRight] BorderSpacing.Top = 12 @@ -268,7 +268,7 @@ object frmExLabelPrint: TfrmExLabelPrint Left = 5 Height = 23 Top = 3 - Width = 127 + Width = 131 BorderSpacing.Left = 5 BorderSpacing.Top = 3 Caption = 'Export all QSOs' @@ -280,19 +280,31 @@ object frmExLabelPrint: TfrmExLabelPrint AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtQSOsToLabel AnchorSideTop.Side = asrCenter - Left = 229 + Left = 233 Height = 25 - Top = 135 + Top = 134 Width = 184 BorderSpacing.Left = 16 Caption = 'Choose fields for export' OnClick = btnExportFieldsPrefClick TabOrder = 9 end + object chkKeepCsvStructure: TCheckBox + AnchorSideLeft.Control = GroupBox1 + AnchorSideTop.Control = chkMarkSent + AnchorSideTop.Side = asrBottom + Left = 5 + Height = 23 + Top = 428 + Width = 149 + BorderSpacing.Top = 3 + Caption = 'Keep csv structure' + TabOrder = 10 + end object dlgSave: TSaveDialog DefaultExt = '.csv' Filter = 'CSV files|*.csv' - left = 360 - top = 192 + Left = 360 + Top = 192 end end diff --git a/src/fExLabelPrint.pas b/src/fExLabelPrint.pas index 1148928..88483dd 100644 --- a/src/fExLabelPrint.pas +++ b/src/fExLabelPrint.pas @@ -22,6 +22,7 @@ type btnHelp: TButton; btnExportFieldsPref : TButton; Cancel: TButton; + chkKeepCsvStructure: TCheckBox; chkRemoveSep: TCheckBox; chkAllQSOs: TCheckBox; chkMarkSent: TCheckBox; @@ -87,6 +88,8 @@ begin edtQSOsToLabel.Text := cqrini.ReadString('QslExport','QSOs','6'); edtRemarks.Text := cqrini.ReadString('QslExport','Remarks',''); chkRemoveSep.Checked := cqrini.ReadBool('QslExport','RemoveSep',True); + chkKeepCsvStructure.Checked := cqrini.ReadBool('QSLExport', 'KeepCsvStructure', False); + if edtRemarks.Text <> '' then rbOwnRemarks.Checked end; @@ -327,17 +330,36 @@ var Write(f,FormatDateTime('mm/dd/yyyy',dmData.Q.FieldByName('qsodate').AsDateTime),C_SEP); FormatSettings.DateSeparator:=sep; end; + end + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); end; if cqrini.ReadBool('QSLExport', 'time_on', True) then - Write(f,dmData.Q.FieldByName('time_on').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('time_on').AsString,C_SEP) + else + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); if cqrini.ReadBool('QSLExport', 'time_off', True) then - Write(f,dmData.Q.FieldByName('time_off').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('time_off').AsString,C_SEP) + else + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); if cqrini.ReadBool('QSLExport', 'CallSign', True) then - Write(f,dmData.Q.FieldByName('callsign').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('callsign').AsString,C_SEP) + else + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); if cqrini.ReadBool('QSLExport', 'Mode', True) then - Write(f,dmData.Q.FieldByName('mode').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('mode').AsString,C_SEP) + else + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); if cqrini.ReadBool('QSLExport', 'Freq', True) then - Write(f,FloatToStr(dmData.Q.FieldByName('freq').AsFloat),C_SEP); + Write(f,FloatToStr(dmData.Q.FieldByName('freq').AsFloat),C_SEP) + else + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); if cqrini.ReadBool('QSLExport', 'RST_S', True) then begin @@ -351,6 +373,15 @@ var Write(f,rst_tmp[2],C_SEP); Write(f,rst_tmp[3],C_SEP); end; + end + else begin + if chkKeepCsvStructure.Checked then + begin + if not cqrini.ReadBool('QSLExport','SplitRST_R',False) then + Write(f,C_SEP) + else + Write(f,C_SEP,C_SEP,C_SEP); + end; end; if cqrini.ReadBool('QSLExport', 'RST_R', True) then begin @@ -364,49 +395,142 @@ var Write(f,rst_tmp[2],C_SEP); Write(f,rst_tmp[3],C_SEP); end; + end + else begin + if chkKeepCsvStructure.Checked then + begin + if not cqrini.ReadBool('QSLExport','SplitRST_R',False) then + Write(f,C_SEP) + else + Write(f,C_SEP,C_SEP,C_SEP); + end; end; if cqrini.ReadBool('QSLExport', 'Name', True) then - Write(f,dmData.Q.FieldByName('name').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('name').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'QTH', True) then - Write(f,dmData.Q.FieldByName('qth').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('qth').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'band', True) then - Write(f,dmData.Q.FieldByName('band').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('band').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'Propagation', True) then - Write(f,dmData.Q.FieldByName('prop_mode').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('prop_mode').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'Satellite', True) then - Write(f,dmData.Q.FieldByName('satellite').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('satellite').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'ContestName', True) then - Write(f, dmData.Q.FieldByName('contestname').AsString,C_SEP); + Write(f, dmData.Q.FieldByName('contestname').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'QSL_S', True) then - Write(f,dmData.Q.FieldByName('qsl_s').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('qsl_s').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'QSL_R', True) then - Write(f,dmData.Q.FieldByName('qsl_r').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('qsl_r').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'QSL_VIA', True) then - Write(f,dmData.Q.FieldByName('qsl_via').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('qsl_via').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'locator', True) then - Write(f,dmData.Q.FieldByName('loc').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('loc').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'MyLoc', True) then - Write(f,dmData.Q.FieldByName('my_loc').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('my_loc').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'Distance', True) then - Write(f,frmMain.CalcQrb(dmData.Q.FieldByName('my_loc').AsString,dmData.Q.FieldByName('loc').AsString,False),C_SEP); + Write(f,frmMain.CalcQrb(dmData.Q.FieldByName('my_loc').AsString,dmData.Q.FieldByName('loc').AsString,False),C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'IOTA', True) then - Write(f,dmData.Q.FieldByName('iota').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('iota').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'award', True) then - Write(f,dmData.Q.FieldByName('award').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('award').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'power', True) then - Write(f,dmData.Q.FieldByName('pwr').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('pwr').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'Remarks', True) then - Write(f,dmData.Q.FieldByName('remarks').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('remarks').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'QSLMsg', True) then - Write(f,dmData.Q.FieldByName('qslmsg').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('qslmsg').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'ContestNrS', True) then - Write(f,dmData.Q.FieldByName('stx').AsString ,C_SEP); + Write(f,dmData.Q.FieldByName('stx').AsString ,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'ContestMsgS', True) then - Write(f,dmData.Q.FieldByName('stx_string').AsString,C_SEP); + Write(f,dmData.Q.FieldByName('stx_string').AsString,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'ContestNrR', True) then - Write(f,dmData.Q.FieldByName('srx').AsString ,C_SEP); + Write(f,dmData.Q.FieldByName('srx').AsString ,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; if cqrini.ReadBool('QSLExport', 'ContestMsgR', True) then - Write(f,dmData.Q.FieldByName('srx_string').AsString ,C_SEP); + Write(f,dmData.Q.FieldByName('srx_string').AsString ,C_SEP) + else begin + if chkKeepCsvStructure.Checked then + Write(f,C_SEP); + end; end; @@ -540,7 +664,8 @@ begin cqrini.WriteString('QslExport','Path',edtFile.Text); cqrini.WriteString('QslExport','QSOs',edtQSOsToLabel.Text); cqrini.WriteString('QslExport','Remarks',edtRemarks.Text); - cqrini.ReadBool('QslExport','RemoveSep',chkRemoveSep.Checked) + cqrini.WriteBool('QSLExport', 'KeepCsvStructure', chkKeepCsvStructure.Checked); + cqrini.WriteBool('QslExport','RemoveSep',chkRemoveSep.Checked) end; procedure TfrmExLabelPrint.btnExportFieldsPrefClick(Sender : TObject);