Форум: "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