Skip to content

Commit 84c63c6

Browse files
committed
feat: add a separate menu item "copy formatted text", using the old code for copying SynEdit-highlighted text as HTML
Refs #2487
1 parent e7646a0 commit 84c63c6

3 files changed

Lines changed: 53 additions & 3 deletions

File tree

extra/locale/heidisql.po

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ msgid ""
77
msgstr ""
88
"Project-Id-Version: HeidiSQL\n"
99
"POT-Creation-Date: 2012-11-05 21:40\n"
10-
"PO-Revision-Date: 2026-05-15 12:41+0200\n"
10+
"PO-Revision-Date: 2026-05-24 13:19+0200\n"
1111
"Last-Translator: Ansgar Becker <anse@heidisql.com>\n"
1212
"Language-Team: English (http://www.transifex.com/projects/p/heidisql/language/en/)\n"
1313
"Language: en\n"
@@ -6836,3 +6836,9 @@ msgstr "Default role:"
68366836

68376837
msgid "Foreign key table not found"
68386838
msgstr "Foreign key table not found"
6839+
6840+
msgid "Copy formatted text"
6841+
msgstr "Copy formatted text"
6842+
6843+
msgid "Copies selected text with formatting from current editor to clipboard"
6844+
msgstr "Copies selected text with formatting from current editor to clipboard"

source/main.lfm

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3639,6 +3639,9 @@ object MainForm: TMainForm
36393639
object CopyItem: TMenuItem
36403640
Action = actCopy
36413641
end
3642+
object Copyformattedtext1: TMenuItem
3643+
Action = actCopyFormatted
3644+
end
36423645
object MenuItem3: TMenuItem
36433646
Action = actCopyColumnNames
36443647
end
@@ -5103,6 +5106,13 @@ object MainForm: TMainForm
51035106
ImageIndex = 3
51045107
OnExecute = menuCopyColumnNamesClick
51055108
end
5109+
object actCopyFormatted: TAction
5110+
Category = 'Various'
5111+
Caption = 'Copy formatted text'
5112+
Hint = 'Copies selected text with formatting from current editor to clipboard'
5113+
ImageIndex = 3
5114+
OnExecute = actCopyFormattedExecute
5115+
end
51065116
end
51075117
object ImageListMain: TImageList
51085118
Scaled = True

source/main.pas

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ interface
1515
LazStringUtils, dbconnection, dbstructures, dbstructures.mysql, generic_types,
1616
apphelpers, extra_controls, createdatabase, SynEditMarkup, SynEditMarkupBracket,
1717
searchreplace, ImgList, IniFiles, LazFileUtils, LazUTF8, tabletools,
18-
lazaruscompat, extfiledialog, process, SynEditMiscClasses, Contnrs;
18+
lazaruscompat, extfiledialog, process, SynEditMiscClasses, Contnrs, SynExportHTML;
1919

2020

2121
type
@@ -828,6 +828,8 @@ TMainForm = class(TExtForm)
828828
menuDisplayLogPanel1: TMenuItem;
829829
menuTreefilters1: TMenuItem;
830830
Separator1: TMenuItem;
831+
actCopyFormatted: TAction;
832+
Copyformattedtext1: TMenuItem;
831833
procedure actCreateDBObjectExecute(Sender: TObject);
832834
procedure actNextTabExecute(Sender: TObject);
833835
procedure actPreviousTabExecute(Sender: TObject);
@@ -1232,6 +1234,7 @@ TMainForm = class(TExtForm)
12321234
procedure actQueryTableExecute(Sender: TObject);
12331235
procedure actDisplayLogPanelExecute(Sender: TObject);
12341236
procedure actDisplayTreeFiltersExecute(Sender: TObject);
1237+
procedure actCopyFormattedExecute(Sender: TObject);
12351238
private
12361239
// Executable file details
12371240
FAppVerMajor: Integer;
@@ -11927,7 +11930,6 @@ procedure TMainForm.actCopyOrCutExecute(Sender: TObject);
1192711930
ClpFormat: Word;
1192811931
//ClpData: THandle;
1192911932
//APalette: HPalette;
11930-
//Exporter: TSynExporterHTML;
1193111933
Results: TDBQuery;
1193211934
RowNum: PInt64;
1193311935
ExportDialog: TfrmExportGrid;
@@ -12015,6 +12017,38 @@ procedure TMainForm.actCopyOrCutExecute(Sender: TObject);
1201512017
Screen.Cursor := crDefault;
1201612018
end;
1201712019

12020+
procedure TMainForm.actCopyFormattedExecute(Sender: TObject);
12021+
var
12022+
Exporter: TSynExporterHTML;
12023+
SynMemo: TSynMemo;
12024+
begin
12025+
// Copy formatted SQL text to clipboard
12026+
if not (Screen.ActiveControl is TSynMemo) then begin
12027+
Beep;
12028+
LogSQL('Active control is not a SynMemo');
12029+
Exit;
12030+
end;
12031+
12032+
SynMemo := TSynMemo(Screen.ActiveControl);
12033+
if SynMemo.Highlighter = nil then begin
12034+
Beep;
12035+
LogSQL('No highlighter assigned to active SynMemo');
12036+
Exit;
12037+
end;
12038+
12039+
Exporter := TSynExporterHTML.Create(nil);
12040+
try
12041+
Exporter.Title := APPNAME;
12042+
Exporter.UseBackground := True;
12043+
Exporter.Highlighter := SynMemo.Highlighter;
12044+
Exporter.ExportAsText := False;
12045+
Exporter.Options := Exporter.Options + [heoWinClipHeader];
12046+
Exporter.ExportAll(Explode(SLineBreak, SynMemo.SelText));
12047+
Exporter.CopyToClipboard;
12048+
finally
12049+
Exporter.Free;
12050+
end;
12051+
end;
1201812052

1201912053
procedure TMainForm.actPasteExecute(Sender: TObject);
1202012054
var

0 commit comments

Comments
 (0)