Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.23;
Скачать: CL | DM;

Вниз

Проблемка с BalloonHints   Найти похожие ветки 

 
Elec3C ©   (2007-10-31 20:37) [0]

Есть модуль ballonhint"a:

uses Windows, ShellApi, KOL;

type
NotifyIconData_50 = record
  cbSize: DWORD;
  Wnd: HWND;
  uID: UINT;
  uFlags: UINT;
  uCallbackMessage: UINT;
  hIcon: HICON;
  szTip: array[0..MAXCHAR] of AnsiChar;
  dwState: DWORD;
  dwStateMask: DWORD;
  szInfo: array[0..MAXBYTE] of AnsiChar;
  uTimeout: UINT;
  szInfoTitle: array[0..63] of AnsiChar;
  dwInfoFlags: DWORD;
end;

TBalloonTimeout = 10..30;
TBalloonIconType = (bitNone, bitInfo, bitWarning, bitError);

const
NIF_INFO = $00000010;

NIIF_NONE = $00000000;
NIIF_INFO = $00000001;
NIIF_WARNING = $00000002;
NIIF_ERROR = $00000003;

function BalloonTrayIcon(const Window: HWND; const IconID: Byte;
const Timeout: TBalloonTimeout; const BalloonText, BalloonTitle:
string; const BalloonIconType: TBalloonIconType): Boolean;

implementation

function BalloonTrayIcon(const Window: HWND; const IconID: Byte;
const Timeout: TBalloonTimeout; const BalloonText, BalloonTitle:
string; const BalloonIconType: TBalloonIconType): Boolean;

const
aBalloonIconTypes: array[TBalloonIconType] of
  Byte = (NIIF_NONE, NIIF_INFO, NIIF_WARNING, NIIF_ERROR);

var
NID_50: NotifyIconData_50;

begin
FillChar(NID_50, SizeOf(NotifyIconData_50), 0);
with NID_50 do begin
  cbSize := SizeOf(NotifyIconData_50);
  Wnd := Window;
  uID := IconID;
  uFlags := NIF_INFO;
  StrPCopy(szInfo, BalloonText);
  uTimeout := Timeout * 1000;
  StrPCopy(szInfoTitle, BalloonTitle);
  dwInfoFlags := aBalloonIconTypes[BalloonIconType];
end;

Result := Shell_NotifyIcon(NIM_MODIFY, @NID_50);
end;

На форме есть стандартный TrayIcon(TKolTrayIcon).
Вызываю ballonhint функцией BalloonTrayIcon(TrayIcon1.Wnd, 1, 10, "text", "title", bitWarning); - баллон не хочет появлятся. Подскажите, в чём ошибка?

P.S. BAPTayIcon не предлагать.


 
mdw ©   (2007-10-31 21:24) [1]


> P.S. BAPTayIcon не предлагать.

А почему?


 
Elec3C ©   (2007-11-01 00:25) [2]


> А почему?

Все возможности его мне не надо.

А в чём ошибка то?


 
Compiler ©   (2007-11-01 01:01) [3]

А если так

type
DUMMYUNIONNAME = record
  case Integer of
    0: (
      uTimeout: UINT);
    1: (
      uVersion: UINT);
end;
NotifyIconData_50 = record
  cbSize: DWORD;
  Wnd: HWND;
  uID: UINT;
  uFlags: UINT;
  uCallbackMessage: UINT;
  hIcon: HICON;
  szTip: array [0..MAXCHAR] of AnsiChar;
  dwState: DWORD;
  dwStateMask: DWORD;
  szInfo: array [0..MAXBYTE] of AnsiChar;
  UNIONNAME: DUMMYUNIONNAME;
  szInfoTitle:  array [0..63] of AnsiChar;
  dwInfoFlags: DWORD;
end;

function ShowBalloonHint(const Handle, uID: DWORD; const Hint, Title: String; const Style, TimeOut: Byte): Boolean;
const
 NOTIFYICONDATA_V2_SIZE = $1E8;
 NIF_INFO        = $00000010;
var
BalonNID: NotifyIconData_50;
begin
ZeroMemory(@BalonNID, NOTIFYICONDATA_V2_SIZE);
BalonNID.cbSize := NOTIFYICONDATA_V2_SIZE;
BalonNID.Wnd := Handle;
BalonNID.uID := uID;
StrPCopy(BalonNID.szInfo, Hint);
StrPCopy(BalonNID.szInfoTitle, Title);
BalonNID.UNIONNAME.uTimeout := TimeOut * 1000;
BalonNID.dwInfoFlags := Style;
BalonNID.uFlags := NIF_INFO;
Result := Shell_NotifyIcon(NIM_MODIFY, @BalonNID);
end;

procedure TForm1.Button1Click(Sender: PObj);
begin
ShowBalloonHint(form.handle,DWORD(TrayIcon1),"Текст","Заголовок",2,7);
end;


 
Elec3C ©   (2007-11-01 15:11) [4]


> А если так

Работает. Спасибо.


 
Elec3C ©   (2007-11-18 02:33) [5]

Время "продолжительности" показа BalloonHint"а не изменяется(менял с 7 на 10, 15). Как было по умолчанию(вроде бы 3 сек), так и осталось. В чём ошибка?


 
Elec3C ©   (2007-11-19 18:59) [6]

^


 
Elec3C ©   (2007-11-20 16:47) [7]

^


 
Elec3C ©   (2007-11-22 15:16) [8]

^


 
Compiler ©   (2007-11-22 19:42) [9]

Да глюк какой-то в этом есть. Я делал по тайиеру

function Times(Wnd:HWND;Msg,Wp,Lp:Integer):bool; stdcall;
begin
result:=false;
if msg=WM_TIMER then
begin
KillTimer(Wnd,1000);
ShowBalloonHint("","",0,0);
end;
end;

SetTimer(Handle,1000,TimeOut *1000,@Times);


 
Elec3C ©   (2007-11-23 16:01) [10]


> Compiler ©

Хм?! Не совсем въехал, как юзать. Можно поподробнее?


 
Compiler ©   (2007-11-23 22:39) [11]


> Хм?! Не совсем въехал

Можно. Я вот так

function TimerCallBack(wnd:HWND; msg,wp,lp:Longint):Longint; Stdcall;
begin
result:=0;
if (msg=WM_TIMER) and (wp=109) then
begin
KillTimer(wnd,wp);
ShowBalloonHint(wnd,"","",0,0);
end;
end;

//Показать BAllonToolTip
function ShowBalloonHint(Handle:HWND; const Hint, Title: String; const Style, TimeOut: Byte): Boolean;
var
BalonNID: _NOTIFYICONDATAA_V2;
begin
ZeroMemory(@BalonNID, NOTIFYICONDATA_V2_SIZE);
BalonNID.cbSize := NOTIFYICONDATA_V2_SIZE;
BalonNID.Wnd := DWORD(Handle);
BalonNID.uID := DWORD(Tray);
StrPCopy(BalonNID.szInfo, Hint);
StrPCopy(BalonNID.szInfoTitle, Title);
BalonNID.dwInfoFlags := Style;
BalonNID.uFlags := NIF_INFO;
if (Hint<>"") and (Title<>"") and (TimeOut>0) then
SetTimer(Handle,109,TimeOut *1000,@TimerCallBack);
Result := Shell_NotifyIcon(NIM_MODIFY, @BalonNID);
end;


109 - ID Таймера
TimeOut-1..
Tray - PTrayIcon


 
Elec3C ©   (2007-11-24 00:38) [12]

Всё равно не выходит:((


 
Compiler ©   (2007-11-24 12:10) [13]

При интервале более 1 минуты Hint падает где-то после 70 сек, а до минуты все работает. С добавлением BalonNID.UNIONNAME.uTimeout := TimeOut * 1000;


 
Elec3C ©   (2007-11-24 14:09) [14]

Значит, я пишу следующее:

...

type
 DUMMYUNIONNAME = record
   case Integer of
     0 : (uTimeout : UINT);
     1 : (uVersion : UINT);
 end;

 _NOTIFYICONDATAA_V2 = record
   cbSize           : DWORD;
   Wnd              : HWND;
   uID              : UINT;
   uFlags           : UINT;
   uCallbackMessage : UINT;
   hIcon            : HICON;
   szTip            : array [0..MAXCHAR] of AnsiChar;
   dwState          : DWORD;
   dwStateMask      : DWORD;
   szInfo           : array [0..MAXBYTE] of AnsiChar;
   UNIONNAME        : DUMMYUNIONNAME;
   szInfoTitle      : array [0..63] of AnsiChar;
   dwInfoFlags      : DWORD;
 end;

...

implementation

function ShowBalloonHint(Handle:HWND; const Hint, Title: String; const Style, TimeOut: Byte): Boolean; forward;

function TimerCallBack(wnd:HWND; msg,wp,lp:Longint): Longint; Stdcall;
begin
result:=0;
if (msg=WM_TIMER) and (wp=109) then
begin
KillTimer(wnd,wp);
ShowBalloonHint(wnd,"","",0,0);
end;
end;

function ShowBalloonHint(Handle:HWND; const Hint, Title: String; const Style, TimeOut: Byte): Boolean;
const
 NOTIFYICONDATA_V2_SIZE = $1E8;
 NIF_INFO        = $00000010;
var
BalonNID: _NOTIFYICONDATAA_V2;
begin
ZeroMemory(@BalonNID, NOTIFYICONDATA_V2_SIZE);
BalonNID.cbSize := NOTIFYICONDATA_V2_SIZE);
BalonNID.Wnd := DWORD(Handle);
BalonNID.uID := DWORD(Form1.TrayPP);
StrPCopy(BalonNID.szInfo, Hint);
StrPCopy(BalonNID.szInfoTitle, Title);
BalonNID.dwInfoFlags := Style;
BalonNID.uFlags := NIF_INFO;
BalonNID.UNIONNAME.uTimeout := TimeOut * 1000;
if (Hint<>"") and (Title<>"") and (TimeOut>0) then
SetTimer(Handle,109,TimeOut *1000,@TimerCallBack);
Result := Shell_NotifyIcon(NIM_MODIFY, @BalonNID);
end;

...

// Вызываю балонхинт
ShowBalloonHint(Form.Handle, "Текст", "Заголовок", 4, 10);

Всё равно, ничего не выходит. Может я не так что-то пишу?


 
Compiler ©   (2007-11-24 16:43) [15]


> Elec3C ©   (24.11.07 14:09) [14]

У меня работает как надо, ровно 10 сек потом по таймеру скрывается.
> P.S. BAPTayIcon не предлагать.

А он работает или нет.


 
Elec3C ©   (2007-11-24 19:23) [16]


> Compiler ©

Если можешь, пришли на ящик исходник программки с балонхинтом.


> А он работает или нет.

Я запускал тестовый exe"шник - у меня не пашет(ось Vista) нет!


 
Compiler ©   (2007-11-24 20:42) [17]

У меня ХР SP2/
А может дело в настройках Винды. Знаю, в реестре есть параметр, который отвечает за показ этих самых Balloon"ов. Если его изменить, то Balloon"ов не видно.  Может там и параметр продолжительности показа есть. Этого неведаю.

P.S. Проверь почту


 
Elec3C ©   (2007-11-25 01:45) [18]

Спасибо за исходник с exe"шником, но ничего не выходит. Может глюк висты или под неё нужно по-другому писать - чёрт его знает. Ладно пускай остаётся время по умолчанию.



Страницы: 1 вся ветка

Текущий архив: 2008.11.23;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.015 c
15-1222328712
nick
2008-09-25 11:45
2008.11.23
нужна помощь


2-1223642970
Gurd
2008-10-10 16:49
2008.11.23
Присвоить событию компонента функцию


2-1223621197
Grant
2008-10-10 10:46
2008.11.23
Соединение с удаленной базой данных


1-1202506594
Ukrainec
2008-02-09 00:36
2008.11.23
Как изменить цвет item a в TCheckListBox?


3-1210235833
DelphiN!
2008-05-08 12:37
2008.11.23
Динамическое создание столбцов процедурой на FireBird