git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.SpTBXLib@4 aa3591e4-a9f2-482a-ba07-9d38a056ee4e
364 lines
11 KiB
ObjectPascal
364 lines
11 KiB
ObjectPascal
unit Unit1;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls, Menus, ImgList, ActnList, ComCtrls,
|
|
{$IFNDEF UNICODE}
|
|
TntActnList, TntDialogs, TntStdCtrls, TntSystem, TntForms,
|
|
{$ENDIF}
|
|
{ TB2K }
|
|
TB2Dock, TB2Toolbar, TB2Item, TB2ExtItems,
|
|
SpTBXSkins, SpTBXItem, SpTBXControls, SpTBXDkPanels, SpTBXTabs, SpTBXEditors,
|
|
SpTBXExtEditors, SpTBXCustomizer,
|
|
{ gettext }
|
|
gnugettext;
|
|
|
|
type
|
|
TForm1 = class(TForm)
|
|
ImageList1: TImageList;
|
|
SpTBXDock1: TSpTBXDock;
|
|
SpTBXMultiDock1: TSpTBXMultiDock;
|
|
SpTBXMultiDock2: TSpTBXMultiDock;
|
|
SpTBXDock2: TSpTBXDock;
|
|
dpLog: TSpTBXDockablePanel;
|
|
dpHelp: TSpTBXDockablePanel;
|
|
tbStandard: TSpTBXToolbar;
|
|
tbFormat: TSpTBXToolbar;
|
|
tbMenuBar: TSpTBXToolbar;
|
|
tbNavigation: TSpTBXToolbar;
|
|
mFile: TSpTBXSubmenuItem;
|
|
mEdit: TSpTBXSubmenuItem;
|
|
mView: TSpTBXSubmenuItem;
|
|
mHelp: TSpTBXSubmenuItem;
|
|
mNew: TSpTBXItem;
|
|
mOpen: TSpTBXItem;
|
|
mSave: TSpTBXItem;
|
|
SpTBXSeparatorItem1: TSpTBXSeparatorItem;
|
|
mExit: TSpTBXItem;
|
|
mCut: TSpTBXItem;
|
|
mCopy: TSpTBXItem;
|
|
mPaste: TSpTBXItem;
|
|
SpTBXSeparatorItem2: TSpTBXSeparatorItem;
|
|
mSelectAll: TSpTBXItem;
|
|
SpTBXSeparatorItem3: TSpTBXSeparatorItem;
|
|
mFind: TSpTBXItem;
|
|
mLeftJustify: TSpTBXItem;
|
|
mUnderline: TSpTBXItem;
|
|
mItalic: TSpTBXItem;
|
|
mBold: TSpTBXItem;
|
|
SpTBXSeparatorItem5: TSpTBXSeparatorItem;
|
|
mRightJustify: TSpTBXItem;
|
|
mCentered: TSpTBXItem;
|
|
SpTBXSeparatorItem6: TSpTBXSeparatorItem;
|
|
mBullets: TSpTBXItem;
|
|
mNumberedBullets: TSpTBXItem;
|
|
mSidebar: TSpTBXSubmenuItem;
|
|
mOptions: TSpTBXItem;
|
|
mmHelp: TSpTBXItem;
|
|
mToolbars: TSpTBXSubmenuItem;
|
|
SpTBXPopupMenu1: TSpTBXPopupMenu;
|
|
mStandardToolbar: TSpTBXItem;
|
|
mFormattingToolbar: TSpTBXItem;
|
|
mNavigationToolbar: TSpTBXItem;
|
|
mCommandsLog: TSpTBXItem;
|
|
dpOptions: TSpTBXDockablePanel;
|
|
mmmHelp: TSpTBXItem;
|
|
mAbout: TSpTBXItem;
|
|
tNew: TSpTBXItem;
|
|
tOpen: TSpTBXItem;
|
|
tSave: TSpTBXItem;
|
|
tCut: TSpTBXItem;
|
|
tCopy: TSpTBXItem;
|
|
tPaste: TSpTBXItem;
|
|
tBold: TSpTBXItem;
|
|
SpTBXSeparatorItem8: TSpTBXSeparatorItem;
|
|
tItalic: TSpTBXItem;
|
|
tUnderline: TSpTBXItem;
|
|
mPrint: TSpTBXItem;
|
|
SpTBXSeparatorItem7: TSpTBXSeparatorItem;
|
|
SpTBXSeparatorItem9: TSpTBXSeparatorItem;
|
|
tFind: TSpTBXItem;
|
|
tStop: TSpTBXItem;
|
|
tRefresh: TSpTBXItem;
|
|
tForward: TSpTBXItem;
|
|
tBack: TSpTBXItem;
|
|
tSearch: TSpTBXItem;
|
|
pGroupItem1: TTBGroupItem;
|
|
SpTBXSeparatorItem10: TSpTBXSeparatorItem;
|
|
pCustomize: TSpTBXItem;
|
|
tbLayouts: TSpTBXToolbar;
|
|
tLayoutSave: TSpTBXItem;
|
|
SpTBXLabelItem1: TSpTBXLabelItem;
|
|
tLayoutsToolbar: TSpTBXItem;
|
|
SpTBXCustomizer1: TSpTBXCustomizer;
|
|
cPrint: TSpTBXItem;
|
|
cLeftJustify: TSpTBXItem;
|
|
cCentered: TSpTBXItem;
|
|
cNumBullets: TSpTBXItem;
|
|
cBullets: TSpTBXItem;
|
|
cRightJustify: TSpTBXItem;
|
|
cExit: TSpTBXItem;
|
|
cSelectAll: TSpTBXItem;
|
|
Memo1: TMemo;
|
|
SpTBXSubmenuItem1: TSpTBXSubmenuItem;
|
|
SpTBXTabControl1: TSpTBXTabControl;
|
|
SpTBXTabItem1: TSpTBXTabItem;
|
|
SpTBXTabSheet1: TSpTBXTabSheet;
|
|
SpTBXTabItem2: TSpTBXTabItem;
|
|
SpTBXTabSheet2: TSpTBXTabSheet;
|
|
Memo2: TMemo;
|
|
Memo3: TMemo;
|
|
SpTBXSeparatorItem12: TSpTBXSeparatorItem;
|
|
tSkins: TSpTBXSubmenuItem;
|
|
SpTBXSkinGroupItem1: TSpTBXSkinGroupItem;
|
|
pEmbeddedCustomize: TSpTBXItem;
|
|
SpTBXLabel1: TSpTBXLabel;
|
|
SpTBXSeparatorItem13: TSpTBXSeparatorItem;
|
|
SpTBXTabItem3: TSpTBXTabItem;
|
|
SpTBXTabSheet3: TSpTBXTabSheet;
|
|
Memo4: TMemo;
|
|
SpTBXSplitter1: TSpTBXSplitter;
|
|
SpTBXSplitter2: TSpTBXSplitter;
|
|
tLanguages: TSpTBXComboBox;
|
|
TBControlItem1: TTBControlItem;
|
|
tFont: TSpTBXComboBox;
|
|
TBControlItem2: TTBControlItem;
|
|
tFontSize: TSpTBXComboBox;
|
|
TBControlItem3: TTBControlItem;
|
|
tLayouts: TSpTBXComboBox;
|
|
TBControlItem4: TTBControlItem;
|
|
SpTBXStatusBar1: TSpTBXStatusBar;
|
|
SpTBXColorEdit1: TSpTBXColorEdit;
|
|
TBControlItem5: TTBControlItem;
|
|
procedure ActionsExecute(Sender: TObject);
|
|
procedure FormShow(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure tLayoutSaveClick(Sender: TObject);
|
|
procedure tLayoutsItemClick(Sender: TObject);
|
|
procedure aCustomizeExecute(Sender: TObject);
|
|
procedure aEmbeddedCustomizeExecute(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure tLanguagesItemClick(Sender: TObject);
|
|
procedure SpTBXCustomizer1CreateCustomizeForm(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
public
|
|
{ Public declarations }
|
|
FAppPath: string;
|
|
FIniPath: string;
|
|
procedure FillLayoutList(CurrentLayout: string = '');
|
|
end;
|
|
|
|
var
|
|
Form1: TForm1;
|
|
|
|
implementation
|
|
|
|
uses
|
|
Unit2;
|
|
|
|
{$R *.dfm}
|
|
|
|
//WMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWM
|
|
{ Form }
|
|
|
|
procedure TForm1.FormShow(Sender: TObject);
|
|
begin
|
|
FAppPath := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
|
|
FIniPath := FAppPath + 'Options.ini';
|
|
|
|
// Load the text files
|
|
Memo2.Lines.LoadFromFile(FAppPath + 'faq.txt');
|
|
Memo3.Lines.LoadFromFile(FAppPath + 'advanced.txt');
|
|
Memo4.Lines.LoadFromFile(FAppPath + 'translations.txt');
|
|
|
|
// Load the items positions and the last layout from the ini file
|
|
SpTBXCustomizer1.Load(FIniPath);
|
|
|
|
// Load the layout list
|
|
FillLayoutList('LastLayout');
|
|
|
|
SpTBXCustomizer1.MenuBar := tbMenuBar;
|
|
end;
|
|
|
|
procedure TForm1.FormDestroy(Sender: TObject);
|
|
begin
|
|
// Save the items positions and the current layout to the Ini file
|
|
SpTBXCustomizer1.Save(FIniPath);
|
|
end;
|
|
|
|
//WMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWM
|
|
{ Layouts UI }
|
|
|
|
procedure TForm1.FillLayoutList(CurrentLayout: string);
|
|
var
|
|
I: integer;
|
|
begin
|
|
// Fill the tLayouts combobox
|
|
tLayouts.Items.Clear;
|
|
for I := 0 to SpTBXCustomizer1.Layouts.Count - 1 do
|
|
tLayouts.Items.Add(SpTBXCustomizer1.Layouts[I]);
|
|
I := tLayouts.Items.IndexOf(CurrentLayout);
|
|
if I > -1 then
|
|
tLayouts.ItemIndex := I;
|
|
end;
|
|
|
|
procedure TForm1.tLayoutsItemClick(Sender: TObject);
|
|
begin
|
|
if tLayouts.ItemIndex > -1 then
|
|
SpTBXCustomizer1.LoadLayout(FIniPath, tLayouts.Items[tLayouts.ItemIndex]);
|
|
end;
|
|
|
|
procedure TForm1.tLayoutSaveClick(Sender: TObject);
|
|
var
|
|
S: string;
|
|
begin
|
|
{$IFNDEF UNICODE}
|
|
S := TntDialogs.WideInputBox(_('Save Layout'), _('Save current layout as:'), '');
|
|
{$ELSE}
|
|
S := InputBox(_('Save Layout'), _('Save current layout as:'), '');
|
|
{$ENDIF}
|
|
if S <> '' then begin
|
|
SpTBXCustomizer1.SaveLayout(FIniPath, S);
|
|
FillLayoutList(S);
|
|
end;
|
|
end;
|
|
|
|
//WMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWM
|
|
{ Actions }
|
|
|
|
procedure TForm1.ActionsExecute(Sender: TObject);
|
|
begin
|
|
if Sender is TSpTBXItem then
|
|
Memo1.Lines.Add(TSpTBXItem(Sender).Caption);
|
|
end;
|
|
|
|
procedure TForm1.aCustomizeExecute(Sender: TObject);
|
|
begin
|
|
SpTBXCustomizer1.Show;
|
|
end;
|
|
|
|
procedure TForm1.aEmbeddedCustomizeExecute(Sender: TObject);
|
|
begin
|
|
if not Form2.Visible and not SpTBXCustomizer1.Showing then begin
|
|
SpTBXCustomizer1.ShowEmbedded(Form2.ClientPanel);
|
|
Form2.Show;
|
|
Form2.tCustomize.Click;
|
|
end;
|
|
end;
|
|
|
|
//WMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWM
|
|
{ Languages }
|
|
|
|
function MyWideCustomLoadResString(ResStringRec: PResStringRec; var Value: WideString): Boolean;
|
|
begin
|
|
Result := True;
|
|
Value := GnuGetText.LoadResStringW(ResStringRec);
|
|
end;
|
|
|
|
procedure SpDxGetTextInitialize(LanguageCode: string; AComponents: array of TComponent; ShellFont, UnicodeResourceStrings: Boolean);
|
|
// LanguageCode can be an ISO language code: 'en', 'es', 'ko'
|
|
// And also can be the ISO code plus a description: '[en] English', '[es] Spanish', '[ko] Korean'
|
|
var
|
|
I, L: Integer;
|
|
begin
|
|
// Get the ISO language code
|
|
L := Length(LanguageCode);
|
|
if (L > 2) and (LanguageCode[1] = '[') then begin
|
|
I := Pos(']', LanguageCode);
|
|
if (I > 0) then
|
|
LanguageCode := Copy(LanguageCode, 2, I - 2);
|
|
end;
|
|
|
|
{$IFNDEF UNICODE}
|
|
// Override Delphi's automatic ResourceString conversion to Ansi
|
|
if UnicodeResourceStrings then begin
|
|
TntSystem.InstallTntSystemUpdates;
|
|
// Override TNT's LoadResString function
|
|
// This is necessary because dxGetText uses a different
|
|
// way to access the translated ResourceStrings.
|
|
TntSystem.WideCustomLoadResString := MyWideCustomLoadResString;
|
|
end;
|
|
{$ENDIF}
|
|
|
|
if ShellFont then begin
|
|
if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion >= 5) then
|
|
DefFontData.Name := 'MS Shell Dlg 2'
|
|
else
|
|
DefFontData.Name := 'MS Shell Dlg';
|
|
end;
|
|
|
|
gnugettext.TP_GlobalIgnoreClassProperty(TAction,'Category');
|
|
gnugettext.TP_GlobalIgnoreClassProperty(TControl,'HelpKeyword');
|
|
gnugettext.TP_GlobalIgnoreClassProperty(TControl,'ImeName');
|
|
gnugettext.TP_GlobalIgnoreClass(Graphics.TFont);
|
|
gnugettext.TP_GlobalIgnoreClass(TSpTBXTabSheet);
|
|
|
|
gnugettext.UseLanguage(LanguageCode);
|
|
for I := Low(AComponents) to High(AComponents) do
|
|
gnugettext.TranslateComponent(AComponents[I]);
|
|
end;
|
|
|
|
procedure SpDxGetTextChangeLanguage(LanguageCode: string; AComponents: array of TComponent);
|
|
// LanguageCode can be an ISO language code: 'en', 'es', 'ko'
|
|
// And also can be the ISO code plus a description: '[en] English', '[es] Spanish', '[ko] Korean'
|
|
var
|
|
I, L: Integer;
|
|
C: TComponent;
|
|
begin
|
|
// Get the ISO language code
|
|
L := Length(LanguageCode);
|
|
if (L > 2) and (LanguageCode[1] = '[') then begin
|
|
I := Pos(']', LanguageCode);
|
|
if (I > 0) then
|
|
LanguageCode := Copy(LanguageCode, 2, I - 2);
|
|
end;
|
|
|
|
if LanguageCode <> gnugettext.GetCurrentLanguage then begin
|
|
gnugettext.UseLanguage(LanguageCode);
|
|
for I := Low(AComponents) to High(AComponents) do begin
|
|
C := AComponents[I];
|
|
SpBeginUpdateAllToolbars(C);
|
|
try
|
|
gnugettext.ReTranslateComponent(C);
|
|
finally
|
|
SpEndUpdateAllToolbars(C);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TForm1.tLanguagesItemClick(Sender: TObject);
|
|
var
|
|
I: integer;
|
|
begin
|
|
I := tLanguages.ItemIndex;
|
|
if I > -1 then begin
|
|
tLanguages.Text := tLanguages.Items[I];
|
|
// Change language and retranslate
|
|
if SpTBXCustomizer1.Showing then
|
|
SpDxGetTextChangeLanguage(tLanguages.Text, [Self, Form2, SpTBXCustomizer1.CustomizeForm])
|
|
else
|
|
SpDxGetTextChangeLanguage(tLanguages.Text, [Self, Form2]);
|
|
end;
|
|
end;
|
|
|
|
procedure TForm1.SpTBXCustomizer1CreateCustomizeForm(Sender: TObject);
|
|
begin
|
|
// Don't translate the skins combobox
|
|
gnugettext.TP_Ignore(SpTBXCustomizer1.CustomizeForm, 'cbSkins');
|
|
// Make sure the Customizer form is translated
|
|
gnugettext.TranslateComponent(SpTBXCustomizer1.CustomizeForm);
|
|
end;
|
|
|
|
procedure TForm1.FormCreate(Sender: TObject);
|
|
begin
|
|
SpDxGetTextInitialize('en', [Self], True, True);
|
|
tLanguages.Items.LoadFromFile('langcodes.txt');
|
|
tLanguages.ItemIndex := 2;
|
|
end;
|
|
|
|
end.
|