unit U_HintBar;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
FastStrings, Dialogs, StdCtrls, OleCtrls, SHDocVw, ucCustomizedWebBrowser, ActiveX, //MSHTML_TLB,
U_LNG, U_Common, U_ResourceReport, U_BaseCommon, U_SCSComponent, U_ESCadClasess;
type
TF_HintBar = class(TForm)
WebBrowser: TCustomizedWebBrowser;
procedure WebBrowserBeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
procedure WebBrowserEnter(Sender: TObject);
function WebBrowserPressAccelerator(Sender: TObject;
const lpMsg: tagMSG): Boolean;
protected
FBNext: String;
FBBack: String;
FBFirst: String;
FTplPath: String;
procedure AssignEmptyDocument;
procedure Go(Url: string);
procedure HideHints;
function LoadFromStream(const AStream: TStream): HRESULT;
function LoadFromStrings(const AStrings: TStrings): HRESULT;
function LoadFromString(const S: string): HRESULT;
function LoadFromFile(const FileName: string): HRESULT;
procedure LoadNavButton(var aBtCode: String; const aTplDir, aTpl, aDefText: String);
procedure StepWizard(aDirection: Integer);
public
FCurrStep: Integer;
FStepCount: Integer;
function GetPathTpl(aRelative: Boolean=false): String;
procedure FirstWizard;
procedure NextWizard;
procedure BackWizard;
procedure StartWizard;
end;
var
F_HintBar: TF_HintBar;
//F_ResourceReport: TF_ResourceReport;
implementation
Uses USCS_Main, U_Main;
{$R *.dfm}
{ TF_HintBar }
procedure TF_HintBar.AssignEmptyDocument;
begin
Go('about:blank');
end;
procedure TF_HintBar.BackWizard;
begin
StepWizard(-1);
end;
procedure TF_HintBar.Go(Url: string);
var
_URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
begin
//WebBrowser._URL := Url;
Flags := 0;
TargetFrameName := 0;
Postdata := 0;
Headers := 0;
if (Trim(Url) <> '') then
//WebBrowser.Navigate2(Url, Flags, TargetFrameName, PostData, Headers);
WebBrowser.Navigate(Url, Flags, TargetFrameName, PostData, Headers);
end;
procedure TF_HintBar.HideHints;
begin
HideHintRz;
HideHintImg;
end;
function TF_HintBar.LoadFromFile(const FileName: string): HRESULT;
var
Stream: TStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
Result := LoadFromStream(Stream);
finally
Stream.Free;
end;
end;
function TF_HintBar.LoadFromStream(const AStream: TStream): HRESULT;
begin
if not Assigned(WebBrowser.Document) then
AssignEmptyDocument;
AStream.seek(0, 0);
Result := (WebBrowser.Document as IPersistStreamInit).Load(TStreamadapter.Create(AStream));
end;
function TF_HintBar.LoadFromStrings(const AStrings: TStrings): HRESULT;
var
M: TMemoryStream;
begin
if not Assigned(WebBrowser.document) then
AssignEmptyDocument;
M := TMemoryStream.Create;
try
AStrings.SaveToStream(M);
Result := LoadFromStream(M);
except
Result := S_False;
end;
M.free;
end;
function TF_HintBar.LoadFromString(const S: string): HRESULT;
var
Strings: TStringList;
begin
Strings := TStringList.Create;
try
Strings.Text := S;
Result := LoadFromStrings(Strings);
finally
FreeAndNil(Strings);
end;
end;
//Tolik 13/04/2022 --
{
function TF_HintBar.GetPathTpl(aRelative: Boolean=false): String;
begin
Result := GetPathToHelp(aRelative) + '\HintBox\';
if F_LNG.siLangDisp.Language = 'ENG' then
Result := Result + 'en\'
else
Result := Result + 'ru\';
end;
}
function TF_HintBar.GetPathTpl(aRelative: Boolean=false): String;
begin
Result := GetPathToHelp(aRelative) + '\HintBox\';
if F_LNG.siLangDisp.Language = 'ENG' then
Result := Result + 'en\'
else
if F_LNG.siLangDisp.Language = 'RUS' then
Result := Result + 'ru\'
else
if F_LNG.siLangDisp.Language = 'UKR' then
Result := Result + 'ukr\';
end;
//
procedure TF_HintBar.FirstWizard;
begin
StepWizard(1-FCurrStep);
end;
procedure TF_HintBar.NextWizard;
begin
StepWizard(1);
end;
procedure TF_HintBar.StartWizard;
var
TplDir: String;
TplDirRel: String;
Files: TStringList;
begin
TplDir := GetPathTpl;
if DirectoryExists(TplDir) then
begin
Files := GetDirFiles(TplDir);
if Files.Count > 0 then
begin
//LoadNavButton(FBNext, TplDir, 'bNext.tpl', 'Next');
//LoadNavButton(FBBack, TplDir, 'bBack.tpl', 'Back');
//TplDirRel := GetPathTpl(true);
//FBNext := '
';
//FBBack := '
';
TplDirRel := GetPathTpl(false)+'nav\';
//FBNext := '
';
//FBBack := '
';
FBNext := '
';
// FBBack := '
';
FBBack := '<'; //15.07.2013 FBBack := '<<';
FBFirst := '<<';
//FBNext := 'Next';
//FBBack := 'Back';
FCurrStep := 1;
FStepCount := Files.Count;
StepWizard(0);
end;
FreeAndNil(Files);
end;
end;
procedure TF_HintBar.StepWizard(aDirection: Integer);
const
tplBegin = '
'+
''+
''+
''+
'';
//Tpls : array[1..7] of string =
// (
// 'Create a new project.',
// ) ;
var
NewStep: Integer;
TplPath: String;
Tpl: String;
TplNav: String;
StringList: TStringList;
begin
if aDirection <> 0 then
begin
NewStep := FCurrStep + aDirection;
if (NewStep > 0) and (NewStep <= FStepCount) then
FCurrStep := NewStep;
end;
//Tpl := Tpls[FCurrStep];
FTplPath := GetPathTpl;
TplPath := FTplPath +'\'+IntToStr(FCurrStep)+'.tpl';
Tpl := '';
if FileExists(TplPath) then
Tpl := GetFileContents(TplPath);
// TplNav
TplNav := '';
if FCurrStep > 1 then
begin
if TplNav <> '' then
TplNav := TplNav + ' ';
//TplNav := TplNav + ''+FBBack+'';
if FCurrStep > 2 then
begin
TplNav := TplNav + ''+FBFirst+'';
TplNav := TplNav + ' ';
end;
TplNav := TplNav + ''+FBBack+'';
end;
if FCurrStep < FStepCount then
begin
if TplNav <> '' then
TplNav := TplNav + ' ';
//TplNav := TplNav + ''+FBNext+'';
TplNav := TplNav + ''+FBNext+'';
end;
if TplNav <> '' then
TplNav := ' '+ TplNav;
LoadFromString(tplBegin + Tpl +TplNav + tplEnd);
{StringList := TStringList.Create;
StringList.Text := tplBegin + Tpl +TplNav + tplEnd;
FreeAndNil(StringList);}
end;
procedure TF_HintBar.WebBrowserBeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
var
PosAbout: Integer;
UrlParts: TStringList;
UrlCmd: String;
ovElem: OleVariant;
Str: String;
//SprComponentType: TNBComponentType;
SCSCompon: TSCSComponent;
ComponOwner: TSCSCatalog;
FileName: String;
function DefineWorkList: Boolean;
var
ListParams: TListParams;
begin
Result := false;
if GCadForm <> nil then
begin
if GCadForm.FListType <> lt_Normal then
if GCadForm.FListType <> lt_Normal then
begin
ListParams := GetListParams(GCadForm.FCADListID);
if ListParams.Settings.IDListForDesignList <> 0 then
SwitchListInCAD(ListParams.Settings.IDListForDesignList, '');
end;
Result := GCadForm.FListType = lt_Normal;
end;
end;
begin
if (URL <> 'about:blank') then
begin
URL := FastReplace(URL, 'about:blank', 'about:', false);
PosAbout := Pos('about:', URL);
if PosAbout = 1 then
begin
UrlParts := SplitString(Copy(URL, Length('about:')+1, Length(URL)-(Length('about:'))), '_', false);
if UrlParts.Count > 0 then
begin
HideHints;
UrlCmd := UrlParts[0];
if UrlCmd = 'navFirst' then
FirstWizard
else if UrlCmd = 'navBack' then
BackWizard
else if UrlCmd = 'navNext' then
NextWizard
else if UrlCmd = 'actToolTip' then //else if UrlCmd = 'actLearnMore' then
begin
if UrlParts.Count > 1 then
begin
ovElem := WebBrowser.OleObject.document.getElementbyId('ttContent'+UrlParts[1]); //ovElem := WebBrowser.OleObject.document.getElementbyId('lmContent'+UrlParts[1]);
//ShowMessage(ovElem.tagName);
//if ovElem <> null then
if ovElem.tagName = 'SPAN' then
begin
Str := ovElem.InnerHTML; //ovElem.textContent;
Str := FastReplace(Str, 'about:blank', 'about:', false);
ShowHintRz(Str, 60000);
end
else
if ovElem.tagName = 'IMG' then
begin
//ShowMessage((ovElem as IHTMLImgElement).Href);
//ShowMessage(ovElem.url);
FileName := ovElem.href;
FileName := FastReplace(FileName, 'about:blank', 'about:', false);
FileName := Copy(FileName, Length('about:')+1, Length(URL)-(Length('about:')));
//TplDirRel := GetPathTpl(false)+'nav\';
try
ShowHintImg(FTplPath + 'img\'+ FileName, 0);
except
on E: Exception do AddExceptionToLogEx('', E.Message);
end;
end;
end;
end
else if UrlCmd = 'actNewProj' then
FSCS_Main.aNew.Execute
else if UrlCmd = 'actFloorPlan' then
FSCS_Main.aLoadSubstrate.Execute
else if UrlCmd = 'actRackDesign' then
begin
if F_ProjMan <> nil then
if F_ProjMan.GSCSBase.CurrProject.CurrList <> nil then
begin
SCSCompon := F_ProjMan.GSCSBase.CurrProject.CurrList.ComponentReferences.GetComponentByType(ctsnCupboard);
if SCSCompon <> nil then
begin
ComponOwner := SCSCompon.GetFirstParentCatalog;
if Assigned(ComponOwner) then
CreateOpenDesignListFromPM(ComponOwner.ListID, ComponOwner.SCSID);
end;
end;
end
else if UrlCmd = 'act3DView' then
begin
if DefineWorkList then
//FSCS_Main.tb3D.Click
FSCS_Main.n3DModelForProjectClick(nil);
end
else if UrlCmd = 'actSpecification' then
begin
if DefineWorkList then
begin
//RepWizard;
if F_ProjMan.F_ResourceReport = nil then
begin
F_ProjMan.F_ResourceReport := TF_ResourceReport.Create(F_ProjMan, TForm(F_ProjMan));
{$IF Defined(SCS_RF)}
F_ProjMan.F_ResourceReport.pnOtherProperties.Visible := false;
{$IFEND}
{$IF Defined(SCS_PE) or Defined(SCS_SPA)}
F_ProjMan.F_ResourceReport.pnOtherProperties.Visible := false;
{$IFEND}
end;
F_ProjMan.F_ResourceReport.Timer_TimeOutExec.Enabled := True;
F_ProjMan.F_ResourceReport.Timer_TimeOutExec.Tag := 1;
F_ProjMan.F_ResourceReport.ShowWizard([rkProject]);
FreeAndNil(F_ProjMan.F_ResourceReport);
end;
end
else if UrlCmd = 'actWiringLogBook' then
begin
if DefineWorkList then
begin
if F_ProjMan.F_ResourceReport = nil then
begin
F_ProjMan.F_ResourceReport := TF_ResourceReport.Create(F_ProjMan, TForm(F_ProjMan));
{$IF Defined(SCS_RF)}
F_ProjMan.F_ResourceReport.pnOtherProperties.Visible := false;
{$IFEND}
{$IF Defined(SCS_PE) or Defined(SCS_SPA)}
F_ProjMan.F_ResourceReport.pnOtherProperties.Visible := false;
{$IFEND}
end;
F_ProjMan.F_ResourceReport.Timer_TimeOutExec.Enabled := True;
F_ProjMan.F_ResourceReport.Timer_TimeOutExec.Tag := 3;
F_ProjMan.F_ResourceReport.ShowWizard([rkProject]);
FreeAndNil(F_ProjMan.F_ResourceReport);
end;
end
else if UrlCmd = 'actProjTopology' then
begin
FSCS_Main.aCreateProjectPlan.Execute
end
else if UrlCmd = 'actOtherReports' then
begin
if DefineWorkList then
RepWizard;
end
else if UrlCmd = 'actExpProjPDF' then
FSCS_Main.aSaveProjectToPDF.Execute
else if UrlCmd = 'actExpProjDXF' then
FSCS_Main.aSaveVectorDrawing.Execute
else if UrlCmd = 'actExpProjOtherFormat' then
FSCS_Main.aSaveAsSCSProject.Execute;
end;
Cancel := true;
end;
end;
end;
procedure TF_HintBar.WebBrowserEnter(Sender: TObject);
begin
HideHints;
end;
function TF_HintBar.WebBrowserPressAccelerator(Sender: TObject;
const lpMsg: tagMSG): Boolean;
begin
//
end;
procedure TF_HintBar.LoadNavButton(var aBtCode: String; const aTplDir, aTpl, aDefText: String);
var
btPath: String;
begin
if aBtCode = '' then
begin
btPath := aTplDir + aTpl;
if FileExists(btPath) then
aBtCode := GetFileContents(btPath)
else
aBTCode := aDefText;
end;
end;
end.