_uf_chat.pas

unit _uf_chat;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, ScktComp, ExtCtrls;

type
  T_FCHAT = class(TForm)
    m: TRichEdit;
    ed: TEdit;
    c3chat: TClientSocket;
    Shape2: TShape;
    Shape1: TShape;
    procedure edKeyPress(Sender: TObject; var Key: Char);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure c3chatConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure c3chatDisconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure c3chatError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure c3chatRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormActivate(Sender: TObject);

  protected
  procedure CreateParams(var Params: TCreateParams); override;

  private
    _can_send_typing4:boolean;
   
  public
    zoka:integer;
    niko:string;
    uip:string[15];
    isZunderF3:Boolean;
    procedure logy(sx: string;b:byte);
  end;

var
  _FCHAT: T_FCHAT;

implementation

uses _uc_refs_consts, _uc_refs_vars, Unit1, _uc_crypto, _uc_GuiLanG;

{$R *.DFM}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure T_FCHAT.CreateParams(var Params: TCreateParams);
begin

Inherited CreateParams(Params);
Params.WndParent := GetDesktopWindow;
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure T_FCHAT.logy(sx: string;b:byte);
begin

m.SelStart:=m.GetTextLen ;
m.SelAttributes.Style:=[];

case b of
    1 : m.SelAttributes.Style:=[fsbold];
    2 : m.SelAttributes.Style:=[fsItalic];
end;

m.Lines.Add(sx);

end;

//------------------------------------------------------------------------------
procedure T_FCHAT.edKeyPress(Sender: TObject; var Key: Char);
var
s:string;
i:integer;
begin


//

if (key<>#13)and(_can_send_typing4) then
begin
_can_send_typing4:=false;

  if (isZunderF3) then
  c3chat.Socket.SendText(TCrypto._BarzaToon('ZATY_typing...$'))
  else
  begin

   s:='ZATY_typing...$';
   for i:=0 to _FXOC_MAIN.ssCHATER.Socket.ActiveConnections -1 do
   if _FXOC_MAIN.ssCHATER.Socket.Connections[i].SocketHandle=zoka then
   begin
   _FXOC_MAIN.ssCHATER.Socket.Connections[i].SendText(TCrypto._BarzaToon(s));
   break;
   end;

  end;


end;


if (key=#13)and(ed.Text<>'') then
begin

  if (isZunderF3) then
  c3chat.Socket.SendText(TCrypto._BarzaToon('ZATY'+_VV_LOCAL_USER_NIKO+' :'+ret+ed.Text+'$'))
  else
  begin

   s:='ZATY'+_VV_LOCAL_USER_NIKO+' :'+ret+ed.Text+'$';
   for i:=0 to _FXOC_MAIN.ssCHATER.Socket.ActiveConnections -1 do
   if _FXOC_MAIN.ssCHATER.Socket.Connections[i].SocketHandle=zoka then
   begin
   _FXOC_MAIN.ssCHATER.Socket.Connections[i].SendText(TCrypto._BarzaToon(s));
   break;
   end;

  end;



logy(ret+FormatDateTime('[hh:mm] ',now)+_VV_LOCAL_USER_NIKO+' :',1);
logy(ed.text,0);

key:=#0;
_can_send_typing4:=true;
ed.Clear;
ed.SetFocus;
end;

end;

//------------------------------------------------------------------------------
procedure T_FCHAT.FormCreate(Sender: TObject);
begin
_can_send_typing4:=true;
isZunderF3:=false;
m.Paragraph.FirstIndent:=3;
_FXOC_MAIN._images.GetIcon(17,icon);
end;

//------------------------------------------------------------------------------
procedure T_FCHAT.FormShow(Sender: TObject);
begin

if (not isZunderF3) then exit;

Caption:=niko;
logy(ret+___ccc__0045__Connecting,1);
c3chat.port     :=_C_EXOSEE_CHATER_SERVER_PORT;
c3chat.Host__ip :=uip;
c3chat.Active   :=true;
end;

//------------------------------------------------------------------------------
procedure T_FCHAT.c3chatConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
logy(ret+FormatDateTime('[hh:mm] ',now)+___ccc__0068__ConnectedTo+niko,1);
Socket.SendText(TCrypto._BarzaToon('<ZATC><'+_VV_LOCAL_USER_PC_ID+'>'));
end;

//------------------------------------------------------------------------------
procedure T_FCHAT.c3chatDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
logy(ret+___ccc__0009__Disconnected,1);
m.Update;
end;

//------------------------------------------------------------------------------
procedure T_FCHAT.c3chatError(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode:=0;
end;

//------------------------------------------------------------------------------
procedure T_FCHAT.c3chatRead(Sender: TObject; Socket: TCustomWinSocket);
var
s:string;
p:integer;
begin

if (_THE_EXOSEE_APPLICATION_IS_TERMINATED) then exit;

s:=TCrypto._SimSim(Socket.ReceiveText);

if (copy(s,1,4)='ZAWA') then
begin
Delete(s,1,4);
s:=ret+format(___ccc__0069__AutoMsgFrom,[niko])+ret+sep+ret+s+ret+sep+ret;
s:=StringReplace(s,'|',ret,[rfReplaceAll]);  // break
logy(s,0);
end
else
begin
   if (copy(s,1,4)='ZATY')and (s[length(s)]='$') then
   begin
  
   s:=copy(s,5,length(s)-5);  //cut handsome !

   if s='_typing...' then begin
                          Caption:=niko+' ...';
                          exit;
                          end;

   Caption:=niko;
   logy(ret+FormatDateTime('[hh:mm] ',now)+copy(s,1,pos(ret,s)-1),1);
   p:=pos(ret,s);
   s:=copy(s,p+2,length(s)-p);
   s:=StringReplace(s,'$ZATY',ret,[rfReplaceAll]);  //debugg old version
   logy(s,0);
   flashwindow(handle, false);
   end;
end;

end;

//------------------------------------------------------------------------------
procedure T_FCHAT.FormClose(Sender: TObject; var Action: TCloseAction);
begin

c3chat.Active:=false;
Action:=caFree;
end;

//------------------------------------------------------------------------------
procedure T_FCHAT.FormActivate(Sender: TObject);
begin
Update;
end;

end.





../delphi71code/exosee-code-source/uf_chat-pas..