| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- unit MainFormFooter;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ExtCtrls, StdCtrls, InterfaceAppCentre, cefvcl, AppsLayout, AppBtn,
- pngimage, jpeg;
- type
- TMainFrmFooter = class(TForm, IHotAppView)
- pnlFooter: TPanel;
- chrm1: TChromium;
- imgAppCentre: TImage;
- procedure FormCreate(Sender: TObject);
- procedure imgAppCentreClick(Sender: TObject);
- procedure pnlFooterResize(Sender: TObject);
- procedure imgAppCentreMouseEnter(Sender: TObject);
- procedure imgAppCentreMouseLeave(Sender: TObject);
- private
- FAppsLayout: TAppsLayout;
- FDotPic: TGraphic;
- function CreateAppBtn(AHotApp: IHotApp): TAppBtn;
- procedure SSO(Sender: TObject);
- public
- destructor Destroy; override;
- function AddHotApp(AHotApp: IHotApp): Boolean; stdcall;
- function RemoveHotApp(AHotApp: IHotApp): Boolean; stdcall;
- procedure OnASyncAppIconDownloaded(AAppKey: AnsiString; const ABuffer; const ACount: Integer); stdcall;
- procedure InitHotApps;
- procedure DestroyHotApps;
- end;
- var
- MainFrmFooter: TMainFrmFooter;
- {$I LXTalk.inc}
- implementation
- uses
- AppCentreImport, MainFormContrller, DataProviderImport, InterfaceDataProvider,
- LoggerImport, MainFrm;
- const
- DOT_PNG: string = '\Images\Dot.png';
- DEFAULT_PNG: string = '\Images\DefaultApp.png';
- APPCENTRE_PNG: string = '\Images\appCentre.png';
- {$R *.dfm}
- function TMainFrmFooter.AddHotApp(AHotApp: IHotApp): Boolean;
- var
- AAppBtn: TAppBtn;
- begin
- AAppBtn := CreateAppBtn(AHotApp);
- FAppsLayout.AddAppBtn(AAppBtn);
- FAppsLayout.Layout;
- end;
- function TMainFrmFooter.CreateAppBtn(AHotApp: IHotApp): TAppBtn;
- var
- AStream: TMemoryStream;
- pngObj: TPNGObject;
- ABuffer: TBytes;
- img: TImage;
- begin
- Result := TAppBtn.Create(pnlFooter);
- with Result do
- begin
- Parent := pnlFooter;
- BtnStyle := absSmall;
- AppModel := AHotApp;
- DotPicture.Assign(FDotPic);
- Caption := (AHotApp.GetUserApp.GetTitle);
- ShowHint := True;
- end;
- Result.OnClick := SSO;
- DataProviderImport.GetAppIconProvider.FindIcon(AHotApp.GetUserApp.GetAppKey, ABuffer);
- if Length(ABuffer) = 0 then
- Result.AppIcon.LoadFromFile(ExtractFilePath(ParamStr(0)) + DEFAULT_PNG)
- else
- begin
- Debug('获取到ICON'+AHotApp.GetUserApp.GetAppKey, 'TMainFrmFooter.CreateAppBtn');
- try
- AStream := TMemoryStream.Create;
- AStream.Write(ABuffer[0], Length(ABuffer));
- img := TImage.Create(nil);
- pngObj := TPNGObject.Create;
- AStream.Position := 0;
- pngObj.LoadFromStream(AStream);
- Result.AppIcon.Assign(pngObj);
- except
- on E: Exception do
- begin
- Error(AHotApp.GetUserApp.GetTitle + '的图标不是有效的png图片', 'TMainFrmFooter.CreateAppBtn');
- Result.AppIcon.LoadFromFile(ExtractFilePath(ParamStr(0)) + DEFAULT_PNG);
- FreeAndNil(pngObj);
- FreeAndNil(AStream);
- end;
- end;
- FreeAndNil(pngObj);
- FreeAndNil(AStream);
- end;
- end;
- destructor TMainFrmFooter.Destroy;
- var
- AAppBtn: TAppBtn;
- begin
- while FAppsLayout.Apps.Count > 0 do
- begin
- AAppBtn := FAppsLayout.Apps.Objects[0] as TAppBtn;
- FAppsLayout.Apps.Delete(0);
- FreeAndNil(AAppBtn);
- end;
-
- FreeAndNil(FAppsLayout);
- FreeAndNil(FDotPic);
- inherited;
- end;
- procedure TMainFrmFooter.FormCreate(Sender: TObject);
- begin
- FAppsLayout := TAppsLayout.Create;
- FAppsLayout.Col := 7;
- FAppsLayout.Row := 1;
- FAppsLayout.ClientRect := Rect(57, 0, 245, 30);
- FDotPic := TPNGObject.Create;
- FDotPic.LoadFromFile(ExtractFilePath(ParamStr(0)) + DOT_PNG);
- imgAppCentre.Picture.LoadFromFile(ExtractFilePath(ParamStr(0)) + APPCENTRE_PNG);
- {$IFDEF NXQST}
- imgAppCentre.Hint := '纳税之家';
- {$ENDIF}
- end;
- procedure TMainFrmFooter.imgAppCentreClick(Sender: TObject);
- var
- AURL: string;
- begin
- if GetAppCentreConfig.GetShowType = stOnMainform then
- begin
- if not Mainform.pnlMiddleRight.Visible then
- begin
- if Mainform.RealICQClient.Logined
- and Mainform.RealICQClient.Connected then
- begin
- Mainform.ShowOrHideMuiltiWeb;
- AURL := string(GetAppCentre.GetAppCentreURL);
- MainForm.chrmAppCentre.Load(AURL);
- end;
- end
- else
- Mainform.ShowOrHideMuiltiWeb;
- end
- else
- begin
- GetAppCentre.OpenAppCentreFrom;
- // GetAppCentre.OpenWebDebuggerTool;
- end;
- end;
- procedure TMainFrmFooter.imgAppCentreMouseEnter(Sender: TObject);
- begin
- imgAppCentre.ShowHint := True;
- end;
- procedure TMainFrmFooter.imgAppCentreMouseLeave(Sender: TObject);
- begin
- imgAppCentre.ShowHint := False;
- end;
- procedure TMainFrmFooter.InitHotApps;
- var
- AAppBtn: TAppBtn;
- AList: IInterfaceList;
- iLoop: Integer;
- tmp: Integer;
- begin
- AList := GetAppCentre.GetHotApps;
- if AList = nil then
- Exit;
- for iLoop := 0 to AList.Count - 1 do
- begin
- AAppBtn := CreateAppBtn((AList[iLoop] as IHotApp));
- FAppsLayout.AddAppBtn(AAppBtn);
- end;
- FAppsLayout.Layout;
- // tmp := (pnlFooter.Height - imgAppCentre.Height) div 2;
- // imgAppCentre.Top := tmp;
- // imgAppCentre.Left := pnlFooter.Width - imgAppCentre.Width - tmp;
- end;
- procedure TMainFrmFooter.DestroyHotApps;
- var
- AAppBtn: TAppBtn;
- AList: TStringList;
- iLoop: Integer;
- begin
- AList := FAppsLayout.Apps;
- if AList = nil then
- Exit;
- while AList.Count > 0 do
- begin
- AAppBtn := AList.Objects[0] as TAppBtn;
- AList.Delete(0);
- FreeAndNil(AAppBtn);
- end;
- FAppsLayout.Layout;
- end;
- procedure TMainFrmFooter.OnASyncAppIconDownloaded(AAppKey: AnsiString;
- const ABuffer; const ACount: Integer);
- var
- iLoop: Integer;
- AAppBtn: TAppBtn;
- AHotApp: IHotApp;
- pngObj: TPNGObject;
- AStream: TStream;
- begin
- for iLoop := 0 to FAppsLayout.Apps.Count - 1 do
- begin
- AAppBtn := FAppsLayout.Apps.Objects[iLoop] as TAppBtn;
- AHotApp := AAppBtn.AppModel as IHotApp;
- if SameText(AHotApp.GetUserApp.GetAppKey, AAppKey) then
- begin
- AStream := TMemoryStream.Create;
- try
- pngObj := TPNGObject.Create;
- AStream.Position := 0;
- AStream.Write(TBytes(ABuffer)[0], ACount);
- AStream.Position := 0;
- pngObj.LoadFromStream(AStream);
- AAppBtn.AppIcon.Assign(pngObj);
- AAppBtn.Invalidate;
- FreeAndNil(pngObj);
- finally
- AStream.Free;
- end;
- Exit;
- end;
- end;
- end;
- procedure TMainFrmFooter.pnlFooterResize(Sender: TObject);
- var
- tmp: Integer;
- begin
- tmp := ((Sender as TControl).Height - imgAppCentre.Height) div 2;
- imgAppCentre.Top := tmp;
- imgAppCentre.Left := (Sender as TControl).Width - imgAppCentre.Width - tmp;
- end;
- function TMainFrmFooter.RemoveHotApp(AHotApp: IHotApp): Boolean;
- var
- iLoop: Integer;
- AAppBtn: TAppBtn;
- AOldHotApp: IHotApp;
- begin
- for iLoop := 0 to FAppsLayout.Apps.Count - 1 do
- begin
- AAppBtn := FAppsLayout.Apps.Objects[iLoop] as TAppBtn;
- AOldHotApp := AAppBtn.AppModel as IHotApp;
- if SameText(AOldHotApp.GetUserApp.GetAppKey, AHotApp.GetUserApp.GetAppKey) then
- begin
- FAppsLayout.RemoveAppBtn(AAppBtn);
- FreeAndNil(AAppBtn);
- Exit;
- end;
- end;
- end;
- procedure TMainFrmFooter.SSO(Sender: TObject);
- var
- AHotApp: IHotApp;
- begin
- if (Sender = nil) or not (Sender is TAppBtn) then
- Exit;
-
- AHotApp := (Sender as TAppBtn).AppModel as IHotApp;
- GetAppCentre.SSO(AHotApp.GetUserApp.GetAppKey);
- end;
- initialization
- finalization
- if MainFrmFooter <> nil then
- FreeAndNil(MainFrmFooter);
- end.
|