MessForm.pas

Previous  Top  Next

    
 

 

 

Code:

{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Author:       Alexander Vaga

EMail:        primary:   icq2000cc@hobi.ru

             secondary: alexander_vaga@hotmail.com

Web:          http://icq2000cc.hobi.ru

Creation:     May, 2002

Legal issues: Copyright (C) 2002 by Alexander Vaga

             Kyiv, Ukraine

 

             This software is provided 'as-is', without any express or

             implied warranty.  In no event will the author be held liable

             for any  damages arising from the use of this software.

 

             Permission is granted to anyone to use this software for any

             purpose, including commercial applications, and to alter it

             and redistribute it freely.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}

 

unit MessFrom;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics,

Controls, Forms, Dialogs,  StdCtrls,

ComCtrls, ToolWin, AppEvnts, ExtCtrls,

Types,Packet,Main,SendMess;

 

type

TMessageFrom = class(TForm)

   MsgMemo: TMemo;

   ApplicationEvents1: TApplicationEvents;

   Panel1: TPanel;

   NextButton: TButton;

   ReplyButton: TButton;

   CancelButton: TButton;

   Panel2: TPanel;

   ToolBar1: TToolBar;

   UINi: TToolButton;

   NNEd: TEdit;

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   ICQEd: TEdit;

   DateEd: TEdit;

   procedure CancelButtonClick(Sender: TObject);

   procedure ApplicationEvents1Message(var Msg: tagMSG;

     var Handled: Boolean);

   procedure SendTimerTimer(Sender: TObject);

   procedure FormClose(Sender: TObject; var Action: TCloseAction);

   procedure FormShow(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure NextButtonClick(Sender: TObject);

   procedure ReplyButtonClick(Sender: TObject);

   procedure MsgMemoEnter(Sender: TObject);

private

   { Private declarations }

public

   User : PListRecord;

   FromWhom : longint;

   Find : PMsgItem;

   { Public declarations }

end;

 

implementation

 

{$R *.DFM}

 

procedure TMessageFrom.CancelButtonClick(Sender: TObject);

begin

    Close;

end;

 

procedure TMessageFrom.ApplicationEvents1Message(var Msg: tagMSG;

var Handled: Boolean);

begin

    if Msg.message = msg_NextOFF then begin

      if (Msg.wParam = msg_NextOFF)and(Msg.lParam = User^.UIN) then begin

        Handled := true;

        NextButton.Enabled := false;

        NextButton.Caption := 'Next';

      end;

    end;

    if Msg.message = msg_NextON then begin

      if (Msg.lParam = User^.UIN) then begin

        Handled := true;

        NextButton.Enabled := true;

        NextButton.Caption := 'Next > ('+s(Msg.wParam)+')';

      end;

    end;

end;

 

procedure TMessageFrom.SendTimerTimer(Sender: TObject);

begin

    Close;

end;

 

procedure TMessageFrom.FormClose(Sender: TObject; var Action: TCloseAction);

begin

    if Find<>nil then begin

      FreeMem(Find^.Text,Find^.Len);

      Dispose(Find);

    end;

    Destroy;

end;

 

procedure TMessageFrom.FormShow(Sender: TObject);

var sTmp : string;

var node : TTReeNode;

    i,CntMsg : integer;

    Count : PMsgItem;

begin

    NextButton.Enabled := false;

    if User^.EXTRA.ICON_INDEX = simply_icq then

      UINi.ImageIndex := offline else

      UINi.ImageIndex := User^.EXTRA.ICON_INDEX;

 

    // Get First Msg

    if User^.PMSG = nil then exit;

    Find := User^.PMSG;

    if User^.PMSG^.Next=nil then User^.PMSG := nil

    else User^.PMSG := User^.PMSG^.Next;

 

    // Count ALL other messages

    CntMsg:=0;

    Count:=User^.PMSG;

    while Count<>nil do begin

      inc(CntMsg);

      if Count^.Next<>nil then

        Count:=Count^.Next

      else Count:=nil;

    end;

    //

    if CntMsg>0then PostMessage(Handle,msg_NextON,CntMsg,User^.UIN)

    else begin

      User^.EXTRA.MES_IS := false; //Blink OFF

      for i:=0 to Form1.CL.Items.Count-1 do begin

        node:=Form1.CL.Items.Item[i];

        if PListRecord(node.Data)^.UIN=User^.UIN  then begin

            node.ImageIndex := PListRecord(node.Data)^.EXTRA.ICON_INDEX;

            node.SelectedIndex := node.ImageIndex;

            PostMessage(Handle,msg_NextOFF,msg_NextOFF,User^.UIN);

        end;

      end;

    end;

 

    // Get & Put Data

    setlength(sTmp,Find^.Len);

    move(Find^.Text^,sTmp[1],Find^.Len);

    MsgMemo.Clear;

    MsgMemo.Color := StringToColor(Find^.BG);

    MsgMemo.Font.Color := StringToColor(Find^.FG);

    MsgMemo.Text := sTmp;

    ICQed.Text := s(Find^.FromUIN);

    DateED.Text := Find^.DateTime;

    NNed.Text := User^.NICK;

end;

 

procedure TMessageFrom.FormCreate(Sender: TObject);

begin

    Find := nil;

end;

 

procedure TMessageFrom.NextButtonClick(Sender: TObject);

begin

    FormShow(self);

end;

 

procedure TMessageFrom.ReplyButtonClick(Sender: TObject);

var TSM : TMessageTo;

   i : integer;

   s : string;

begin

    Application.CreateForm(TMessageTo,TSM);

    TSM.ICQEd.Text :=ICQEd.Text;

    TSM.NNEd.Text := NNEd.Text;

    TSM.User := User;

    TSM.FromWhom := UIN; // it is MY UIN

    TSM.Caption := 'Send Message To '+NNEd.Text;

 

    s:='';

    for i:=0 to MsgMemo.Lines.Count-1 do

      s:=s+'[>] '+MsgMemo.Lines[i]+#13#10;

    TSM.SendMemo.Text :='on '+DateED.Text+', You wrote:'#13#10+s;

    TSM.SendMemo.Selstart := Length (TSM.SendMemo.Text);

    TSM.Show;

    Close;

end;

 

procedure TMessageFrom.MsgMemoEnter(Sender: TObject);

begin

    ReplyButton.SetFocus;

end;

 

end.