fpspreadsheet: Beginning to integrate hyperlinks into visual demos --> THyperlinkForm (not complete yet).

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4055 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2015-03-19 23:38:16 +00:00
parent 2252e04cec
commit 155bbd8662
9 changed files with 1361 additions and 26 deletions

View File

@ -60,7 +60,7 @@
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item2> </Item2>
</RequiredPackages> </RequiredPackages>
<Units Count="6"> <Units Count="7">
<Unit0> <Unit0>
<Filename Value="demo_ctrls.lpr"/> <Filename Value="demo_ctrls.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -103,6 +103,14 @@
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="scurrencyform"/> <UnitName Value="scurrencyform"/>
</Unit5> </Unit5>
<Unit6>
<Filename Value="..\shared\shyperlinkform.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="HyperlinkForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="sHyperlinkForm"/>
</Unit6>
</Units> </Units>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
@ -120,6 +128,9 @@
<SmartLinkUnit Value="True"/> <SmartLinkUnit Value="True"/>
</CodeGeneration> </CodeGeneration>
<Linking> <Linking>
<Debugging>
<DebugInfoType Value="dsDwarf2Set"/>
</Debugging>
<Options> <Options>
<Win32> <Win32>
<GraphicApplication Value="True"/> <GraphicApplication Value="True"/>

View File

@ -7,7 +7,7 @@ uses
cthreads, cthreads,
{$ENDIF}{$ENDIF} {$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset Interfaces, // this includes the LCL widgetset
Forms, main Forms, main, sHyperlinkForm
{ you can add units after this }; { you can add units after this };
{$R *.res} {$R *.res}

View File

@ -80,7 +80,7 @@ object MainForm: TMainForm
'FileName=' 'FileName='
'FileFormat=sfExcel8' 'FileFormat=sfExcel8'
'ActiveWorksheet=Sheet1' 'ActiveWorksheet=Sheet1'
'Options=boBufStream, boCalcBeforeSaving, boReadFormulas' 'Options=boAutoCalc, boCalcBeforeSaving, boReadFormulas'
'FormatSettings=' 'FormatSettings='
' ThousandSeparator=.' ' ThousandSeparator=.'
' DecimalSeparator=.' ' DecimalSeparator=.'
@ -432,7 +432,7 @@ object MainForm: TMainForm
Style = tbsDivider Style = tbsDivider
end end
object ToolButton2: TToolButton object ToolButton2: TToolButton
Left = 403 Left = 480
Top = 0 Top = 0
Action = AcFileExit Action = AcFileExit
end end
@ -539,11 +539,34 @@ object MainForm: TMainForm
Style = tbsDivider Style = tbsDivider
end end
object ToolButton4: TToolButton object ToolButton4: TToolButton
Left = 427 Left = 504
Top = 0 Top = 0
Caption = 'ToolButton4' Caption = 'ToolButton4'
OnClick = ToolButton4Click OnClick = ToolButton4Click
end end
object ToolButton50: TToolButton
Left = 403
Top = 0
Action = AcHyperlinkNew
end
object ToolButton51: TToolButton
Left = 427
Top = 0
Action = AcHyperlinkEdit
end
object ToolButton53: TToolButton
Left = 451
Top = 0
Action = AcHyperlinkDelete
end
object ToolButton54: TToolButton
Left = 475
Height = 24
Top = 0
Width = 5
Caption = 'ToolButton54'
Style = tbsDivider
end
end end
object ToolBar3: TToolBar object ToolBar3: TToolBar
Left = 0 Left = 0
@ -1453,12 +1476,38 @@ object MainForm: TMainForm
Hint = 'Define number format settings' Hint = 'Define number format settings'
OnExecute = AcSettingsFormatSettingsExecute OnExecute = AcSettingsFormatSettingsExecute
end end
object AcHyperlinkNew: TsCellHyperlinkAction
Category = 'FPSpreadsheet'
WorkbookSource = WorkbookSource
Mode = chmNew
OnHyperlink = AcHyperlinkNewHyperlink
Caption = 'New hyperlink...'
Hint = 'Add hyperlink to active cell'
ImageIndex = 57
end
object AcHyperlinkEdit: TsCellHyperlinkAction
Category = 'FPSpreadsheet'
WorkbookSource = WorkbookSource
Mode = chmEdit
OnHyperlink = AcHyperlinkEditHyperlink
Caption = 'Edit hyperlink...'
Hint = 'Edit hyperlink of selected cell'
ImageIndex = 59
end
object AcHyperlinkDelete: TsCellHyperlinkAction
Category = 'FPSpreadsheet'
WorkbookSource = WorkbookSource
Mode = chmDelete
Caption = 'Delete hyperlink'
Hint = 'Delete hyperlink from selected cell'
ImageIndex = 58
end
end end
object ImageList: TImageList object ImageList: TImageList
left = 176 left = 176
top = 312 top = 312
Bitmap = { Bitmap = {
4C69430000001000000010000000003F9300003F9300003F9300003F9424003F 4C69460000001000000010000000003F9300003F9300003F9300003F9424003F
948A003E93CC004095CC004095CC004095CC004095CC004095CC004095CC0040 948A003E93CC004095CC004095CC004095CC004095CC004095CC004095CC0040
95CC004095CC00409599003F9400003F9300003F9324003F938A0E4B9CD33F76 95CC004095CC00409599003F9400003F9300003F9324003F938A0E4B9CD33F76
C0EC5D90D4FF3365A9FFA0A0A0FFA9A9A9FFA9A9A9FFAAAAAAFFACACACFFAEAE C0EC5D90D4FF3365A9FFA0A0A0FFA9A9A9FFA9A9A9FFAAAAAAFFACACACFFAEAE
@ -3282,7 +3331,103 @@ object MainForm: TMainForm
000000000000000000FF014F68AB015F773D0000000000000000000000000000 000000000000000000FF014F68AB015F773D0000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF 0000000000000000000000000000C7740200CB770200DB830300E1870308E58A
0344E68B038AE68B03ACE68B03BBE68B03ACE68B038AE58A0344E1870308DB83
0300CB770200C7740200C7740200C7740200CB770200D9820320DB830399E29C
37CFECC487EBF2D5A6F8F2D9B2FEFCF1CDF8F6DCA5EBE6A645CFDB830399D982
0320CB770200C7740200C7740200C7740200C9760220CF7F0FB0E2B36FE6EFD7
ABFFFCF2CCFFF1D5A5FFEFCE9BFFF8EAC6FFFFFAD7FFFFF9D7FFEDCB8EE6CF7F
0FB0C9760220C7740200C7740200B5670209BA6A029EDDB06FE7E7C389FFF8E7
BAFFFEF2CCFFEFD4A5FFF2D9ADFFF8E9C3FFFCF0CAFFFFF5CAFFFFF4C6FFE6C3
86E7BA6A029EB5670209B5670200A65C0147B87A2AD5DAA95FFFDFB268FFF4D9
A1FFE4BE82FFE4BD7DFFF3D8A7FFFFEDBFFFDCB57EFFF4D9A3FFFFE8AEFFFBE3
ACFFB67525D5A65C0147A35A010097510192CE9D5EEFD79E48FFD8A045FFD8A3
4FFFDCAA57FFDEAD5DFFDFB069FFD2A05CFFC9934EFFFAD18FFFEDBF7AFFE0AD
62FFCE9D5AEF9751019297510100894700B8E8B571FAD49541FFCD8F2FFFD498
38FFD49B3BFFD59C3EFFCF953CFFE6AD5EFFFDC577FFF5BB6CFFCE8F3EFFCB8B
30FFCE984AFA894700B889470000814100C9BC7F38FEE59E43FFC98525FFCD8C
28FFCE8C29FFCE8D2AFFCB8A29FFCE8A32FFD7903EFFF5AD54FFB9741DFFD48D
32FFC88C3EFE814100C981410000804000B9CB8A3BFAC88221FFCC8724FFCE8A
25FFCE8A27FFCE8A27FFCE8A28FFC88425FFDC9036FFF5A546FFB96F1EFFFFAD
4BFFE9A351FA804000B98040000085430094B8772BF0D28926FFD38B28FFD48E
2CFFD48F30FFD59132FFD59132FFD18D30FFDC9137FFD1842FFF619B13FF44AA
0EFF609E19F885430094854300008D480049A35D12DADC9133FFDC9132FFDE95
3AFFDF9942FFDF9C47FFE09D48FFDF9B46FFDC9741FFCF8635FF43A812FF75EE
64FF309A06F86E5E00494F720000964E0009995000A4CA7E28EBE79942FFE9A0
4EFFEAA659FFEBAA60FFEBAB63FFEBAA60FF68A023FF3A9B0FFF41A617FF66EB
55FF259300ED139D00CE129C0099A2570000A4580022AA5D04BAD48732EBF0A8
5EFFF2B06BFFF3B473FFF3B576FFF3B473FF3D9B16FF52E741FF52E741FF52E7
41FF52E741FF52E741FF109500CCA2570000A5590000B0600022B16100A4C576
1CD9E59B4FF0F1AD6AFAF6B475FEF1AD6AFA61901CF72E8805F8258600ED3DE2
2CFF0E8C00CC0E8C00CC0E8D0099A2570000A5590000B1610000B6640009B967
0049BA670094BA6700B9BA6700C9BA6700B9BA670094B96700490D8300CE2BDF
1AFF0C8300CC0D8800000E8C0000A2570000A5590000B1610000B6640000BA67
0000BC680000BC680000BC680000BC680000BC680000626D0000066D00990569
00CC066D0099077100000E8C0000C7740200CB770200DB830300E1870308E58A
0344E68B038AE68B03ACE68B03BBE68B03ACE68B038AE58A0344E1870308DB83
0300CB770200C7740200647F5100C7740200CB770200D9820320DB830399E29C
37CFECC487EBF2D5A6F8F2D9B2FEFCF1CDF8F6DCA5EBE6A645CFDB830399D982
0320CB770200C7740200C7740200C7740200C9760220CF7F0FB0E2B36FE6EFD7
ABFFFCF2CCFFF1D5A5FFEFCE9BFFF8EAC6FFFFFAD7FFFFF9D7FFEDCB8EE6CF7F
0FB0C9760220C7740200C7740200B5670209BA6A029EDDB06FE7E7C389FFF8E7
BAFFFEF2CCFFEFD4A5FFF2D9ADFFF8E9C3FFFCF0CAFFFFF5CAFFFFF4C6FFE6C3
86E7BA6A029EB5670209B5670200A65C0147B87A2AD5DAA95FFFDFB268FFF4D9
A1FFE4BE82FFE4BD7DFFF3D8A7FFFFEDBFFFDCB57EFFF4D9A3FFFFE8AEFFFBE3
ACFFB67525D5A65C0147A35A010097510192CE9D5EEFD79E48FFD8A045FFD8A3
4FFFDCAA57FFDEAD5DFFDFB069FFD2A05CFFC9934EFFFAD18FFFEDBF7AFFE0AD
62FFCE9D5AEF9751019297510100894700B8E8B571FAD49541FFCD8F2FFFD498
38FFD49B3BFFD59C3EFFCF953CFFE6AD5EFFFDC577FFF5BB6CFFCE8F3EFFCB8B
30FFCE984AFA894700B889470000814100C9BC7F38FEE59E43FFC98525FFCD8C
28FFCE8C29FFCE8D2AFFCB8A29FFCE8A32FFD7903EFFF5AD54FFB9741DFFD48D
32FFC88C3EFE814100C981410000804000B9CB8A3BFAC88221FFCC8724FFCE8A
25FFCE8A27FFCE8A27FFCE8A28FFC88425FFDC9036FFF5A546FFB96F1EFFFFAD
4BFFE9A351FA804000B98040000085430094B8772BF0D28926FFD38B28FFD48E
2CFFD48F30FFD59132FFD59132FFD18D30FFDC9137FFD1842FFFE8993BFFFFAC
47FFDD9543F085430094854300008D480049A35D12DADC9133FFDC9132FFDE95
3AFFDF9942FFDF9C47FFE09D48FFDF9B46FFDC9741FFCF8635FFFFB656FFFFB6
56FFAE691CDA6A362B4946245400964E0009995000A4CA7E28EBE79942FFE9A0
4EFFEAA659FFEBAA60FFEBAB63FFEBAA60FF5D4287FF2C1E95FF33289CFF291E
95FB150B90ED0201A6CE0000A699A2570000A4580022AA5D04BAD48732EBF0A8
5EFFF2B06BFFF3B473FFF3B576FFF3B473FF31248FFF5E5EF7FF5E5EF7FF5E5E
F7FF5E5EF7FF5E5EF7FF000098CCA2570000A5590000B0600022B16100A4C576
1CD9E59B4FF0F1AD6AFAF6B475FEF1AD6AFA583B6BF723156EF8190E6EED0503
7CD3000080CC000080CC00008499A2570000A5590000B1610000B6640009B967
0049BA670094BA6700B9BA6700C9BA6700B9BA670094B9670049633737090000
7700000077000000770000008000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00C7740200CB770200DB830300E1870308E58A
0344E68B038AE68B03ACE68B03BBE68B03ACE68B038AE58A0344E18703089A6D
2C002B2B9D390101DEAF0101C640C7740200CB770200D9820320DB830399E29C
37CFECC487EBF2D5A6F8F2D9B2FEFCF1CDF8F6DCA5EBE6A645CFDB830399956A
2D4038386F7C8080FFFF0101B1C1C7740200C9760220CF7F0FB0E2B36FE6EFD7
ABFFFCF2CCFFF1D5A5FFEFCE9BFFF8EAC6FFFFFAD7FFFFF9D7FFB1BF97EB8A64
2FD2F7F7F7FF1A1A468E00009F46B5670209BA6A029EDDB06FE7E7C389FFF8E7
BAFFFEF2CCFFEFD4A5FFF2D9ADFFF8E9C3FFFCF0CAFFC2E1C6FF4CB3B6FF79E6
F7FF5C3E16CE281D103600009C00A65C0147B87A2AD5DAA95FFFDFB268FFF4D9
A1FFE4BE82FFE4BD7DFFF3D8A7FFFFEDBFFFA9B391FF48ABACFF79E6F7FF4198
9BFF846F39DEA65C0147A35A010097510192CE9D5EEFD79E48FFD8A045FFD8A3
4FFFDCAA57FFDEAD5DFFDFB069FFA2A377FF3C9693FF79E6F7FF3D8F8EFFA29A
67FFCE9D5AEF9751019297510100894700B8E8B571FAD49541FFCD8F2FFFD498
38FFD49B3BFFD59C3EFFB2924CFF449D98FF79E6F7FF3F8E8AFF95854EFFCB8B
30FFCE984AFA894700B889470000814100C9BC7F38FEE59E43FFC98525FFCD8C
28FFCE8C29FFCE8D2AFF667B5DFFD9F4FFFF37837FFFB39C60FFB9741DFFD48D
32FFC88C3EFE814100C981410000804000B9CB8A3BFAC88221FFCC8724FFCE8A
25FFCE8A27FFCE8A27FF000000FF446052FFAE8747FFF5A546FFB96F1EFFFFAD
4BFFE9A351FA804000B98040000085430094B8772BF0D28926FFD38B28FFD48E
2CFFD48F30FFD59132FFD59132FFD18D30FFDC9137FFD1842FFFE8993BFFFFAC
47FFDD9543F085430094854300008D480049A35D12DADC9133FFDC9132FFDE95
3AFFDF9942FFDF9C47FFE09D48FFDF9B46FFDC9741FFCF8635FFFFB656FFFFB6
56FFAE691CDA8D4800498B470000964E0009995000A4CA7E28EBE79942FFE9A0
4EFFEAA659FFEBAA60FFEBAB63FFEBAA60FFEAA659FFDA9148FFFFC66EFFDA9A
44EB995000A4964E0009964E0000A2570000A4580022AA5D04BAD48732EBF0A8
5EFFF2B06BFFF3B473FFF3B576FFF3B473FFF2B06BFFE49C59FFDEA754EBAB60
07BAA4580022A2570000A2570000A2570000A5590000B0600022B16100A4C576
1CD9E59B4FF0F1AD6AFAF6B475FEF1AD6AFAE59B4FF0C3731BD9B16100A4B060
0022A5590000A2570000A2570000A2570000A5590000B1610000B6640009B967
0049BA670094BA6700B9BA6700C9BA6700B9BA670094B9670049B6640009B161
0000A5590000A2570000A2570000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003B7F320015A9000015A9000015A9 FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003B7F320015A9000015A9000015A9
000015A9000015AA009915AA00CC15AA00CC15AA009915A9000015A9000015A9 000015A9000015AA009915AA00CC15AA00CC15AA009915A9000015A9000015A9

View File

@ -221,6 +221,9 @@ type
AcCommentNew: TsCellCommentAction; AcCommentNew: TsCellCommentAction;
AcCommentEdit: TsCellCommentAction; AcCommentEdit: TsCellCommentAction;
AcCommentDelete: TsCellCommentAction; AcCommentDelete: TsCellCommentAction;
AcHyperlinkNew: TsCellHyperlinkAction;
AcHyperlinkEdit: TsCellHyperlinkAction;
AcHyperlinkDelete: TsCellHyperlinkAction;
Splitter2: TSplitter; Splitter2: TSplitter;
Splitter3: TSplitter; Splitter3: TSplitter;
ToolBar2: TToolBar; ToolBar2: TToolBar;
@ -283,7 +286,11 @@ type
ToolButton5: TToolButton; ToolButton5: TToolButton;
TbCommentDelete: TToolButton; TbCommentDelete: TToolButton;
TbCommentEdit: TToolButton; TbCommentEdit: TToolButton;
ToolButton50: TToolButton;
ToolButton51: TToolButton;
ToolButton52: TToolButton; ToolButton52: TToolButton;
ToolButton53: TToolButton;
ToolButton54: TToolButton;
ToolButton6: TToolButton; ToolButton6: TToolButton;
ToolButton7: TToolButton; ToolButton7: TToolButton;
ToolButton8: TToolButton; ToolButton8: TToolButton;
@ -295,12 +302,18 @@ type
procedure AcColDeleteExecute(Sender: TObject); procedure AcColDeleteExecute(Sender: TObject);
procedure AcFileOpenAccept(Sender: TObject); procedure AcFileOpenAccept(Sender: TObject);
procedure AcFileSaveAsAccept(Sender: TObject); procedure AcFileSaveAsAccept(Sender: TObject);
procedure AcHyperlinkEditHyperlink(Sender: TObject; ACaption: String;
var AHyperlink: TsHyperlink);
procedure AcHyperlinkNewHyperlink(Sender: TObject; ACaption: String;
var AHyperlink: TsHyperlink);
procedure AcRowAddExecute(Sender: TObject); procedure AcRowAddExecute(Sender: TObject);
procedure AcRowDeleteExecute(Sender: TObject); procedure AcRowDeleteExecute(Sender: TObject);
procedure AcSettingsCSVParamsExecute(Sender: TObject); procedure AcSettingsCSVParamsExecute(Sender: TObject);
procedure AcSettingsCurrencyExecute(Sender: TObject); procedure AcSettingsCurrencyExecute(Sender: TObject);
procedure AcSettingsFormatSettingsExecute(Sender: TObject); procedure AcSettingsFormatSettingsExecute(Sender: TObject);
procedure AcViewInspectorExecute(Sender: TObject); procedure AcViewInspectorExecute(Sender: TObject);
procedure HyperlinkHandler(Sender: TObject; ACaption: String;
var AHyperlink: TsHyperlink);
procedure InspectorTabControlChange(Sender: TObject); procedure InspectorTabControlChange(Sender: TObject);
procedure ToolButton4Click(Sender: TObject); procedure ToolButton4Click(Sender: TObject);
procedure WorksheetGridClickHyperlink(Sender: TObject; procedure WorksheetGridClickHyperlink(Sender: TObject;
@ -315,17 +328,36 @@ type
var var
MainForm: TMainForm; MainForm: TMainForm;
implementation implementation
{$R *.lfm} {$R *.lfm}
uses uses
fpsUtils, fpsCSV, fpsUtils, fpsCSV,
sCSVParamsForm, sCurrencyForm, sFormatSettingsForm, sSortParamsForm; sCSVParamsForm, sCurrencyForm, sFormatSettingsForm, sSortParamsForm,
sHyperlinkForm;
{ TMainForm } { TMainForm }
{ Adds a column before the active cell }
procedure TMainForm.AcColAddExecute(Sender: TObject);
begin
WorksheetGrid.InsertCol(WorksheetGrid.Col);
WorksheetGrid.Col := WorksheetGrid.Col + 1;
end;
{ Deletes the column with the active cell }
procedure TMainForm.AcColDeleteExecute(Sender: TObject);
var
c: Integer;
begin
c := WorksheetGrid.Col;
WorksheetGrid.DeleteCol(c);
WorksheetGrid.Col := c;
end;
{ Loads the spreadsheet file selected by the AcFileOpen action } { Loads the spreadsheet file selected by the AcFileOpen action }
procedure TMainForm.AcFileOpenAccept(Sender: TObject); procedure TMainForm.AcFileOpenAccept(Sender: TObject);
begin begin
@ -367,23 +399,19 @@ begin
end; end;
end; end;
{ Adds a column before the active cell } procedure TMainForm.AcHyperlinkEditHyperlink(Sender: TObject; ACaption: String;
procedure TMainForm.AcColAddExecute(Sender: TObject); var AHyperlink: TsHyperlink);
begin begin
WorksheetGrid.InsertCol(WorksheetGrid.Col); HyperlinkHandler(Sender, ACaption, AHyperlink);
WorksheetGrid.Col := WorksheetGrid.Col + 1;
end; end;
{ Deletes the column with the active cell } procedure TMainForm.AcHyperlinkNewHyperlink(Sender: TObject; ACaption: String;
procedure TMainForm.AcColDeleteExecute(Sender: TObject); var AHyperlink: TsHyperlink);
var
c: Integer;
begin begin
c := WorksheetGrid.Col; HyperlinkHandler(Sender, ACaption, AHyperlink);
WorksheetGrid.DeleteCol(c);
WorksheetGrid.Col := c;
end; end;
{ Adds a row before the active cell } { Adds a row before the active cell }
procedure TMainForm.AcRowAddExecute(Sender: TObject); procedure TMainForm.AcRowAddExecute(Sender: TObject);
begin begin
@ -447,7 +475,6 @@ begin
end; end;
end; end;
{ Toggles the spreadsheet inspector on and off } { Toggles the spreadsheet inspector on and off }
procedure TMainForm.AcViewInspectorExecute(Sender: TObject); procedure TMainForm.AcViewInspectorExecute(Sender: TObject);
begin begin
@ -456,6 +483,18 @@ begin
InspectorSplitter.Left := 0; InspectorSplitter.Left := 0;
end; end;
{ Event handler for hyperlinks }
procedure TMainForm.HyperlinkHandler(Sender: TObject; ACaption: String;
var AHyperlink: TsHyperlink);
begin
if HyperlinkForm = nil then
HyperlinkForm := THyperlinkForm.Create(self);
HyperlinkForm.Caption := ACaption;
HyperlinkForm.SetHyperlink(WorkbookSource.Worksheet, AHyperlink);
if HyperlinkForm.ShowModal = mrOK then
HyperlinkForm.GetHyperlink(AHyperlink);
end;
{ Event handler to synchronize the mode of the spreadsheet inspector with the { Event handler to synchronize the mode of the spreadsheet inspector with the
selected tab of the TabControl } selected tab of the TabControl }
procedure TMainForm.InspectorTabControlChange(Sender: TObject); procedure TMainForm.InspectorTabControlChange(Sender: TObject);

View File

@ -0,0 +1,670 @@
object HyperlinkForm: THyperlinkForm
Left = 327
Height = 347
Top = 259
Width = 498
Caption = 'Hyperlink'
ClientHeight = 347
ClientWidth = 498
ShowHint = True
LCLVersion = '1.5'
object ButtonPanel1: TButtonPanel
Left = 6
Height = 34
Top = 307
Width = 486
OKButton.Name = 'OKButton'
OKButton.DefaultCaption = True
OKButton.OnClick = OKButtonClick
HelpButton.Name = 'HelpButton'
HelpButton.DefaultCaption = True
CloseButton.Name = 'CloseButton'
CloseButton.DefaultCaption = True
CancelButton.Name = 'CancelButton'
CancelButton.DefaultCaption = True
TabOrder = 0
ShowButtons = [pbOK, pbCancel]
end
object Panel2: TPanel
Left = 75
Height = 301
Top = 0
Width = 423
Align = alClient
BevelOuter = bvNone
ClientHeight = 301
ClientWidth = 423
TabOrder = 1
object Notebook: TNotebook
Left = 4
Height = 263
Top = 4
Width = 415
PageIndex = 0
Align = alClient
BorderSpacing.Around = 4
TabOrder = 0
TabStop = True
object PgInternal: TPage
object GroupBox2: TGroupBox
Left = 0
Height = 80
Top = 0
Width = 415
Align = alTop
Caption = 'Target within current workbook'
ClientHeight = 60
ClientWidth = 411
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
object CbWorksheets: TComboBox
Left = 8
Height = 23
Top = 24
Width = 208
ItemHeight = 15
OnChange = UpdateHyperlinkInfo
ParentFont = False
Style = csDropDownList
TabOrder = 0
end
object Label5: TLabel
Left = 8
Height = 15
Top = 6
Width = 59
Caption = 'Worksheet:'
ParentColor = False
ParentFont = False
end
object Label6: TLabel
Left = 224
Height = 15
Top = 8
Width = 66
Caption = 'Cell address:'
ParentColor = False
ParentFont = False
end
object CbCellAddress: TComboBox
Left = 224
Height = 23
Top = 24
Width = 178
Anchors = [akTop, akLeft, akRight]
ItemHeight = 15
OnChange = UpdateHyperlinkInfo
OnEditingDone = CbCellAddressEditingDone
ParentFont = False
TabOrder = 1
end
end
end
object Page2: TPage
object GroupBox3: TGroupBox
Left = 0
Height = 88
Top = 0
Width = 417
Align = alTop
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'File'
ClientHeight = 68
ClientWidth = 413
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
object CbFileName: TComboBox
Left = 16
Height = 23
Top = 8
Width = 306
Anchors = [akTop, akLeft, akRight]
ItemHeight = 15
ParentFont = False
TabOrder = 0
end
object BtnBrowseFile: TButton
Left = 330
Height = 23
Top = 8
Width = 75
Anchors = [akTop, akRight]
Caption = 'Browse...'
OnClick = BtnBrowseFileClick
ParentFont = False
TabOrder = 1
end
object RadioButton1: TRadioButton
Left = 19
Height = 19
Top = 41
Width = 92
Caption = 'absolute path'
Checked = True
ParentFont = False
TabOrder = 3
TabStop = True
end
object RadioButton2: TRadioButton
Left = 137
Height = 19
Top = 41
Width = 85
Caption = 'relative path'
ParentFont = False
TabOrder = 2
end
end
end
object Page3: TPage
object GroupBox4: TGroupBox
Left = 0
Height = 64
Top = 72
Width = 407
Align = alTop
BorderSpacing.Top = 8
BorderSpacing.Right = 8
Caption = 'URL'
ClientHeight = 44
ClientWidth = 403
TabOrder = 0
object CbFileName1: TComboBox
Left = 16
Height = 23
Top = 8
Width = 395
ItemHeight = 15
TabOrder = 0
Text = 'ComboBox1'
end
end
object GroupBox5: TGroupBox
Left = 0
Height = 64
Top = 0
Width = 407
Align = alTop
BorderSpacing.Right = 8
Caption = 'Link'
ClientHeight = 44
ClientWidth = 403
TabOrder = 1
object CbFileName2: TComboBox
Left = 16
Height = 23
Top = 8
Width = 80
ItemHeight = 15
ItemIndex = 0
Items.Strings = (
'http'
'ftp'
)
TabOrder = 0
Text = 'http'
end
end
object GroupBox6: TGroupBox
Left = 0
Height = 64
Top = 144
Width = 407
Align = alTop
BorderSpacing.Top = 8
BorderSpacing.Right = 8
Caption = 'URL'
ClientHeight = 44
ClientWidth = 403
TabOrder = 2
object CbFileName3: TComboBox
Left = 16
Height = 23
Top = 8
Width = 381
Anchors = [akTop, akLeft, akRight]
ItemHeight = 15
TabOrder = 0
Text = 'ComboBox1'
end
end
end
object Page4: TPage
object GbMailRecipient: TGroupBox
Left = 0
Height = 60
Top = 0
Width = 415
Align = alTop
BorderSpacing.Bottom = 8
Caption = 'Mail address of recipient'
ClientHeight = 40
ClientWidth = 411
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
object CbMailRecipient: TComboBox
Left = 8
Height = 23
Top = 6
Width = 397
ItemHeight = 15
OnEditingDone = CbMailRecipientEditingDone
ParentFont = False
TabOrder = 0
end
end
object GroupBox8: TGroupBox
Left = 0
Height = 60
Top = 68
Width = 415
Align = alTop
BorderSpacing.Bottom = 8
Caption = 'Subject'
ClientHeight = 40
ClientWidth = 411
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
object EdMailSubject: TEdit
Left = 8
Height = 23
Top = 6
Width = 397
Anchors = [akTop, akLeft, akRight]
OnChange = UpdateHyperlinkInfo
ParentFont = False
TabOrder = 0
end
end
end
end
object HyperlinkInfo: TLabel
Left = 8
Height = 15
Top = 282
Width = 407
Align = alBottom
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 4
Caption = 'HyperlinkInfo'
ParentColor = False
WordWrap = True
end
object Bevel1: TBevel
Left = 4
Height = 3
Top = 271
Width = 415
Align = alBottom
BorderSpacing.Left = 4
BorderSpacing.Right = 4
Shape = bsBottomLine
end
end
object ToolBar: TToolBar
Left = 4
Height = 297
Top = 4
Width = 67
Align = alLeft
AutoSize = True
BorderSpacing.Around = 4
ButtonHeight = 56
ButtonWidth = 64
Caption = 'ToolBar'
Color = clWindow
EdgeBorders = [ebLeft, ebTop, ebRight, ebBottom]
EdgeInner = esNone
Images = Images
ParentColor = False
ParentFont = False
ShowCaptions = True
TabOrder = 2
Wrapable = False
object TbInternal: TToolButton
Left = 2
Top = 1
AllowAllUp = True
Caption = 'internal'
Down = True
ImageIndex = 0
OnClick = ToolButtonClick
end
object TbFile: TToolButton
Tag = 1
Left = 2
Top = 57
AllowAllUp = True
Caption = 'File'
ImageIndex = 1
OnClick = ToolButtonClick
end
object TbInternet: TToolButton
Tag = 2
Left = 2
Top = 113
AllowAllUp = True
Caption = 'Internet'
ImageIndex = 2
OnClick = ToolButtonClick
end
object TbMail: TToolButton
Tag = 3
Left = 2
Top = 169
AllowAllUp = True
Caption = 'Mail'
ImageIndex = 3
OnClick = ToolButtonClick
end
end
object Images: TImageList
Height = 24
Width = 24
left = 48
top = 296
Bitmap = {
4C69040000001800000018000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF007E7E54007F7F554D7F7F55667F7F55667F7F
55667F7F55667F7F55667F7F55667F7F55667F7F55667F7F55667F7F55667F7F
55667F7F55667F7F55667F7F55667F7F55667F7F55667F7F55667F7F55667F7F
55667F7F55667F7F554DFFFFFF007E7E54007E7E5467FFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFF7D7D5467FFFFFF007C7C52007C7C5268FFFFFFFFFEFEFEFFFEFE
FEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE
FEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE
FEFFFFFFFFFF7B7B5268FFFFFF007A7A51007A7A5168FEFEFDFFFDFDFCFFFFCC
44FFFECB43FFFECB43FFFDCA42FFFCC941FFFAC73FFFF9C63EFFF8C53DFFF6C3
3CFFF5C23AFFF4C139FFF3C038FFF1BE36FFF0BD35FFEFBC34FFEFBC34FFFDFD
FCFFFEFEFDFF79795069FFFFFF0078784F0078784F69FEFEFCFFFCFCFAFFFFCC
44FFFFEE88FFFEED87FFFDCA42FFFCEB85FFFBEA84FFF9C63EFFF8E781FFF6E5
80FFF5C23AFFF4E37DFFF2E17BFFF1BE36FFF0DF79FFEFDE78FFEFBC34FFFCFC
FAFFFEFEFCFF76764E6AFFFFFF0076764D0076764D6AFDFDFAFFFBFBF8FFFFCC
44FFFFEE88FFFEED87FFFDCA42FFFCEB85FFFBEA84FFF9C63EFFF8E781FFF6E5
80FFF5C23AFFF4E37DFFF2E17BFFF1BE36FFF0DF79FFEFDE78FFEFBC34FFFBFB
F8FFFDFDFAFF74744B6BFFFFFF0073734B0073734B6BFDFDF9FFFAFAF6FFFFCC
44FFFECB43FFFECB43FFF5CE64FFEBD285FFE9D083FFE8CF82FFE7CE81FFE5CC
80FFE4CB7EFFE3CA7DFFE2C97CFFE0C77AFFDFC679FFDEC578FFDEC578FFFAFA
F6FFFDFDF9FF7171496CFFFFFF00717149007171496CFCFCF8FFF8F8F4FFFFCC
44FFFFEE88FFFEED87FFECD286FFFCFCFAFFFCFCFAFFD7D7C6FFFCFCFAFFFCFC
FAFFD3D3C2FFFCFCFAFFFCFCFAFFCFCFBEFFFCFCFAFFFCFCFAFFCDCDBCFFF8F8
F4FFFCFCF8FF6E6E466DFFFFFF006E6E46006E6E466DFBFBF6FFF7F7F1FFFFCC
44FFFFEE88FFFEED87FFECD286FFFBFBF8FFFBFBF8FFD7D7C6FFFBFBF8FFFBFB
F8FFD3D3C2FFFBFBF8FFFBFBF8FFCFCFBEFFFBFBF8FFFBFBF8FFCDCDBCFFF7F7
F1FFFBFBF6FF6A6A436EFFFFFF006B6B44006B6B446EFAFAF4FFF5F5EFFFFFCC
44FFFECB43FFFECB43FFECD286FFDADAC9FFD8D8C7FFDFDFD0FFD6D6C5FFD4D4
C3FFDCDCCEFFD2D2C1FFD1D1C0FFD9D9CBFFCECEBDFFCDCDBCFFCDCDBCFFF5F5
EFFFFAFAF4FF67674070FFFFFF00686841006868416FFAFAF2FFF4F4ECFFFFCC
44FFFFEE88FFFEED87FFECD286FFFAFAF6FFFAFAF6FFD7D7C6FFFAFAF6FFFAFA
F6FFD3D3C2FFFAFAF6FFFAFAF6FFCFCFBEFFFAFAF6FFFAFAF6FFCDCDBCFFF4F4
ECFFFAFAF2FF63633D71FFFFFF0065653F0065653F70F9F9F0FFF2F2E9FFFFCC
44FFFFEE88FFFEED87FFECD286FFF9F9F4FFF9F9F4FFD7D7C6FFF9F9F4FFF9F9
F4FFD3D3C2FFF9F9F4FFF9F9F4FFCFCFBEFFF9F9F4FFF9F9F4FFCDCDBCFFF2F2
E9FFF9F9F0FF60603A73FFFFFF0062623C0062623C72F8F8EEFFF0F0E6FFFFCC
44FFFECB43FFFECB43FFECD286FFDADAC9FFD8D8C7FFDDDDCEFFD6D6C5FFD4D4
C3FFDBDBCCFFD2D2C1FFD1D1C0FFD8D8C9FFCECEBDFFCDCDBCFFCDCDBCFFF0F0
E6FFF8F8EEFF5C5C3674FFFFFF005F5F39005F5F3973F7F7ECFFEFEFE4FFFFCC
44FFFFEE88FFFEED87FFECD286FFF7F7F2FFF7F7F2FFD7D7C6FFF7F7F2FFF7F7
F2FFD3D3C2FFF7F7F2FFF7F7F2FFCFCFBEFFF7F7F2FFF7F7F2FFCDCDBCFFEFEF
E4FFF7F7ECFF58583375FFFFFF005C5C36005C5C3674F6F6EBFFEDEDE1FFFFCC
44FFFFEE88FFFEED87FFECD286FFF6F6F1FFF6F6F1FFD7D7C6FFF6F6F1FFF6F6
F1FFD3D3C2FFF6F6F1FFF6F6F1FFCFCFBEFFF6F6F1FFF6F6F1FFCDCDBCFFEDED
E1FFF6F6EBFF55553077FFFFFF005959340059593475F6F6E9FFECECDFFFFFCC
44FFFECB43FFFECB43FFECD286FFDADAC9FFD8D8C7FFD7D7C6FFD6D6C5FFD4D4
C3FFD3D3C2FFD2D2C1FFD1D1C0FFCFCFBEFFCECEBDFFCDCDBCFFCDCDBCFFECEC
DFFFF6F6E9FF50502B79FFFFFF005656310056563177F5F5E7FFEAEADDFFEAEA
DDFFEAEADDFFEAEADDFFEAEADDFFEAEADDFFEAEADDFFEAEADDFFEAEADDFFEAEA
DDFFEAEADDFFEAEADDFFEAEADDFFEAEADDFFEAEADDFFEAEADDFFEAEADDFFEAEA
DDFFF5F5E7FF42421F7FFFFFFF0052522E0052522E78F4F4E6FFE9E9DBFFE9E9
DBFFE9E9DBFFE9E9DBFFEFEFE0FFF4F4E6FFF4F4E6FFF4F4E6FFF4F4E6FFF4F4
E6FFF4F4E6FFF4F4E6FFF4F4E6FFF4F4E6FFF4F4E6FFF4F4E6FFF4F4E6FFF4F4
E6FFFAFAEBFF34341384FFFFFF00494925004949257CF4F4E5FFE8E8D9FFE8E8
D9FFE8E8D9FFE8E8D9FFF4F4E5FFAAAA99FFAAAA99FFAAAA99FFAAAA99FFAAAA
99FFAAAA99FFAAAA99FF29290988292909882929098829290988292909882929
0988292909882A2A0A66FFFFFF003C3C1A003C3C1A80F5F5E5FFE7E7D7FFE7E7
D7FFE7E7D7FFE7E7D7FFF5F5E5FF67674FC5F5F5E5FFE7E7D7FFE7E7D7FFE7E7
D7FFE7E7D7FFF5F5E5FF2323048A262607002727070027270700272707002727
07002727070029290900FFFFFF000D0D050031311174D4D4C0DCF4F4E3FFF3F3
E2FFF3F3E2FFF4F4E3FFD4D4C0DC2323048AD0D0BDDEF4F4E3FFF3F3E2FFF3F3
E2FFF4F4E3FFD0D0BDDE23230479090901000000000000000000000000000000
00000000000000000000FFFFFF0000000011171705402727097B282809882828
098828280988282809882727097B1A1A035F2222047C2323048A2323048A2323
048A2323048A2222047C1212024C0000002F000000280000001F000000160000
000D0000000600000001FFFFFF000000000000000012000000190000001A0000
001A0000001A0000001A0000001A0000001A0000001A0000001A0000001A0000
001A0000001A0000001A0000001A0000001800000014000000100000000B0000
00070000000300000001FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000088CB000088CB000088
CC410088CC810088CC810088CC810088CC810088CC810088CC810088CC810088
CC810088CC810088CC810088CC810088CC810088CC810088CC810088CC610088
CB000088CB00FFFFFF00FFFFFF00FFFFFF00FFFFFF000087CB000087CB000087
CB826FCCECE092E1F7FFADF1FFFFAEF2FFFFAEF2FFFFAEF2FFFFAEF2FFFFAEF2
FFFFAEF2FFFFAEF2FFFFAEF2FFFFAEF2FFFFAEF2FFFFB1F5FFFF0087CB820087
CB000087CB00FFFFFF00FFFFFF00FFFFFF00FFFFFF000086C9000086C9000086
C983B0F5FFFF91E1F6FF5DC0E7FF72CCEEFF8CDCF6FFA6ECFEFFA8EDFEFFA8ED
FEFFA8EDFEFFA8EDFEFFA8EDFEFFA8EDFEFFA8EDFEFFADF2FFFF0086C9830086
C9000086C900FFFFFF00FFFFFF00FFFFFF00FFFFFF000085C8000085C8000085
C885ADF1FFFFABEFFEFFACF1FEFF8FDFF5FF69C7EAFF59BCE6FF76C9E6FFA6EB
FDFFA6EBFDFFA6EBFDFFA6EBFDFFA6EBFDFFA6EBFDFFABF0FEFF0085C8850085
C8000085C800FFFFFF00FFFFFF00FFFFFF00FFFFFF000084C6000084C6000084
C687ABEFFEFFA6EAFDFFA6EAFDFFA9EEFDFFADF1FEFFA1EAFAFF4FAFD8FF9BDC
EEFFA2E6F9FFA4E9FCFFA4E9FCFFA4E9FCFFA4E9FCFFA9EEFDFF0084C6870084
C6000084C600FFFFFF00FFFFFF00FFFFFF00FFFFFF000083C4000083C4000083
C489A8EEFDFFA3E9FCFFA3E9FCFFA3E9FCFFA3E9FCFFADF2FEFF49AEDAFF91CF
E1FF91CFE1FF97D8EBFF9FE4F7FFA1E6FAFFA1E6FAFFA6EBFCFF0083C4890083
C4000083C400FFFFFF00FFFFFF00FFFFFF00FFFFFF000081C2000081C2000081
C28BA6ECFCFFA1E7FBFFA1E7FBFFA1E7FBFFA1E7FBFFABF0FDFF41A5D2FF8ECD
E0FF8ECDE0FF8ECDE0FF96D9EDFF9EE4F9FF9EE4F9FFA4E9FBFF0081C28B0081
C2000081C200FFFFFF00FFFFFF00FFFFFF00FFFFFF000080C0000080C0000080
C08DA4E9FBFF9EE4F9FF9EE4F9FF9EE4F9FF9EE4F9FFA9EEFCFF3A9BC7FF8ACA
DEFF8ACADEFF8ACADEFF92D6EBFF9AE1F7FF9AE1F7FFA0E6F9FF0080C08D0080
C0000080C000FFFFFF00FFFFFF00FFFFFF00FFFFFF00007EBD00007EBD00007E
BD8FA1E7FAFF9BE2F8FF9BE2F8FF9BE2F8FF9BE2F8FFA7ECFCFF3696C2FF88C7
DDFF88C7DDFF88C7DDFF90D3EAFF97DEF6FF97DEF6FF9DE4F9FF007EBD8F007E
BD00007DBB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00007DBB00007DBB00007D
BB919EE5F9FF98DFF6FF98DFF6FF98DFF6FF98DFF6FFA4EAFBFF3393BFFF84C5
DBFF84C5DBFF84C5DBFF8CD0E8FF93DBF4FF93DBF4FF9AE1F7FF007DBB91007D
BB33007BB800FFFFFF00FFFFFF00FFFFFF00FFFFFF00007BB800007BB800007B
B8949CE3F8FF95DDF5FF95DDF5FF95DDF5FF95DDF5FFA2E8FAFF318FBCFF81C2
D9FF81C2D9FF81C2D9FF89CDE6FF90D8F2FF90D8F2FF90D8F2FF90D8F2FF007B
B894007BB834FFFFFF00FFFFFF00FFFFFF00FFFFFF000079B6000079B6000079
B69699E0F6FF92DAF3FF92DAF3FF92DAF3FF92DAF3FF9FE5F9FF2E8CB8FF7EBF
D8FF7EBFD8FF7EBFD8FF85CAE4FF8CD5F0FF8CD5F0FF8CD5F0FFFEFEFDFF8CD5
F0FF0079B696FFFFFF00FFFFFF00FFFFFF00FFFFFF000077B3000077B3000077
B39996DEF6FF8FD8F2FF8FD8F2FF8FD8F2FF8FD8F2FF9CE3F9FF2B88B5FF7BBD
D6FF7BBDD6FF7BBDD6FF82C8E2FF89D2EEFF89D2EEFF89D2EEFFF8F8F3FF89D2
EEFF0077B399FFFFFF00FFFFFF00FFFFFF00FFFFFF000076B0000076B0000076
B09B93DBF4FF8CD5F0FF8CD5F0FF8CD5F0FF8CD5F0FF9AE0F8FF2986B2FF78BA
D5FF78BAD5FF78BAD5FF7FC5E1FF85CFEDFF85CFEDFF85CFEDFFF0F0E6FF85CF
EDFF0076B09BFFFFFF00FFFFFF00FFFFFF00FFFFFF000074AE000074AE000074
AE9E90D8F3FF89D2EEFF89D2EEFF89D2EEFF89D2EEFF97DEF7FF2682AFFF75B8
D3FF75B8D3FF75B8D3FF7CC3DFFF82CDEBFF82CDEBFF82CDEBFFE9E9DBFF82CD
EBFF0074AE9EFFFFFF00FFFFFF00FFFFFF00FFFFFF000072AB000072AB000072
ABA08ED6F2FF86D0EDFF86D0EDFF86D0EDFF86D0EDFF95DCF6FF257FACFF72B5
D2FF72B5D2FF72B5D2FF79C0DEFF7FCAEAFF7FCAEAFF7FCAEAFFFEC941FF7FCA
EAFF0072ABA0FFFFFF00FFFFFF00FFFFFF00FFFFFF00006EA600006EA600006E
A6A58BD4F0FF83CEEBFF83CEEBFF83CEEBFF83CEEBFF93DAF5FF237DA9FF70B4
D0FF70B4D0FF70B4D0FF77BEDCFF7DC8E8FF7DC8E8FF7DC8E8FFF4B62EFF7DC8
E8FF006EA6A5FFFFFF00FFFFFF00FFFFFF00FFFFFF00001B280000679B000067
9BAF89D2F0FF81CBEAFF81CBEAFF81CBEAFF81CBEAFF91D8F5FF217AA6FF6EB2
CFFF6EB2CFFF6EB2CFFF75BCDBFF7BC6E7FF7BC6E7FF7BC6E7FF7BC6E7FF0067
9BAF00689D3DFFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000001925000061
91B887D0EFFF7EC9E9FF7EC9E9FF7EC9E9FF7EC9E9FF8ED6F4FF227AA5FF74B6
D4FF74B6D4FF74B6D4FF7BC1E1FF81CBECFF81CBECFF81CBECFF006191B80049
6E41001A2600FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000011000000260045
689C3590BCF269B8DCFA82CCECFF7CC7E8FF7CC7E8FF8CD4F4FF005C8BEF004F
77C6004F77C6004F77C6005885C2005B8AC0005B8AC0005B8AC00045689C0000
002300000010FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000009000000130000
001A005C8A5B0062939F368FBAD16BBADEED80CAEBFF8BD3F3FF005884C70000
0031000000310000001F0000001A0000001A0000001A0000001A0000001A0000
001200000008FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000
0000005D8C0000649700006191530060909E1B76A3C551A2CAE2005A88C20000
001A000000070000000000000000000000000000000000000000000000000000
000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000
0000005D8C000064970000609000005E8E00005C8A31005B897E005986930000
0007000000000000000000000000000000000000000000000000000000000000
000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00CF7A0200CF7A0200CF7A0200D47E
0200DC830300E2880300E58A0313E68B034EE78B0388E78B03A6E78B03B8E78B
03B8E78B03A6E78B0388E68B034EE58A0313E2880300DC830300D47E0200CF7A
0200CF7A0200CF7A0200FFFFFF00FFFFFF00CF7A0200CF7A0200CF7A0200D47E
0200DC83030DE0870363E38F13B5EDB459D5F7DCA4EBFBECC5F7FCF3D3FDFCF4
D4FDFCEEC7F7F7DCA4EBEDB459D5E38F13B5E0870363DC83030DD47E0200CF7A
0200CF7A0200CF7A0200FFFFFF00FFFFFF00CF7A0200CF7A0200CF7A0200D47E
021CD780039DE1A146D7EBC68CF7E9C48EFFEAC792FFF0D19EFFF2D4A2FFEFD5
A8FFFFFAD7FFFFFAD4FFFFFAD4FFFBEDC2F7E8B25BD7D780039DD47E021CCF7A
0200CF7A0200CF7A0200FFFFFF00FFFFFF00C3710200C5730200CB77021CCF7E
0CAEE7BD78E5EDCC90FFEBC788FFF7E7BBFFF9EDC5FFF1D29FFFF8DBA5FFF2D7
A8FFFCF4D2FFFFFAD6FFFFF9D1FFFFF8CBFFFFF9CDFFEDC986E5CF7E0CAECB77
021CC5730200C3710200FFFFFF00FFFFFF00B6680200BA6B020DC070039FE8C3
82E5E1B570FFE0AD5FFFF1D9A2FFFFF7CCFFFFF7D0FFF5E0B2FFF1D199FFEED1
A0FFEDD4AAFFFFF7D0FFFFF7CCFFFFF6C6FFFFF5BFFFFFF5C1FFE8C382E5C070
039FBA6B020DB6680200FFFFFF00FFFFFF00B0640200B3660266D19C50D9E2BA
7AFFE6BE76FFE1B771FFFAE6AFFFFFF0BFFFF7E2B2FFE9C487FFE6BE81FFFDEE
C4FFFAEABEFFFAE7B9FFFFEFBDFFFFEFB9FFFFEDB4FFFFECAFFFFFEEB7FFD29E
52D9B3660266B0640200FFFFFF00FFFFFF00A75D0114AE670EBCD7A866F8D498
3AFFE8BD6EFFD49F52FFFCE0A2FFF1D194FFDAA85EFFE5B86AFFDEB16DFFFFEA
B5FFFFE9B4FFE0B87BFFD4A25CFFF9DD9FFFFFE5A4FFFFE4A1FFFADB98FFD09E
5DF8AB630ABCA75D0114FFFFFF00FFFFFF009B530153BB833DDBCB903DFFD599
38FFD79C3AFFD49A3EFFE3B364FFD59F4AFFDDA84FFFDEAB53FFD7A457FFFDDC
9BFFE9BF7CFFE1B266FFCD9441FFEDC27AFFFFDA92FFF0C67DFFFFD98FFFE1B0
66FFB4782EDB9B530153FFFFFF00FFFFFF00914D0190C79355EFE9B160FFDA9F
47FFD39633FFD59934FFD49836FFD59B39FFD89D3CFFD89E3EFFD1973CFFD79F
4BFFC98D38FFC58731FFCF9344FFFFCF82FFFFCF80FFD29547FFCE913FFFE2AA
56FFC48E46EF914D0190FFFFFF00FFFFFF00894700B2F2C07AF8F7BB67FFD797
41FFCC8C2AFFD0922DFFD1922DFFD1932EFFD19430FFD19430FFD19430FFCB8C
2EFFDFA24EFFFFC571FFFFC470FFFCC16DFFDC9E4DFFFFC46FFFC48325FFCB8B
29FFCD9848F8894700B2FFFFFF00FFFFFF00834200C6D89C54FEC6802CFFE19B
44FFCE8A2DFFCD8A26FFCE8C26FFCE8C27FFCE8C27FFCE8C27FFCE8C27FFCB88
2AFFEDA951FFF2AD57FFFFBB62FFEEA852FFBC7720FFC17E20FFC58222FFCA88
24FFD39943FE834200C6FFFFFF00FFFFFF00804000C7C6873DFEC37C21FFE89D
41FFCB8327FFCB8722FFCC8822FFCC8822FFCC8822FFCC8822FFCC8822FFC985
22FFC98224FFBD751EFFE2973FFFFFB354FFC88026FFC57F22FFE79C40FFC67E
26FFC98C39FE804000C7FFFFFF00FFFFFF00814000B3E59F4FF8C47D1EFFC882
20FFCB8521FFCE8822FFCE8823FFCE8823FFCE8823FFCE8924FFCE8924FFCE89
24FFCC8623FFC17A1FFFF4A344FFFFAD4BFFC47A22FFCB7F27FFFFAD4AFFFBAA
48FFD99546F8814000B3FFFFFF00FFFFFF0083420092BF7B32F0CB8220FFD088
22FFD08823FFD08823FFD18924FFD18A25FFD18A26FFD18A26FFD18B26FFD18B
26FFCF8725FFD6892DFFFFAB47FFEE9C3DFFBB701BFFF39F3EFFFFAA45FFFFAA
45FFDC9544F083420092FFFFFF00FFFFFF0088450054A36018DED48A28FFD488
23FFD48924FFD58A25FFD58B27FFD68C29FFD68E2CFFD78E2EFFD78F2FFFD78F
2FFFD68D2DFFD2882AFFC77C23FFCC7F25FFDA8A2FFFFFAC46FFFFAB46FFFFAE
4AFFB57024DE88450054FFFFFF00FFFFFF008F4A0014944E04C1D3882DF9DA89
24FFDA8A26FFDB8C29FFDC8E2DFFDC9132FFDD9337FFDE953AFFDE963CFFDE96
3CFFDE953AFFDD9337FFDC9032FFD28329FFF0A242FFFFB14AFFFFB049FFF3AA
4CF9975107C18F4A0014FFFFFF00FFFFFF00954E0000974F006AB56A16DFE18D
2BFFE18C28FFE28F2EFFE39336FFE4973FFFE59C46FFE69F4CFFE6A04FFFE6A0
4FFFE69F4CFFE59C46FFE4973FFFD98932FFF0A84BFFFFB954FFFFBA56FFC07A
26DF974F006A954E0000FFFFFF00FFFFFF00995000009B52000E9F5500A7CC7A
20EAE78F2FFFE89235FFEA9840FFEB9F4DFFECA558FFEDA960FFEDAC64FFEDAC
64FFEDA960FFECA558FFEB9F4DFFE0903DFFF1B057FFFFC362FFDA983EEA9F55
00A79B52000E99500000FFFFFF00FFFFFF00A2560000A3570000A75A001DAB5D
03B7D27E22EAEE973DFFEF9D49FFF0A558FFF1AD66FFF2B16EFFF2B473FFF2B4
73FFF2B16EFFF1AD66FFF0A558FFE69446FFF3BA66FFDEA145EAAC6005B7A75A
001DA3570000A2560000FFFFFF00FFFFFF00552E0000552E0000552E0000AE5E
001DB06000A7CB771ADFEC9A46F8F5A95EFFF5AF6AFFF6B474FFF6B779FFF6B7
79FFF6B474FFF5AF6AFFF5A95EFFE59244F8CA822ADFB06000A7AE5E001D552E
0000552E0000552E0000FFFFFF00FFFFFF000000000000000000000000010000
00022E1900119A55006EBB6906C2CF7E23DEE6994BF0F0A963F8F7B271FEF7B2
71FEF0A963F8E6994BF0CF7E23DEBA6806C29C56006D2E190011000000020000
00010000000000000000FFFFFF00FFFFFF000000000000000000000000030000
000C0000001A00000024371F00376E3D006DAB5F009CB96600B5BC6800C7BC68
00C7B96600B5AB5F009C6E3D006D371F003700000024000000190000000C0000
00020000000000000000FFFFFF00FFFFFF000000000000000000000000020000
000800000011000000180000001A0000001A0000001A0000001A0000001A0000
001A0000001A0000001A0000001A0000001A0000001800000011000000080000
00010000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF007E7E54007F7F554D7F7F55667F7F55667F7F
55667F7F55667F7F55667F7F55667F7F55667F7F55667F7F55667F7F55667F7F
55667F7F55667F7F55667F7F55667F7F55667F7F55667F7F55667F7F55667F7F
55667F7F55667F7F554D7E7E54007D7D53007D7D5367E0E0CFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFE0E0CFFF7D7D53677D7D53007A7A51007A7A5168F5F5F0FFDBDBCAFFFEFE
FDFFFEFEFDFFFEFEFDFFFEFEFDFFFEFEFDFFFEFEFDFFFEFEFDFFFEFEFDFFFEFE
FDFFFEFEFDFFFEFEFDFFFEFEFDFFFEFEFDFFFEFEFDFFFEFEFDFFFEFEFDFFDBDB
CAFFF5F5F0FF7A7A51687A7A510077774E0077774E69FDFDFAFFEEEEE5FFD5D5
C4FFFCFCFAFFFCFCFAFFFCFCFAFFFCFCFAFFFCFCFAFFFCFCFAFFFCFCFAFFFCFC
FAFFFCFCFAFFFCFCFAFFFCFCFAFFFCFCFAFFFCFCFAFFFCFCFAFFD5D5C4FFEEEE
E5FFFDFDFAFF77774E6977774E0074744C0074744C6BFDFDFAFFF8F8F3FFE6E6
DAFFCFCFBEFFFBFBF7FFFBFBF7FFFBFBF7FFFBFBF7FFFBFBF7FFFBFBF7FFFBFB
F7FFFBFBF7FFFBFBF7FFFBFBF7FFFBFBF7FFFBFBF7FFCFCFBEFFE6E6DAFFF8F8
F3FFFDFDFAFF74744C6B74744C00717148007171486CFCFCF8FFF9F9F4FFF4F4
EEFFDEDED0FFC9C9B8FFF9F9F4FFF9F9F4FFF9F9F4FFF9F9F4FFF9F9F4FFF9F9
F4FFF9F9F4FFF9F9F4FFF9F9F4FFF9F9F4FFC9C9B8FFDEDED0FFF4F4EEFFF9F9
F4FFFCFCF8FF7171486C717148006D6D45006D6D456DFBFBF5FFF6F6F0FFF6F6
F0FFF1F1E8FFD9D9C9FFC4C4B3FFF6F6F0FFF6F6F0FFF6F6F0FFF6F6F0FFF6F6
F0FFF6F6F0FFF6F6F0FFF6F6F0FFC4C4B3FFD9D9C9FFF1F1E8FFF6F6F0FFF6F6
F0FFFBFBF5FF6D6D456D6D6D4500696942006969426FFAFAF2FFF4F4ECFFF4F4
ECFFF4F4ECFFEEEEE4FFD6D6C5FFBEBEADFFF4F4ECFFF4F4ECFFF4F4ECFFF4F4
ECFFF4F4ECFFF4F4ECFFBEBEADFFD6D6C5FFEEEEE4FFF4F4ECFFF4F4ECFFF4F4
ECFFFAFAF2FF6969426F6969420065653E0065653E71F9F9F0FFF2F2E9FFF2F2
E9FFF2F2E9FFF2F2E9FFE8E8DBFFD5D5C4FFB9B9A8FFF2F2E9FFF2F2E9FFF2F2
E9FFF2F2E9FFB9B9A8FFD5D5C4FFE8E8DBFFF2F2E9FFF2F2E9FFF2F2E9FFF2F2
E9FFF9F9F0FF65653E7165653E0061613A0061613A72F8F8EDFFF0F0E5FFF0F0
E5FFF0F0E5FFEBEBDFFFDBDBCAFFECECE0FFD7D7C8FFB3B3A2FFF0F0E5FFF0F0
E5FFB3B3A2FFD7D7C8FFECECE0FFDBDBCAFFEBEBDFFFF0F0E5FFF0F0E5FFF0F0
E5FFF8F8EDFF61613A7261613A005C5C37005C5C3774F6F6EBFFEDEDE1FFEDED
E1FFE8E8DBFFD8D8C7FFEDEDE1FFEDEDE1FFEBEBDEFFD8D8C9FFAEAE9DFFAEAE
9DFFD8D8C9FFEBEBDEFFEDEDE1FFEDEDE1FFD8D8C7FFE8E8DBFFEDEDE1FFEDED
E1FFF6F6EBFF5C5C37745C5C37005858330058583376F5F5E8FFEBEBDEFFE5E5
D7FFD5D5C4FFEBEBDEFFEBEBDEFFEBEBDEFFEBEBDEFFEAEADDFFD9D9CAFFD9D9
CAFFEAEADDFFEBEBDEFFEBEBDEFFEBEBDEFFEBEBDEFFD5D5C4FFE5E5D7FFEBEB
DEFFF5F5E8FF585833765858330054542F0054542F77F4F4E6FFE3E3D5FFD3D3
C2FFE9E9DBFFE9E9DBFFE9E9DBFFE9E9DBFFE9E9DBFFE9E9DBFFE9E9DBFFE9E9
DBFFE9E9DBFFE9E9DBFFE9E9DBFFE9E9DBFFE9E9DBFFE9E9DBFFD3D3C2FFE3E3
D5FFF4F4E6FF54542F7754542F00494926004949267BEEEEDEFFD0D0BFFFE8E8
D8FFE8E8D8FFE8E8D8FFE8E8D8FFE8E8D8FFE8E8D8FFE8E8D8FFE8E8D8FFE8E8
D8FFE8E8D8FFE8E8D8FFE8E8D8FFE8E8D8FFE8E8D8FFE8E8D8FFE8E8D8FFD0D0
BFFFEEEEDEFF4949267B494926000F0F070038381782CECEBDFFF3F3E2FFF3F3
E2FFF3F3E2FFF3F3E2FFF3F3E2FFF3F3E2FFF3F3E2FFF3F3E2FFF3F3E2FFF3F3
E2FFF3F3E2FFF3F3E2FFF3F3E2FFF3F3E2FFF3F3E2FFF3F3E2FFF3F3E2FFF3F3
E2FFCECEBDFF383817820F0F0700000000102121096C2A2A0B872A2A0B872A2A
0B872A2A0B872A2A0B872A2A0B872A2A0B872A2A0B872A2A0B872A2A0B872A2A
0B872A2A0B872A2A0B872A2A0B872A2A0B872A2A0B872A2A0B872A2A0B872A2A
0B872A2A0B872121096B0000000E0000000800000011000000190000001A0000
001A0000001A0000001A0000001A0000001A0000001A0000001A0000001A0000
001A0000001A0000001A0000001A0000001A0000001A0000001A0000001A0000
001A000000170000000E00000007FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00
}
end
object OpenDialog: TOpenDialog
Filter = 'All files (*.*)|*.*'
left = 128
top = 296
end
end

View File

@ -0,0 +1,354 @@
unit sHyperlinkForm;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ButtonPanel,
ExtCtrls, Buttons, StdCtrls, ComCtrls,
fpsTypes, fpspreadsheet;
type
{ THyperlinkForm }
THyperlinkForm = class(TForm)
Bevel1: TBevel;
BtnBrowseFile: TButton;
ButtonPanel1: TButtonPanel;
CbFileName1: TComboBox;
CbFileName2: TComboBox;
CbFileName3: TComboBox;
CbWorksheets: TComboBox;
CbCellAddress: TComboBox;
CbFileName: TComboBox;
CbMailRecipient: TComboBox;
EdMailSubject: TEdit;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
GroupBox5: TGroupBox;
GroupBox6: TGroupBox;
GbMailRecipient: TGroupBox;
GroupBox8: TGroupBox;
Images: TImageList;
HyperlinkInfo: TLabel;
Label5: TLabel;
Label6: TLabel;
Notebook: TNotebook;
OpenDialog: TOpenDialog;
PgInternal: TPage;
Page2: TPage;
Page3: TPage;
Page4: TPage;
Panel2: TPanel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
ToolBar: TToolBar;
TbInternal: TToolButton;
TbFile: TToolButton;
TbInternet: TToolButton;
TbMail: TToolButton;
procedure BtnBrowseFileClick(Sender: TObject);
procedure CbCellAddressEditingDone(Sender: TObject);
procedure CbMailRecipientEditingDone(Sender: TObject);
procedure OKButtonClick(Sender: TObject);
procedure ToolButtonClick(Sender: TObject);
procedure UpdateHyperlinkInfo(Sender: TObject);
private
{ private declarations }
FWorkbook: TsWorkbook;
FWorksheet: TsWorksheet;
function GetHyperlinkTarget: String;
function GetHyperlinkTooltip: String;
procedure SetHyperlinkKind(AValue: Integer);
procedure SetHyperlinkTarget(const AValue: String);
procedure SetHyperlinkTooltip(const AValue: String);
procedure SetWorksheet(AWorksheet: TsWorksheet);
protected
function GetHyperlinkKind: Integer;
function ValidData(out AControl: TWinControl; out AMsg: String): Boolean;
public
{ public declarations }
procedure GetHyperlink(out AHyperlink: TsHyperlink);
procedure SetHyperlink(AWorksheet: TsWorksheet; const AHyperlink: TsHyperlink);
end;
var
HyperlinkForm: THyperlinkForm;
implementation
{$R *.lfm}
uses
URIParser,
fpsUtils;
const
TAG_INTERNAL = 0;
TAG_FILE = 1;
TAG_INTERNET = 2;
TAG_MAIL = 3;
{ THyperlinkForm }
procedure THyperlinkForm.BtnBrowseFileClick(Sender: TObject);
begin
with OpenDialog do begin
Filename := CbFileName.Text;
if Execute then begin
CbFileName.Text := FileName;
if CbFileName.Items.IndexOf(FileName) = -1 then
CbFilename.Items.Add(FileName);
end;
end;
end;
procedure THyperlinkForm.CbCellAddressEditingDone(Sender: TObject);
begin
CbCellAddress.Text := Uppercase(CbCellAddress.Text);
end;
procedure THyperlinkForm.CbMailRecipientEditingDone(Sender: TObject);
begin
if (CbMailRecipient.Text <> '') and
(CbMaiLRecipient.Items.IndexOf(CbMailRecipient.Text) = -1)
then
CbMailRecipient.Items.Insert(0, CbMailRecipient.Text);
end;
procedure THyperlinkForm.GetHyperlink(out AHyperlink: TsHyperlink);
begin
AHyperlink.Target := GetHyperlinkTarget;
AHyperlink.Tooltip := GetHyperlinkTooltip;
end;
function THyperlinkForm.GetHyperlinkKind: Integer;
begin
for Result := 0 to Toolbar.ButtonCount-1 do
if Toolbar.Buttons[Result].Down then
exit;
Result := -1;
end;
function THyperlinkForm.GetHyperlinkTarget: String;
begin
case GetHyperlinkKind of
TAG_INTERNAL:
begin //internal
if (CbWorksheets.ItemIndex > 0) and (CbCellAddress.Text <> '') then
Result := '#' + CbWorksheets.Text + '!' + Uppercase(CbCellAddress.Text)
else if (CbWorksheets.ItemIndex > 0) then
Result := '#' + CbWorksheets.Text + '!'
else if (CbCellAddress.Text <> '') then
Result := '#' + Uppercase(CbCellAddress.Text)
else
Result := '';
end;
TAG_FILE:
begin // File
if (FWorkbook = nil) or (FWorkbook.FileName = '') then
Result := FilenameToURI(CbFilename.Text)
else
Result := '';
end;
TAG_INTERNET:
;
TAG_MAIL:
begin // Mail
if EdMailSubject.Text <> '' then
Result := Format('mailto:%s?subject=%s', [CbMailRecipient.Text, EdMailSubject.Text])
else
Result := Format('mailto:%s', [CbMailRecipient.Text]);
end;
end;
end;
function THyperlinkForm.GetHyperlinkTooltip: String;
begin
//
end;
procedure THyperlinkForm.OKButtonClick(Sender: TObject);
var
C: TWinControl;
msg: String;
begin
if not ValidData(C, msg) then begin
C.SetFocus;
MessageDlg(msg, mtError, [mbOK], 0);
ModalResult := mrNone;
end;
end;
procedure THyperlinkForm.SetHyperlink(AWorksheet: TsWorksheet;
const AHyperlink: TsHyperlink);
begin
SetWorksheet(AWorksheet);
SetHyperlinkTarget(AHyperlink.Target);
SetHyperlinkTooltip(AHyperlink.Tooltip);
end;
procedure THyperlinkForm.SetHyperlinkKind(AValue: Integer);
var
i: Integer;
begin
for i:=0 to Toolbar.ButtonCount-1 do
Toolbar.Buttons[i].Down := (AValue = Toolbar.Buttons[i].Tag);
Notebook.PageIndex := AValue;
end;
procedure THyperlinkForm.SetHyperlinkTarget(const AValue: String);
var
u: TURI;
sheet: TsWorksheet;
c,r: Cardinal;
i, idx: Integer;
p: Integer;
begin
if AValue = '' then
begin
CbWorksheets.ItemIndex := 0;
CbCellAddress.Text := '';
CbMailRecipient.Text := '';
EdMailSubject.Text := '';
UpdateHyperlinkInfo(nil);
exit;
end;
// Internal link
if pos('#', AValue) = 1 then begin
SetHyperlinkKind(TAG_INTERNAL);
if FWorkbook.TryStrToCell(Copy(AValue, 2, Length(AValue)), sheet, r, c) then
begin
if (sheet = nil) or (sheet = FWorksheet) then
CbWorksheets.ItemIndex := 0
else
begin
idx := 0;
for i:=1 to CbWorksheets.Items.Count-1 do
if CbWorksheets.Items[i] = sheet.Name then
begin
idx := i;
break;
end;
CbWorksheets.ItemIndex := idx;
end;
CbCellAddress.Text := GetCellString(r, c);
UpdateHyperlinkInfo(nil);
end else begin
HyperlinkInfo.Caption := AValue;
MessageDlg(Format('Sheet not found in hyperlink "%s"', [AValue]), mtError,
[mbOK], 0);
end;
exit;
end;
// external links
u := ParseURI(AValue);
// Mail
if SameText(u.Protocol, 'mailto') then
begin
SetHyperlinkKind(TAG_MAIL);
CbMailRecipient.Text := u.Document;
if CbMailRecipient.Items.IndexOf(u.Document) = -1 then
CbMailRecipient.Items.Insert(0, u.Document);
if (u.Params <> '') then
begin
p := pos('subject=', u.Params);
if p <> 0 then
EdMailSubject.Text := copy(u.Params, p+Length('subject='), MaxInt);
end;
UpdateHyperlinkInfo(nil);
exit;
end;
end;
procedure THyperlinkForm.SetHyperlinkTooltip(const AValue: String);
begin
//
end;
procedure THyperlinkForm.SetWorksheet(AWorksheet: TsWorksheet);
var
i: Integer;
begin
FWorksheet := AWorksheet;
if FWorksheet = nil then
raise Exception.Create('[THyperlinkForm.SetWorksheet] Worksheet cannot be nil.');
FWorkbook := FWorksheet.Workbook;
CbWorksheets.Items.Clear;
CbWorksheets.Items.Add('(current worksheet)');
for i:=0 to FWorkbook.GetWorksheetCount-1 do
CbWorksheets.Items.Add(FWorkbook.GetWorksheetByIndex(i).Name);
end;
procedure THyperlinkForm.ToolButtonClick(Sender: TObject);
var
i: Integer;
begin
Notebook.PageIndex := TToolButton(Sender).Tag;
for i:=0 to Toolbar.ButtonCount-1 do
Toolbar.Buttons[i].Down := Toolbar.Buttons[i].Tag = TToolbutton(Sender).Tag;
UpdateHyperlinkInfo(nil);
end;
procedure THyperlinkForm.UpdateHyperlinkInfo(Sender: TObject);
begin
HyperlinkInfo.Caption := GetHyperlinkTarget;
end;
function THyperlinkForm.ValidData(out AControl: TWinControl;
out AMsg: String): Boolean;
var
r,c: Cardinal;
begin
Result := false;
AMsg := '';
AControl := nil;
case GetHyperlinkKind of
TAG_INTERNAL:
begin
if CbCellAddress.Text = '' then
begin
AMsg := 'No cell address specified.';
AControl := CbCellAddress;
exit;
end;
if not ParseCellString(CbCellAddress.Text, r, c) then
begin
AMsg := Format('"%s" is not a valid cell address.', [CbCellAddress.Text]);
AControl := CbCellAddress;
exit;
end;
if (CbWorksheets.Items.IndexOf(CbWorksheets.Text) = -1) and (CbWorksheets.ItemIndex <> 0) then
begin
AMsg := Format('Worksheet "%s" does not exist.', [CbWorksheets.Text]);
AControl := CbWorksheets;
exit;
end;
end;
TAG_MAIL:
begin
if CbMailRecipient.Text = '' then
begin
AMsg := 'No mail recipient specified.';
AControl := CbMailRecipient;
exit;
end;
// Check e-mail address here also!
end;
end;
Result := true;
end;
end.

View File

@ -11,6 +11,8 @@ LICENSE: See the file COPYING.modifiedLGPL.txt, included in the Lazarus
-------------------------------------------------------------------------------} -------------------------------------------------------------------------------}
unit fpsActions; unit fpsActions;
{$mode objfpc}{$H+}
interface interface
uses uses
@ -353,6 +355,9 @@ type
property Visible; property Visible;
end; end;
{ Cell comment actions }
TsCellCommentMode = (ccmNew, ccmEdit, ccmDelete); TsCellCommentMode = (ccmNew, ccmEdit, ccmDelete);
TsCellCommentAction = class(TsCellAction) TsCellCommentAction = class(TsCellAction)
@ -380,6 +385,41 @@ type
property Visible; property Visible;
end; end;
{ Cell hyperlink actions }
TsCellHyperlinkMode = (chmNew, chmEdit, chmDelete);
TsCellHyperlinkEvent = procedure (Sender: TObject; ACaption: String;
var AHyperlink: TsHyperlink) of object;
TsCellHyperlinkAction = class(TsCellAction)
private
FMode: TsCellHyperlinkMode;
FOnHyperlink: TsCellHyperlinkEvent;
protected
function EditHyperlink(ACaption: String; var AHyperlink: TsHyperlink): Boolean; virtual;
public
procedure ExecuteTarget(Target: TObject); override;
procedure UpdateTarget(Target: TObject); override;
published
property Mode: TsCellHyperlinkMode read FMode write FMode;
property OnHyperlink: TsCellHyperlinkEvent read FOnHyperlink write FOnHyperlink;
property Caption;
property Enabled;
property HelpContext;
property HelpKeyword;
property HelpType;
property Hint;
property ImageIndex;
property OnExecute;
property OnHint;
property OnUpdate;
property SecondaryShortCuts;
property ShortCut;
property Visible;
end;
{ TsMergeAction } { TsMergeAction }
TsMergeAction = class(TsAutoFormatAction) TsMergeAction = class(TsAutoFormatAction)
private private
@ -493,7 +533,7 @@ begin
TsTextRotationAction, TsWordWrapAction, TsTextRotationAction, TsWordWrapAction,
TsNumberFormatAction, TsDecimalsAction, TsNumberFormatAction, TsDecimalsAction,
TsCellBorderAction, TsNoCellBordersAction, TsCellBorderAction, TsNoCellBordersAction,
TsCellCommentAction, TsCellCommentAction, TsCellHyperlinkAction,
TsMergeAction TsMergeAction
], nil); ], nil);
end; end;
@ -1192,6 +1232,7 @@ end;
{ TsCellCommentAction } { TsCellCommentAction }
function TsCellCommentAction.EditComment(ACaption: String; function TsCellCommentAction.EditComment(ACaption: String;
var AText: String): Boolean; var AText: String): Boolean;
var var
@ -1274,12 +1315,88 @@ begin
Unused(Target); Unused(Target);
case FMode of case FMode of
ccmNew : Enabled := (Worksheet <> nil) and (Length(GetSelection) > 0); ccmNew:
ccmEdit, Enabled := (Worksheet <> nil) and (Length(GetSelection) > 0) and not Worksheet.HasComment(ActiveCell);
ccmDelete: Enabled := (Worksheet <> nil) and (Worksheet.ReadComment(ActiveCell) <> ''); ccmEdit, ccmDelete:
Enabled := (Worksheet <> nil) and (Worksheet.ReadComment(ActiveCell) <> '');
end; end;
end; end;
{ TsCellHyperlinkAction }
function TsCellHyperlinkAction.EditHyperlink(ACaption: String;
var AHyperlink: TsHyperlink): Boolean;
begin
if Assigned(FOnHyperlink) then
FOnHyperlink(Self, ACaption, AHyperlink)
else
AHyperlink.Target := InputBox(ACaption, 'Target', AHyperlink.Target);
Result := AHyperlink.Target <> '';
end;
procedure TsCellHyperlinkAction.ExecuteTarget(Target: TObject);
var
txt: String;
cellStr: String;
hyperlink: TsHyperlink;
displayText: String;
noCellText: Boolean;
cell: PCell;
begin
Unused(Target);
if Worksheet = nil then
exit;
cellstr := GetCellString(Worksheet.ActiveCellRow, Worksheet.ActiveCellCol);
case FMode of
chmNew:
begin
txt := Format('New hyperlink for cell %s', [cellStr]);
hyperlink.Target := '';
hyperlink.Tooltip := '';
if EditHyperlink(txt, hyperlink) then
Worksheet.WriteHyperlink(
Worksheet.ActiveCellRow, Worksheet.ActiveCellCol,
hyperlink.Target, hyperlink.ToolTip
);
end;
chmEdit:
begin
displayText := Worksheet.ReadAsUTF8Text(ActiveCell);
hyperlink := Worksheet.ReadHyperlink(ActiveCell);
noCellText := displayText = hyperlink.Target;
txt := Format('Edit hyperlink for cell %s', [cellStr]);
if EditHyperlink(txt, hyperlink) then
begin
Worksheet.WriteHyperlink(
Worksheet.ActiveCellRow, Worksheet.ActiveCellCol,
hyperlink.Target, hyperlink.ToolTip
);
if noCellText then
Worksheet.WriteBlank(Worksheet.ActiveCellRow, Worksheet.ActiveCellCol);
end;
end;
chmDelete:
Worksheet.WriteHyperlink(ActiveCell, '');
end;
end;
procedure TsCellHyperlinkAction.UpdateTarget(Target: TObject);
begin
Unused(Target);
case FMode of
chmNew:
Enabled := (Worksheet <> nil) and (Length(GetSelection) > 0) and not Worksheet.HasHyperlink(ActiveCell);
chmEdit, chmDelete:
Enabled := (Worksheet <> nil) and Worksheet.HasHyperlink(ActiveCell);
end;
end;
{ TsMergeAction } { TsMergeAction }
constructor TsMergeAction.Create(AOwner: TComponent); constructor TsMergeAction.Create(AOwner: TComponent);

View File

@ -1146,7 +1146,6 @@ var
i, j: Integer; i, j: Integer;
cell: PCell; cell: PCell;
baserng, rng: TsCellRange; baserng, rng: TsCellRange;
nc, nr: Integer;
baseRow, baseCol: Cardinal; baseRow, baseCol: Cardinal;
begin begin
if CellClipboard.Count = 0 then if CellClipboard.Count = 0 then

View File

@ -62,7 +62,7 @@ resourcestring
'In case of an absolute path the protocol "file:" must be specified.'; 'In case of an absolute path the protocol "file:" must be specified.';
rsEmptyHyperlink = 'The hyperlink is not specified.'; rsEmptyHyperlink = 'The hyperlink is not specified.';
rsODSHyperlinksOfTextCellsOnly = 'Cell %s: OpenDocument supports hyperlinks for text cells only.'; rsODSHyperlinksOfTextCellsOnly = 'Cell %s: OpenDocument supports hyperlinks for text cells only.';
rsStdHyperlinkTooltip = 'Press the left mouse button a bit longer to activate the hyperlink.'; rsStdHyperlinkTooltip = 'Hold the left mouse button down for a short time to activate the hyperlink.';
rsCannotSortMerged = 'The cell range cannot be sorted because it contains merged cells.'; rsCannotSortMerged = 'The cell range cannot be sorted because it contains merged cells.';