Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

MessForm.pas

01.01.2007
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
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.