UserCardView.pas 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. unit UserCardView;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, RealICQSkinFrm, cefvcl, UserCardWebApp, ExtCtrls, ceflib, BaseWebApp;
  6. type
  7. TUserCardViewForm = class(TRealICQSkinForm)
  8. chrm1: TChromium;
  9. tmrForClose: TTimer;
  10. tmrForGoTop: TTimer;
  11. procedure FormShow(Sender: TObject);
  12. procedure FormCreate(Sender: TObject);
  13. procedure FormDestroy(Sender: TObject);
  14. procedure tmrForGoTopTimer(Sender: TObject);
  15. procedure tmrForCloseTimer(Sender: TObject);
  16. procedure chrm1KeyEvent(Sender: TObject; const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: PMsg; out Result: Boolean);
  17. procedure chrm1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel);
  18. private
  19. FWebApp: TUserCardWebApp;
  20. FLoginName: string;
  21. FTargetTop: Integer;
  22. procedure SetTargetTop(const Value: Integer);
  23. { Private declarations }
  24. public
  25. procedure ChangeUIColor(AColor: TColor); override;
  26. procedure Update(ALoginName: string);
  27. property LoginName: string read FLoginName write FLoginName;
  28. property TargetTop: Integer read FTargetTop write SetTargetTop;
  29. end;
  30. var
  31. UserCardViewForm: TUserCardViewForm;
  32. implementation
  33. uses
  34. MainFrm, DevToolChromeFrm, ConditionConfig;
  35. {$R *.dfm}
  36. { TUserCardViewForm }
  37. procedure TUserCardViewForm.ChangeUIColor(AColor: TColor);
  38. begin
  39. inherited ChangeUIColor(AColor);
  40. end;
  41. procedure TUserCardViewForm.chrm1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel);
  42. begin
  43. model.Clear;
  44. model.AddItem(Integer(MENU_ID_COPY), '¸´ÖÆ');
  45. end;
  46. procedure TUserCardViewForm.chrm1KeyEvent(Sender: TObject; const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: PMsg; out Result: Boolean);
  47. begin
  48. if (TConditionConfig.GetConfig.Dev) and (event^.windows_key_code = VK_F12) then
  49. ShowDevTool(Self, chrm1);
  50. end;
  51. procedure TUserCardViewForm.FormCreate(Sender: TObject);
  52. begin
  53. FWebApp := TUserCardWebApp.Create(chrm1);
  54. end;
  55. procedure TUserCardViewForm.FormDestroy(Sender: TObject);
  56. begin
  57. FreeAndNil(FWebApp);
  58. end;
  59. procedure TUserCardViewForm.FormShow(Sender: TObject);
  60. var
  61. URL: string;
  62. begin
  63. ChangeUIColor(MainForm.FormColor);
  64. if TConditionConfig.GetConfig.RemoteUI then
  65. begin
  66. URL := Format('%s/userview/index.html', [TConditionConfig.GetConfig.RemoteUIHost]);
  67. end
  68. else
  69. URL := ExtractFilePath(paramstr(0)) + 'html/userview/index.html';
  70. chrm1.Load(URL);
  71. end;
  72. procedure TUserCardViewForm.SetTargetTop(const Value: Integer);
  73. var
  74. P: TPoint;
  75. begin
  76. FTargetTop := Value - 30;
  77. if FTargetTop < 0 then
  78. FTargetTop := 0;
  79. if FTargetTop + Height > Screen.WorkAreaHeight then
  80. FTargetTop := Screen.WorkAreaHeight - Height;
  81. P.X := 0;
  82. P.Y := 0;
  83. P := MainForm.pnlAll.ClientToScreen(P);
  84. if Width > P.X then
  85. Left := P.X + MainForm.pnlAll.Width + 2
  86. else
  87. Left := P.X - Width - 2;
  88. if not Visible then
  89. begin
  90. Top := FTargetTop;
  91. Show;
  92. end
  93. else
  94. begin
  95. tmrForGoTop.Enabled := True;
  96. end;
  97. end;
  98. procedure TUserCardViewForm.tmrForCloseTimer(Sender: TObject);
  99. begin
  100. tmrForClose.Enabled := False;
  101. if (Mouse.CursorPos.X >= Left) and (Mouse.CursorPos.X <= Left + Width) and (Mouse.CursorPos.Y >= Top) and (Mouse.CursorPos.Y <= Top + Height) then
  102. begin
  103. tmrForClose.Enabled := True;
  104. end
  105. else
  106. begin
  107. MainForm.HideUserCardForm;
  108. end;
  109. end;
  110. procedure TUserCardViewForm.tmrForGoTopTimer(Sender: TObject);
  111. begin
  112. if abs(Top - FTargetTop) < 15 then
  113. Top := FTargetTop;
  114. tmrForGoTop.Enabled := Top <> FTargetTop;
  115. if Top < FTargetTop then
  116. begin
  117. Top := Top + 15;
  118. end
  119. else if Top > FTargetTop then
  120. begin
  121. Top := Top - 15;
  122. end;
  123. end;
  124. procedure TUserCardViewForm.Update(ALoginName: string);
  125. begin
  126. if ALoginName = '' then
  127. Exit;
  128. FWebApp.LoginName := ALoginName;
  129. end;
  130. initialization
  131. finalization
  132. if UserCardViewForm <> nil then
  133. FreeAndNil(UserCardViewForm);
  134. end.