|
[ maximus_1 @ 19.05.2006. 20:19 ] @
| Trebao bih napraviti ballon tip za svoju aplikaciju. Imam sljedeću funkciju:
Code: void TfrmMain::ToolTip(HWND hWnd, wchar_t* wcText, TColor clBackCol, TColor clTextCol)
{
HWND hWndToolTip;
TOOLINFOW ti;
hWndToolTip = CreateWindow( TOOLTIPS_CLASS,
NULL,
WS_POPUP | TTS_NOPREFIX | 0x40 |
TTS_ALWAYSTIP,
0, 0, 0, 0,
hWnd,
0,
HInstance,
NULL );
if( hWndToolTip != 0 )
{
SetWindowPos( hWndToolTip,
HWND_TOPMOST,
0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE );
memset(&ti,0,sizeof(ti));
ti.cbSize = sizeof(ti);
ti.uFlags = Flags;
ti.hwnd = hWnd;
ti.lpszText = wcText;
ti.rect = frmMain->GetClientRect();
SendMessage( hWndToolTip, TTM_ADDTOOLW, 0, (LPARAM)&ti );
}
}
I jednostavno na FormCreate događaju postavim sljedeći kod:
Code: Flags = TTF_TRANSPARENT | TTF_SUBCLASS;
ToolTip(Button1->Handle , L"Pozdrav", clWhite, clBlack );
i imam ballon tip koji se pojavljuje kad pređem mišem preko dugmeta.
Ono što mene zanima kako napraviti da ja kažem aplikaciji kada će se pojaviti Balloon Tip i na kojem mjestu. Recimo nešto kao kad vam kaže da nemate slobodnog mjesta na Hard Disku pa se pojavi Ballon Tip. |
[ maximus_1 @ 23.05.2006. 18:43 ] @
Zar nitko ne zna. Ne mora biti po ovom kodu samo neka radi.
Da pojednostavim : Kako napraviti dnevni savjetnik -> svaki put kada se pokrene program, pokaže savjet dana.
[ X Files @ 23.05.2006. 18:57 ] @
Mislis onaj balon u tray-u ?
[ sucur @ 23.05.2006. 22:21 ] @
E da se i ja ubacim, da ne otvaram novu temu, takodje problem je sa baloon-om u trayu, dakle cim njega deklarsem sa NOTIFYICONDATA, prijavi mi gresku, kao da on nije clan NOTIFYICONDATA strukture, dok ostalim clanovima se pristupa uredno. U MSDN pise da se kao include koristi "shellapi.h" i njega ukljucim.
Dakle sta je problem ?
[ kiklop74 @ 23.05.2006. 22:30 ] @
Stavi sledece define pre includa windows.h i shellapi.h
#define _WIN32_IE 0x0600
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <shellapi.h>
[ maximus_1 @ 24.05.2006. 12:15 ] @
Citat: X Files: Mislis onaj balon u tray-u ?
Da upravo to. Trebam ga samo pozvati pomoću neke funkcije.
[ X Files @ 24.05.2006. 14:50 ] @
Da bi imao Ballon u Tray-u, pre svega ti je potrebna manipulacija Tray ikonom.
Svo to zajedno i upakovano (tray+balloon) imas ovde, sa sve source-om:
http://tinyurl.com/o2jub
(prouci malo thread)
Inace, BDS2006 vec ima tray sa ballon-ima, ali ovaj kod koji ces pronaci je
100% najbolji koji je ikad napravljen za BCB. Cak i moja malenkost ima udela
u kodu ;)
[ maximus_1 @ 24.05.2006. 19:58 ] @
Uti koliko koda. Čekaj, pa to je komponenta. Zar nema nešto jednostavnije? Obična funkcija ili tako nešto...
[ X Files @ 24.05.2006. 20:02 ] @
Sama problematika programa koji se minimizuje u tray nije bas trivijalna, jer se trebaju
predvideti razne situacije, kao na primer kada 'pukne' shell program OS-a (explorer.exe).
Taj kod jeste uradjen kao komponenta, ali ti je definitivno potreban ako zelis takav
program.
Prikazivanje balona jeste trivijalno, ali treba doci do tog stadijuma.
[ X Files @ 24.05.2006. 20:13 ] @
P.S.
Jesi li (is)probao onaj recnik sto mi je u potpisu? On ima taj Ballon 'Dnevni savetnik' ...
EDIT:
Evo ti na primer deo tog recnika, koji prikazuje dnevni savetnik pri startovanju programa
kada je u tray-u... pa probaj nesto da izvuces ...
Code:
void __fastcall TDiMainForm::FormActivate(TObject *Sender)
{
// ...
Invalidate();
Repaint();
// Secure that the code will be reached only once...
static bool HasPassedOnActivate = false;
// Has passed once...
if ( !HasPassedOnActivate )
{
// Mark not to enter any more...
HasPassedOnActivate = true;
// If the Tray or Autostart is selected...
if ( ( Tray == 1 ) || ( Autostart == 1 ) )
{
// Minimize the dictionary
Application->Minimize();
}
// TODO: ...
AlphaBlend = true;
AlphaBlendValue = 255;
// Prepare appropriate message if the code page 1250 is not set...
if ( IsCodePage1250() )
CODE_PAGE_MESSAGE = "";
else
CODE_PAGE_MESSAGE = X(IDS_SER_MAIN_CODEPAGE);
// If Tray is selected ...
if ( Tray == 1 )
{
// Set the flag to tell if the Tray icon is present... TODO: let it be a part of tray ocon code
IsIconPresent = true;
// Add icon to tray
AddIconToTray();
// Read INI Params and Arguments... TODO: Why?
ReadIniParamsAndArguments();
// If NOT the first time (all ini etries are present) the app is opened...
// If the codepage WARNING is present...
// If NOT called from IE context menu ...
if ( !IsFirstTime() && ( CODE_PAGE_MESSAGE != "" ) && ( Prms == 0 ) )
{
NOTIFYICONDATA IconData;
IconData.cbSize = sizeof( NOTIFYICONDATA );
IconData.uID = IDC_SER_BALLOON_DISMALL;
IconData.hWnd = Handle;
IconData.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
IconData.uCallbackMessage = WM_TRAYNOTIFY;
// ???
IconData.hIcon = TrayIcon->Handle;
// Caption: Tip in the tray when selected with mouse...
lstrcpy( IconData.szTip, X(IDS_SER_MAIN_APPLICATION_TITLE).c_str() );
// Warining
IconData.dwInfoFlags = NIIF_WARNING;
// Caption: Tip of the day...
AnsiString Caption = X(IDS_SER_MAIN_HELPTIPOFTHEDAY);
// Body: Code page warning message...
AnsiString Body = X(IDS_SER_MAIN_CODEPAGE);
// ...
IconData.uFlags = NIF_INFO;
IconData.uTimeout = 15000;
StrLCopy( IconData.szInfo, Body.c_str(), 511 );
StrLCopy( IconData.szInfoTitle, Caption.c_str(), 127 );
Shell_NotifyIcon( NIM_MODIFY, &IconData );
}
else if ( ( Tips ) && ( !IsFirstTime() ) && ( Prms == 0 ) )
{
NOTIFYICONDATA IconData;
IconData.cbSize = sizeof( NOTIFYICONDATA );
IconData.uID = IDC_SER_BALLOON_DISMALL;
IconData.hWnd = Handle;
IconData.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
IconData.uCallbackMessage = WM_TRAYNOTIFY;
// ...
IconData.hIcon = TrayIcon->Handle;
// Caption: Tip in the tray when selected with mouse...
lstrcpy( IconData.szTip, X(IDS_SER_MAIN_APPLICATION_TITLE).c_str() );
// Which tip to how...
long number = DayOfTheYear( Now() );
long position = 0;
long AFrom = IDS_SER_MAIN_TIPS_01;
long ATo = IDS_SER_MAIN_TIPS_35;
long module = ( ( ATo - AFrom ) / 2 ) + 1;
++position;
long to_show = ( number + position ) % module;
AnsiString Caption = X(IDS_SER_MAIN_HELPTIPOFTHEDAY);
AnsiString Body = X( to_show * 2 + AFrom );
IconData.dwInfoFlags = NIIF_INFO;
//IconData.dwInfoFlags = NIF_TIP;
IconData.uFlags = NIF_INFO;
IconData.uTimeout = 15000;
StrLCopy( IconData.szInfo, Body.c_str(), 511 );
StrLCopy( IconData.szInfoTitle, Caption.c_str(), 127 );
Shell_NotifyIcon( NIM_MODIFY, &IconData );
}
}
else
{
// Set the flag to tell if the Tray icon is present... TODO: let it be a part of tray ocon code
IsIconPresent = false;
}
// If called from IE, open it
if ( Prms > 0 )
{
// TODO: Wahy that way?
PostMessage( Handle, WM_HOOK_IE, 0, 0 );
}
}
}
[ maximus_1 @ 25.05.2006. 15:13 ] @
Stavim sljedeći dio koda ali se ništa ne događa:
Code: NOTIFYICONDATA IconData;
IconData.cbSize = sizeof( NOTIFYICONDATA );
IconData.uID = 0; //tu nemam blage šta treba ali traži integer
IconData.hWnd = Handle;
IconData.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
IconData.uCallbackMessage = 0;//WM_TRAYNOTIFY; ///kao i ovdje
IconData.hIcon = Tray->Handle;
// Caption: Tip in the tray when selected with mouse...
lstrcpy( IconData.szTip, "xxxxxxxxxxxxxxxx" );
IconData.dwInfoFlags = NIIF_WARNING;
// Caption: Tip of the day...
AnsiString Caption = "yyyyyyyyyyyyyyyy";
AnsiString Body = "ggggggg";
// ...
IconData.uFlags = NIF_INFO;
IconData.uTimeout = 15000;
StrLCopy( IconData.szInfo, Body.c_str(), 511 );
StrLCopy( IconData.szInfoTitle, Caption.c_str(), 127 );
Shell_NotifyIcon( NIM_MODIFY, &IconData );
Inače, isprobao sam di riječnik i tako sam i dobio ideju.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|