![]() |
Vista Balloon Tip
Hi
Ich wollte ganz gerne in meinem Programm Balloon Tips verwenden. Da ich mit dem JvTrayIcon arbeite würde das ja ganz einfach z.B. über den Aufruf von
Delphi-Quellcode:
gehen.
jvtrayicon1.BalloonHint('titel', 'text', btinfo, 5000, true);
Das würde dann den Standard Balloon anzeigen. Ich will aber lieber den Ballon im Vista Design. Nach einigem Suchen in den Delphi Foren bin ich dann auf folgenden Link gestoßen: ![]() Das ist genau das was ich brauche. Allerdings ist das Beispiel in C geschrieben und ich kann kein C. Bevor ich mich da anmelde und mir das mal anschaue, wollte ich deshlab erstmal hier nachfragen. Also weiß Jemand wie ich diesen Vista Balloon realisieren kann? Danke schonmal Gruß |
Re: Vista Balloon Tip
Hallo delphin06,
ich verstehe Deine Frage nicht ganz. Du sprichts von Balloonhints, aber der Link zeigt ein Tooltip. Das sind doch zwei unterschiedliche Dinge. Was genau suchst Du, das BalloonHint für das TrayIcon der TNA ist afaik bei TTrayIcon automatisch im Vista Stil. Die Tooltips sicher nicht, hier gibt es immernoch keinen Ansatz von Codegear. Hierzu habe ich vor langer Zeit mal ein QC Ticket eröffnet, steht aber noch auf Open. Mal sehen ob Tiburón hier was neues bringt. Das Problem ist hier, daß alle HintWindow nicht die Tooltips Class von Win verwenden, sondern ein eigenes borderless Window in der Forms.pas der VCL definiert wird. Möglich ist ein override mittels HintWindowClass. Gruß Assertor |
Re: Vista Balloon Tip
Liste der Anhänge anzeigen (Anzahl: 2)
Also ich mein schon das was da gezeigt wird. Ich habe gedacht das wäre ein balloon tip.
Ich hab mich jetzt mal da angemeldet und mir den code angeschaut. Allerdings versteh ich den nicht so ganz. Wie gesagt ich kann kein C. Ich habe mal die Sachen in den Anhang gepackt. vieleicht kann den code ja jemand für Delphi übersetzen. |
Re: Vista Balloon Tip
Kann mir denn keiner weiter helfen? Schade..
|
Re: Vista Balloon Tip
So etwas sollte es in Delphi geben. Zumindest benutzt ImgBurn solche Tooltips und das ist wohl in Delphi geschrieben.
Achso vielleicht: ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Re: Vista Balloon Tip
Danke dir..allerdings sind die ersten Links schonmal nicht das was ich suche. diese zeigen nur die normalen Balloon Hints an. Aber die wollte ich ja gar nich (die funktionieren bei mir auch) Ich wollte diese Vista Hints haben die mehr so eckig sind und nicht so abgerundet
Aber ich guck mir die anderen mal genauer an und wenn der Richtige dabei ist, dann sag ich bescheid |
Re: Vista Balloon Tip
Liste der Anhänge anzeigen (Anzahl: 1)
Die Vista Hints bekommst Du unter Vista, unter XP sind es eben nur die XP Hints. Zumindest habe ich bei der Demo auch nur die abgerundeten.
|
Re: Vista Balloon Tip
Liste der Anhänge anzeigen (Anzahl: 2)
nee bei Vista gibt es die abgerundeten auch noch!
Aber es gibt auch diese neuen Hints. Im Anhang hab ich mal screenshots. Wenn ich einmal auf Test klicke bekomme ich den runden Balloon und wenn ich auf OK klicke bekomme ich den Vista Balloon den ich auch haben will :) Ich weiß nich vieleicht kann da jemand was rausfinden aus dem code. is ja in C geschrieben. |
Re: Vista Balloon Tip
Bei mir sehen beide gleich aus.
In dem Artikel steht, dass die Common Controls Version 6 benötigt werden. Bei mir ist eine 5er comctl32.dll unter Windows\System32 zu finden. Mehrere 6er Versionen finden sich in den Verzeichnissen vom Windows Update. Ist wohl der Grund, weshalb der Vista Hint nicht funktioniert. ![]() Dann müssen sicher noch die Parameter für CreateWindowEx angepasst werden. |
Re: Vista Balloon Tip
Jo unter Windows XP SP2 sehen bei mir auch beide gleich aus. Ich hab mir mal den c-code genauer angeschaut aber irgendwie werde ich daraus nich schlau...Ich bin schon kurz davor das einfach sein zu lassen...Dann nimm ich halt die normalen Ballons
|
Re: Vista Balloon Tip
Schau doch mal
![]() |
Re: Vista Balloon Tip
Moin,
Ich bin völlig unerfahren wenn es um C++ geht, aber ich denke mir ist da etwas aufgefallen: Das Beispielprogramm ist in der Lage beide Hints aufzurufen (entweder mit OK, oder mit Test), jedoch führen, soweit ich den Code verstehe, beide zu einem nahezu identischen Aufruf:
Code:
// Soweit ich das verstanden habe, ist das hier der OK-Btn-Code (TTestDlg.cpp, Line 36)
CBalloonMsg::ShowForCtrl( IDS_ERR_TITLE, IDS_ERR_BODY, &m_ctrlEdit, (HICON) 2 );
Code:
Egal ob eine gesonderte Klasse oder was-auch-immer dahinter steht und den Aufruf verarbeitet, woher soll das Ding wissen, welchen Hint es aufrufen soll?
// Und das hier der Test-Btn-Code (TTestDlg.cpp, Line 106)
CBalloonMsg::ShowForCtrl( _T("Test Title"), _T("Test Text"), &m_ctrlEdit, (HICON) 1 ); Ich bin zugegeben etwas verwirrt. Grüße, Max |
Re: Vista Balloon Tip
Imho wird das durch den letzten Parameter bestimmt:
(HICON) 2 bzw. (HICON) 1 |
Re: Vista Balloon Tip
Moin,
Das glaube ich nicht. Zumindest kann ich keine Unterscheidung zwischen den Icons im Code erkennen. Außerdem könnte man scheinbar auch direkt ein Handle übergeben:
Code:
Grüße,
void CBalloonMsg::Show( LPCTSTR lpszHdr, LPCTSTR lpszBody, LPPOINT pPt /*= NULL*/, HICON hIcon /*= NULL*/ )
// hIcon can be actual icon handle or when running on XP SP2 or better // the following special UINT values may be used: // 1 : Info icon. // 2 : Warning icon // 3 : Error Icon Max |
Re: Vista Balloon Tip
Also im ersten der beiden von Dir geposteten Codes steht "(HICON) 2" und im zweiten "(HICON) 1".
Ich sehe da schon einen Unterschied, beim ersten ist es ein Info-Icon, beim zweiten ein Warnung-Icon. Stimmt ja auch mit den Bildern überein. |
Re: Vista Balloon Tip
Moin,
Ja, klar. Aber: Die Erscheinungsform des Balloonhints (nämlich entweder "eckig" oder "normal") kann ja nicht an dem Icon festgemacht sein, oder? Grüße, Max |
Re: Vista Balloon Tip
Sorry, dann hab ich Dich falsch verstanden. Ich dachte Du redest vom Icon und nicht von der Form des Hints. :oops:
|
Re: Vista Balloon Tip
Das muss doch schon fast abhängig von den icons sein...was ich allerdings komisch finde. Also das Control is immer das Edit Feld. und ansonsten is der Text nur unterschiedlich (Aber daran kann es nun wirklich nicht liegen)
Man müsste die icons mal wechseln... |
Re: Vista Balloon Tip
Moin,
Ich würde das ja probieren, aber die MFC fehlt im Visual C++ Express 2008. Aber daran kann es einfach nicht liegen. Wenn doch, dann gebe ich eine Bar-Runde auf der USS-Delphi-PRAXiS. Grüße, Max Edit: Ich habe es auch in Delphi probiert. Das Icon macht dort zumindest keinen Unterschied. Ebenso wenig, wie die Stringlänge und die Anzahl der Zeilenumbrüche im Text (naja, hätt' ja sein können :mrgreen: ) |
Re: Vista Balloon Tip
Wie würde das denn aussehen in delphi code?
|
Re: Vista Balloon Tip
Moin,
So (aber das wussten wir ja schon ;) Dieser Code erzeugt leider nur das normale Balloon-Window):
Delphi-Quellcode:
Aufruf:
procedure ShowBalloonTip(Control: TWinControl; Icon: integer; Title: pchar;
Text: PWideChar); const TOOLTIPS_CLASS = 'tooltips_class32'; TTS_ALWAYSTIP = $01; TTS_NOPREFIX = $02; TTS_BALLOON = $40; TTF_SUBCLASS = $0010; TTF_TRANSPARENT = $0100; TTF_CENTERTIP = $0002; TTM_ADDTOOL = $0400 + 50; TTM_SETTITLE = (WM_USER + 32); ICC_WIN95_CLASSES = $000000FF; type TOOLINFO = packed record cbSize: Integer; uFlags: Integer; hwnd: THandle; uId: Integer; rect: TRect; hinst: THandle; lpszText: PWideChar; lParam: Integer; end; var hWndTip: THandle; ti: TOOLINFO; hWnd: THandle; begin hWnd := Control.Handle; hWndTip := CreateWindow(TOOLTIPS_CLASS, nil, WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP, 0, 0, 0, 0, hWnd, 0, HInstance, nil); if hWndTip <> 0 then begin SetWindowPos(hWndTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); ti.cbSize := SizeOf(ti); ti.uFlags := TTF_CENTERTIP or TTF_TRANSPARENT or TTF_SUBCLASS; ti.hwnd := hWnd; ti.lpszText := Text; Windows.GetClientRect(hWnd, ti.rect); SendMessage(hWndTip, TTM_ADDTOOL, 1, Integer(@ti)); SendMessage(hWndTip, TTM_SETTITLE, Icon mod 4, Integer(Title)); end; end;
Delphi-Quellcode:
Grüße,
ShowBalloonTip(Button1, 2, 'Empty Value!',
'Please enter something, ANYTHING(!)' +sLineBreak + 'in the edit box!'); Max |
Re: Vista Balloon Tip
Ach so meintest du das...ich dachte jez du hättest teile vom c++ code ind delphi umgeschrieben
|
Re: Vista Balloon Tip
Ich hab nochmal ein bisschen gegoogled und folgendes gefunden:
![]() So wie es aussieht entscheidet Vista welcher Balloon Style verwendet wird. Zitat:
Man müsste jetzt wissen, nach welchen Kriterien Vista da vorgeht um jeweils den einen oder den anderen Style zu verwenden... |
Re: Vista Balloon Tip
Hab grad was gefunden, was dir helfen kann: TTM_SETWINDOWTHEME hab ich in der CommCtrl.h gefunden
MS VisualStudio 05 - Hilfe TTM_SETWINDOWTHEME Message -------------------------------------------------------------------------------- Sets the visual style of a ToolTip control. Syntax To send this message, call the SendMessage function as follows. lResult = SendMessage( // returns nothing in lResult (HWND) hWndControl, // handle to destination control (UINT) TTM_SETWINDOWTHEME, // message ID (WPARAM) wParam, // = 0; not used, must be zero (LPARAM) lParam // = (LPARAM) (LPWSTR) pwStr; ); Parameters wParam Must be zero. pwStr Pointer to a Unicode string that contains the ToolTip visual style to set. Return Value The return value is not used. Remarks Note To use this API, you must provide a manifest specifying Comclt32.dll version 6.0. For more information on manifests, see Using Windows XP Visual Styles. Message Information Header commctrl.h Minimum operating systems Windows XP -------------------------------------------------------------------------------- © 2005 Microsoft Corporation. All rights reserved. Quelle: ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/commctls/tooltip/messages/ttm_setwindowtheme.htm |
Re: Vista Balloon Tip
Ich komm da nich wirklich weiter und vergeude viel zu viel zeit damit...also wenn keiner eine Lösung hat dann lass ichs und nimm die normalen Balloon Tips...
Gruß |
Re: Vista Balloon Tip
Der Beitrag hinter dem LInk
Zitat:
![]() |
Re: Vista Balloon Tip
Wieso macht ihr euch so viel Arbeit?
Nutze doch einfach eine eigene Form welche unten rechts in der Ecke angezeigt wird. Die meisten Entwickler machen das. Erstens kannst du dann deine Inhalte (was und wie sie angezeigt werden) selbst gestalten und kannst dir auch sicher sein, dass es auch angezeigt wird. Die meisten Nutzer haben, entweder selbst oder über ein Tuning-Tool, die Balloons abgeschaltet. Andreas |
Re: Vista Balloon Tip
Liste der Anhänge anzeigen (Anzahl: 1)
Vielleicht macht es Spass?
|
Re: Vista Balloon Tip
Zitat:
Solche Geschichten wie dieses Tooltip hier sind einfach tolle, kleine Herausforderungen, denen man, ohne Termindruck oder etc. nachgehen kann. Es macht einfach Spaß ;) Edit: Ich hab's! Ich hätte es auch schon viel länger haben können, hätte ich mich nicht vom C++ Beispiel durcheinanderbringen lassen... Ich baue das eben noch in handliche Funktionen um.. |
Re: Vista Balloon Tip
Moin,
So, ich denke das war's. Hier ist nochmal eine etwas verbesserte Version meines vorherigen Tooltip-Codes (etwas erweitert) und dann des Rätsels Lösung - die fixierte Balloontip Box. Da diese Box fixiert ist, wird ein Handle zurückgegeben, mit welchem man mit der Hide-Procedure selbiges wieder unsichtbar machen kann (denn es gibt nur 2 Wege: Entweder ein Klick auf einen etwaigen Close-Button, oder die Hide-Procedure).
Delphi-Quellcode:
Ich ärgere mich, denn das war genau mein letzter Gedanke, bevor ich mich dem C++ Code zugewandt hatte, welcher durch seine scheinbar identische Aufrufsprozeduren meine Theorie verworfen hatte.
type
TTOOLINFO = packed record cbSize: Integer; uFlags: Integer; hwnd: THandle; uId: Integer; rect: TRect; hinst: THandle; lpszText: PWideChar; lParam: Integer; end; const TOOLTIPS_CLASS = 'tooltips_class32'; TTS_ALWAYSTIP = $01; TTS_NOPREFIX = $02; TTS_BALLOON = $40; TTS_CLOSE = $80; TTF_SUBCLASS = $0010; TTF_TRANSPARENT = $0100; TTF_CENTERTIP = $0002; TTM_ADDTOOL = $0400 + 50; TTM_SETTITLE = (WM_USER + 32); ICC_WIN95_CLASSES = $000000FF; function ShowBalloonTipFixed(AControl: TWinControl; AIcon: Integer; ATitle: string; AText: WideString; ACloseButton: Boolean; X: Integer; Y: Integer): THandle; var lToolInfo: TTOOLINFO; lParentHandle: THandle; lParameters: Cardinal; begin lParentHandle := AControl.Handle; lParameters := WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP; if ACloseButton then begin lParameters := lParameters or TTS_CLOSE; end; Result := CreateWindow(TOOLTIPS_CLASS, nil, lParameters, 0, 0, 0, 0, lParentHandle, 0, HInstance, nil); if Result <> 0 then begin SetWindowPos(Result, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); lToolInfo.cbSize := SizeOf(lToolInfo); lToolInfo.uFlags := TTF_TRANSPARENT or TTF_SUBCLASS or TTF_TRACK; lToolInfo.hwnd := lParentHandle; lToolInfo.lpszText := PWideChar(AText); Windows.GetClientRect(lParentHandle, lToolInfo.rect); SendMessage(Result, TTM_ADDTOOL, 1, Integer(@lToolInfo)); SendMessage(Result, TTM_SETTITLE, AIcon mod 4, Integer(PChar(ATitle))); SendMessage(Result, TTM_TRACKPOSITION, 0, MakeLong(X, Y)); SendMessage(Result, TTM_TRACKACTIVATE, Ord(True), Integer(@lToolInfo)); end; end; function ShowBalloonTip(AControl: TWinControl; AIcon: Integer; ATitle: string; AText: WideString; ACloseButton: Boolean; ACenterTip: Boolean): THandle; var lToolInfo: TTOOLINFO; lParentHandle: THandle; lParameters: Cardinal; begin lParentHandle := AControl.Handle; lParameters := WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP; if ACloseButton then begin lParameters := lParameters or TTS_CLOSE; end; Result := CreateWindow(TOOLTIPS_CLASS, nil, lParameters, 0, 0, 0, 0, lParentHandle, 0, HInstance, nil); if Result <> 0 then begin SetWindowPos(Result, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); lToolInfo.cbSize := SizeOf(lToolInfo); lToolInfo.uFlags := TTF_TRANSPARENT or TTF_SUBCLASS; if ACenterTip then begin lToolInfo.uFlags := lToolInfo.uFlags or TTF_CENTERTIP; end; lToolInfo.hwnd := lParentHandle; lToolInfo.lpszText := PWideChar(AText); Windows.GetClientRect(lParentHandle, lToolInfo.rect); SendMessage(Result, TTM_ADDTOOL, 1, Integer(@lToolInfo)); SendMessage(Result, TTM_SETTITLE, AIcon mod 4, Integer(PChar(ATitle))); end; end; procedure HideBalloonTipFixed(AToolTip: THandle); begin SendMessage(AToolTip, TTM_TRACKACTIVATE, Ord(False), 0); end; Viel Spass damit & Grüße, Max Edit: Möglicherweise ist dieser Code ja was für die Code-Lib? Ich habe im Internet bis jetzt noch keine fixierte BalloonTip Funktion gefunden. Hmm, mal sehen. |
Re: Vista Balloon Tip
Durch Zufall is es mir so in die Hände gefallen. Ich habe die Jedi TrayIcon Komponente auf meiner Form weil das Programm eben nur im Tray angezeigt werden soll (oder fast nur).
Diese Komponente hat ja auch eine Balloon Tip funktion. Ich hatte mich schon damit abgefunden, dass ich die normalen Balloon Tips verwende. ich wollte dann den Text der angezeigt wird in 2 Zeilen haben und siehe da ... oh Wunder ... der Balloon Tips ist auf einmal im Vista Style! Unglaublich... Wenn ich den Text einzeilig mache, wird wieder der normale Balloon angezeigt..Also es funktioniert jetzt genau so wie ich wollte und alles ist super! Gruß |
Re: Vista Balloon Tip
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz