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.