Доброго времени суток уважаемые форумчане.
Сразу к делу...
Есть DbGrid в котором имеется список значений (список значений появляется за счет sql запроса в БД) и нужно чтобы программа выводила уведомление в трее если в этот список добавляется запись.
P.s. Список обновляется каждые 10сек. при помощи таймера, т.е. запрос в БД идет каждые 10 сек.
Вот собственно "говнокод"))
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CoolTrayIcon, TextTrayIcon, DB, Grids, DBGrids, ADODB,
ExtCtrls, Menus, XPMan, sSkinProvider, sSkinManager, acDBGrid;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
Timer1: TTimer;
CoolTrayIcon1: TCoolTrayIcon;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
ADOQuery1discussion_value: TStringField;
ADOQuery1create_date: TDateField;
ADOQuery1create_user: TStringField;
ADOQuery1task_code: TStringField;
ADOQuery1task_name: TStringField;
ADOQuery1proj_short_name: TStringField;
ADOQuery1wbs_name: TStringField;
ADOQuery1name: TStringField;
Timer2: TTimer;
sSkinManager1: TsSkinManager;
sSkinProvider1: TsSkinProvider;
DBGrid1: TsDBGrid;
procedure SQL(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure CoolTrayIcon1DblClick(Sender: TObject);
procedure KOL(Sender: TObject);
private
procedure MouseWheelHandler(var Message: TMessage);
override;
{ Private declarations }
public
disc_q:integer;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//Прокрутка колесиком списка
procedure TForm1.MouseWheelHandler(var Message: TMessage);
var
p:TPoint;
begin
GetCursorPos(p);
If WindowFromPoint(p)=DBGrid1.Handle then
begin
If Message.WParam<0
then
DBGrid1.Perform(WM_VSCROLL, SB_LINEDOWN, 0)
else
DBGrid1.Perform(WM_VSCROLL, SB_LINEUP, 0);
end;
end;
//SQL запрос при созданий формы
procedure TForm1.FormCreate(Sender: TObject);
begin
ADOQuery1.SQL.Text:='SELECT d.discussion_value,d.create_date,d.create_user,t.task_code,'+
' t.task_name,p.proj_short_name,w.wbs_name,p1.name' +
' FROM DISCUSSION d,task t, PROJWBS w, PROJECT p, PROJECTX p1 '+
'WHERE d.task_id=t.task_id '+
' AND t.proj_id=p.proj_id ' +
' AND t.wbs_id=w.wbs_id ' +
' AND t.proj_id=p1.proj_id order by d.create_date desc; ' ;
ADOQuery1.Active:= true;
end;
//SQL запрос в БД
procedure TForm1.SQL(Sender: TObject);
begin
ADOQuery1.SQL.Text:='SELECT d.discussion_value,d.create_date,d.create_user,t.task_code,'+
' t.task_name,p.proj_short_name,w.wbs_name,p1.name' +
' FROM DISCUSSION d,task t, PROJWBS w, PROJECT p, PROJECTX p1 '+
'WHERE d.task_id=t.task_id '+
' AND t.proj_id=p.proj_id ' +
' AND t.wbs_id=w.wbs_id ' +
' AND t.proj_id=p1.proj_id order by d.create_date desc; ' ;
ADOQuery1.Active:= true;
end;
procedure TForm1.KOL(Sender: TObject);
var kolvo:integer;
begin
disc_q:=ADOQuery1.RecordCount;
kolvo:=ADOQuery1.RecordCount ; //119
if kolvo=disc_q then
CoolTrayIcon1.ShowBalloonHint('NewsTape', 'Новое сообщение', bitWarning, 11);
// ShowMessage ('kolvo='+IntToStr(kolvo));
// ShowMessage('disc_q='+IntToStr(disc_q));
end;
//Разворачивание с трея
procedure TForm1.N2Click(Sender: TObject);
begin
CoolTrayIcon1.ShowMainForm;
end;
//Выход
procedure TForm1.N1Click(Sender: TObject);
begin
halt;
end;
//Сворачивание в трей вместо выхода
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := false;
Application.Minimize;
end;
//Разворачивание при двойном клике
procedure TForm1.CoolTrayIcon1DblClick(Sender: TObject);
begin
CoolTrayIcon1.ShowMainForm;
end;
end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор