Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];

Вниз

Проблемка с 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 вся ветка

Форум: "KOL";
Текущий архив: 2008.11.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.006 c
15-1222240142
antonn
2008-09-24 11:09
2008.11.23
Добавление программы в исключение виндового фаервола


15-1222355428
БарЛог
2008-09-25 19:10
2008.11.23
Алгоритмы поиска частей лица


15-1222404395
Городской Шаман
2008-09-26 08:46
2008.11.23
Очень интересные выводы :)


6-1195512896
Dark Lord
2007-11-20 01:54
2008.11.23
Множество динамических WebBrowser ов в программе


2-1223878526
Zalumhan
2008-10-13 10:15
2008.11.23
ListView добавлять ячейки сверху





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский