| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- unit TalkMainView;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ExtCtrls, OleCtrls, SHDocVw, StdCtrls, RxRichEd, RealICQRichEdit,
- Buttons, RealICQButton, RealICQSpeedButton, UITalkFormBase, cefvcl, ceflib;
- type
- TTalkMainViewForm = class(TForm)
- pnlTalkingArea: TPanel;
- Splitter1: TSplitter;
- pnlInputer: TPanel;
- pnlInputeBack: TPanel;
- pnlBar: TPanel;
- pnlDisplayer: TPanel;
- pnlForWebBrowser: TPanel;
- WebBrowser: TChromium;
- spbFont: TRealICQSpeedButton;
- spbSelUIColor: TRealICQSpeedButton;
- spbBackground: TRealICQSpeedButton;
- spbFace: TRealICQSpeedButton;
- spbSendImage: TRealICQSpeedButton;
- spbShakeWindow: TRealICQSpeedButton;
- spbCopyScreen: TRealICQSpeedButton;
- ImgInputerTopMiddle: TImage;
- spbNormalMsg: TRealICQSpeedButton;
- spbHistroyMessage: TRealICQSpeedButton;
- Panel1: TPanel;
- Panel2: TPanel;
- RichEdInputer: TRealICQRichEdit;
- lblState: TLabel;
- btDownArrow: TRealICQButton;
- btSend: TRealICQButton;
- btCloseTalk: TRealICQButton;
- procedure btSendClick(Sender: TObject);
- procedure WebBrowserProcessMessageReceived(Sender: TObject;
- const browser: ICefBrowser; sourceProcess: TCefProcessId;
- const message: ICefProcessMessage; out Result: Boolean);
- procedure WebBrowserKeyEvent(Sender: TObject; const browser: ICefBrowser;
- const event: PCefKeyEvent; osEvent: PMsg; out Result: Boolean);
- private
- FLastSendMsgTicket: Cardinal;
- FUITalkFormBase: TUITalkFormBase;
- FContextGUID: string;
- function GetInputerLength: Integer;
- procedure RichEdInputerChange(Sender: TObject);
- public
-
- property TalkFormBase : TUITalkFormBase read FUITalkFormBase write FUITalkFormBase;
- end;
- implementation
- uses
- RealICQModel, HtmlService, FaceService, LimitCondition, xFonts, LoggerImport,
- InterfaceLogger, DevToolChromeFrm;
- const
- TalkingTextColor :String = '#585858'; {对话窗口中系统信息字体颜色}
- MaxMessageLength :Integer = 3500; {消息的最大字符数}
-
- {$R *.dfm}
- function TTalkMainViewForm.GetInputerLength: Integer;
- var
- AFace: TFace;
- iLoop,
- InputerLength: Integer;
- FaceInRichEdit: TFaceInRichEdit;
- FaceIndexes: TIndexes;
- AFaceService: TFaceService;
- begin
- InputerLength := Length(Trim(RichEdInputer.Text));
- FaceIndexes := RichEdInputer.GetFaceIndexes;
- AFaceService := TFaceService.GetService;
- for iLoop := 0 to Length(FaceIndexes) - 1 do
- begin
- FaceInRichEdit := FaceIndexes[iLoop];
- AFace := AFaceService.GetFace(FaceInRichEdit.FaceIndex);
- if AFaceService.IsSystemFace(FaceInRichEdit.FaceIndex) then
- Inc(InputerLength, Length(AFace.ShortCut))
- else
- Inc(InputerLength, 38);
- end;
-
- Result := InputerLength;
- end;
- procedure TTalkMainViewForm.btSendClick(Sender: TObject);
- var
- AFace: TFace;
- FaceMD5String,
- MessageStr: String;
- BaseSelStart,
- iCount,
- iLoop: Integer;
- FaceInRichEdit: TFaceInRichEdit;
- FaceIndexes: TIndexes;
- FRealICQUser: TRealICQUser;
- saystr,
- AError: String;
- AFaces: TStringList;
- AFaceService: TFaceService;
- msg: ICefProcessMessage;
- ACefObject,ACefFunction: ICefv8Value;
- Argm: TCefv8ValueArray;
- begin
- msg := TCefProcessMessageRef.New('RecvMessage');
- msg.ArgumentList.SetString(0, FContextGUID);
- WebBrowser.Browser.SendProcessMessage(PID_RENDERER, msg);
- // WebBrowser.Browser.MainFrame.ExecuteJavaScript('lxtalkClient.OnRecvMessage()', WebBrowser.Browser.MainFrame.GetURL, 0);
- // ACefObject := WebBrowser.Browser.MainFrame.GetV8Context.Global.GetValueByKey('lxtalkClient');
- // ACefFunction := ACefObject.GetValueByKey('OnRecvMessage');
- // if (ACefObject <> nil) and (ACefObject.IsFunction) then
- // ACefObject.ExecuteFunction(ACefFunction, Argm);
- // if (GetTickCount - FLastSendMsgTicket) < 200 then
- // begin
- // THtmlService.GetService.ShowSendMessageTooQuickly(WebBrowser);
- // Exit;
- // end;
- //
- // if GetInputerLength > MaxMessageLength + 64 then
- // begin
- // MessageBox(Handle, '对不起,您输入消息太长', '提示', MB_ICONINFORMATION);
- // RichEdInputer.SetFocus;
- // Exit;
- // end;
- //
- // MessageStr := '';
- // AFaces:= TStringList.Create;
- //
- // FaceIndexes := RichEdInputer.GetFaceIndexes;
- // BaseSelStart := 0;
- // RichEdInputer.OnChange := nil;
- // RichEdInputer.Visible := False;
- // AFaceService := TFaceService.GetService;
- // try
- // iCount := 0;
- // for iLoop := 0 to Length(FaceIndexes) - 1 do
- // begin
- // FaceInRichEdit := FaceIndexes[iLoop];
- // AFace := AFaceService.GetFace(FaceInRichEdit.FaceIndex);
- // if TLimitCondition.GreaterThanFaceMaxSize(AFace.FileName, AError) then
- // begin
- // MessageBox(Handle, PChar(AError), '提示', MB_ICONINFORMATION);
- // Error(AError, 'TLimitCondition.GreaterThanFaceMaxSize');
- // RichEdInputer.SetFocus;
- // Exit;
- // end;
- // end;
- //
- // for iLoop := 0 to Length(FaceIndexes) - 1 do
- // begin
- // FaceInRichEdit := FaceIndexes[iLoop];
- // AFace := AFaceService.GetFace(FaceInRichEdit.FaceIndex);
- //
- // if AFaceService.IsSystemFace(FaceInRichEdit.FaceIndex) then
- // FaceMD5String := AFace.ShortCut
- // else
- // begin
- // FaceMD5String := '[IMG:' + AFace.MD5Code + ']';
- // Inc(iCount);
- // AFaces.addObject(AFace.FileName, AFace);
- // end;
- //
- // RichEdInputer.SelStart := BaseSelStart + FaceInRichEdit.FacePosition;
- // RichEdInputer.SelLength := 1;
- // RichEdInputer.SelText := FaceMD5String;
- // Inc(BaseSelStart, Length(FaceMD5String) - 1);
- // end;
- //
- // MessageStr := Trim(RichEdInputer.Text);
- // if Length(MessageStr) = 0 then
- // begin
- // MessageBox(Handle, '对不起,不能发送空消息', '提示', MB_ICONINFORMATION);
- // Exit;
- // end;
- //
- // if GetInputerLength > 4096 then
- // begin
- // MessageBox(Handle, '对不起,您输入消息太长', '提示', MB_ICONINFORMATION);
- // RichEdInputer.SetFocus;
- // Exit;
- // end;
- // finally
- // RichEdInputer.Visible := True;
- // RichEdInputer.SetFocus;
- // end;
- //
- // RichEdInputer.MaxLength := MaxMessageLength;
- // RichEdInputer.Lines.Clear;
- // RichEdInputer.Clear;
- // RichEdInputer.OnChange := RichEdInputerChange;
- // RichEdInputer.Visible := True;
- // RichEdInputer.SetFocus;
- // FUITalkFormBase.ClearImages;
- //
- // FUITalkFormBase.SendMessage(MessageStr, FontToString(RichEdInputer.Font), AFaces);
- // FLastSendMsgTicket := GetTickCount;
- end;
- procedure TTalkMainViewForm.RichEdInputerChange(Sender: TObject);
- var
- iLoop,
- iLength,
- InputerLength,
- iStart:Integer;
- AFace: TFace;
- AFaces: TStringList;
- begin
- iLength := Length(RichEdInputer.Text);
- FUITalkFormBase.SendInputing;
- if iLength = 0 then Exit;
- RichEdInputer.OnChange := nil;
- AFaces := TFaceService.GetService.Faces;
- try
- for iLoop := 0 to AFaces.Count - 1 do
- begin
- AFace := AFaces.Objects[iLoop] as TFace;
- if AFace.ShortCut = '' then continue;
-
- iStart := TRxRichEdit(Sender).FindText(AFace.ShortCut, 0, iLength, []);
- while iStart >= 0 do
- begin
- RichEdInputer.SelStart := iStart;
- RichEdInputer.SelLength := Length(AFace.ShortCut);
- RichEdInputer.InsertImage(AFace.FileName, iLoop);
- RichEdInputer.SelStart := TRxRichEdit(Sender).SelStart;
- RichEdInputer.SelLength := 0;
- iStart := RichEdInputer.FindText(AFace.ShortCut, RichEdInputer.SelStart, iLength, []);
- end;
- end;
- finally
- RichEdInputer.OnChange := RichEdInputerChange;
- end;
- RichEdInputer.MaxLength := Length(Trim(RichEdInputer.Text));
- InputerLength := GetInputerLength;
- if MaxMessageLength - InputerLength > 0 then
- RichEdInputer.MaxLength := RichEdInputer.MaxLength + (MaxMessageLength - InputerLength);
- RichEdInputer.Invalidate;
- end;
- procedure TTalkMainViewForm.WebBrowserKeyEvent(Sender: TObject;
- const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: PMsg;
- out Result: Boolean);
- begin
- if (event^.windows_key_code = VK_F12) then
- ShowDevTool(Self, WebBrowser);
- end;
- procedure TTalkMainViewForm.WebBrowserProcessMessageReceived(Sender: TObject;
- const browser: ICefBrowser; sourceProcess: TCefProcessId;
- const message: ICefProcessMessage; out Result: Boolean);
- begin
- Result := True;
- if (message.ArgumentList.GetSize = 0) and (message.ArgumentList.GetType(0) <> VTYPE_STRING) then
- Exit;
- if message.ArgumentList.GetString(0) = 'register' then
- begin
- FContextGUID := message.ArgumentList.GetString(2);
- ShowMessage(FContextGUID);
- end;
- end;
- end.
|