Infofenster oder Sprechblasen
-
Hallo,
habe ein nettes Programm geschrieben und wollte zur Krönung noch etwas hinzufürgen. Jeder kennt dass, wenn man Wondows 2000 oder XP user ist. Geht man über ein Button oder Objekt einer Graphischen Oberflache wird (nicht immer) eine Gelbe Blase oder wie im Borland Developer Studio 2006 ein gelbes Infofenster geöffnet in dem gelegentlich auch sehr nützliche Informationen stehen können. Das Geleich wollte ich nun auch in meinem Programm einbinden.
Meine Fragen an euch sind:
1. Bietet das Developer Studio da schon etwas an?
2. Wenn ja, wo finde ich das oder unter was muss ich in der BCB-Hilfe suchen (habe es noch nicht gefunden)?
3. Wie binde ich es ein?Ich danke euch schon jetzt im voraus für negative und positive Posts.
Gruß :xmas1: :xmas2:
-
Ich denke das müsste vor Allem in WinAPI zu finden sein. Ich schieb dich mal entsprechend weiter.
-
Dieser Thread wurde von Moderator/in junix aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
IM BCB müsste für die Komponenten im ObjektInspektor die Eigenschaft Hint existieren. Zusätzlich muss noch die Eigenschaft ShowHint auf wahr gestellt werden.
Mit der WinAPI geht es mit der Fensterklasse TOOLTIPS_CLASS. Siehe dazu auch meine Win32-API Tutorials für Delphi: http://www.michael-puff.de/dirindex.php?folder=Developer/Delphi/Tutorials/Win32API_Tutorials/ Kapitel 3.3. Ist zwar für Delphi aber die APIs sind die selben.
-
Man könnte auch Komponenten dafür verwenden. z.Bsp. die LMD-Tools.
-
Ich denke er sucht vor Allemn nach dieser "baloon help" oder wie das auch immer genannt wird...?
-
Hey, erstmal danke für die tips von euch.
Das ist super. Problem ist mein StringGrid. Irgendwie verwenden das sehr viele, deshalb habe ich das auch genommen. Bei Buttons oder diversen anderen Elemnten kann ich die Hints nutzen. Leider ist das bei einzelnen Zellen des TStringGrids nicht so einfach. Daher wollte ich es bei Anklicken der Zelle ermöglich, dass hier ein Tip kommt.
-
erstmal die commoncontrols initialisieren, dann
HWND hwndBallonTip = CreateWindowEx( WS_EX_TOPMOST, TOOLTIPS_CLASS, _T(""), WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP | TTS_BALLOON, x, y, width, height, hParent, NULL, hInst, NULL );
Danach mit den Tooltip-Messages arbeiten
TStringGrid klingt mir nach Delphi ? Irgendwann hatte ich mal so ne Blubberblasenkompo dafür geschrieben; weis nur nimmer wo ich die hin hab
-
Delphi Lösung:
procedure TForm1.FormCreate(Sender: TObject); begin StringGrid1.ShowHint := True; StringGrid1.Cells[1,1] := '1'; StringGrid1.Cells[1,2] := '2'; end; procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Column, Row: Longint; s: String; begin StringGrid1.MouseToCell(X, Y, Column, Row); s := StringGrid1.Cells[Column, Row]; StringGrid1.Hint := s; end;Angezeigt wird der Inhalt der Zelle als Tooltip.
Sollte sich auch nach C++ für den BCB umsetzen lassen. Den BCB habe ich jetzt leider nicht hier.
-
Hab mal gebastelt:
Voila:
HWND CreateTooltip(HWND hWND, const PTCHAR pszDisplayText, bool fBalloonStyle, bool fMultiLine) { if(!IsWindow(hWND)) return (NULL); // ....Objekt spezifiziert die Kontroll-Klassen die über InitCommonControlsEx() registriert werden.... INITCOMMONCONTROLSEX INITccEX; HWND hWNDToTT; // <- Handle zum ToolTip(TT)-Wnd // ....Info-Struktur für den ToolTip.... TOOLINFO ti; RECT rcClient; // <- enthält die gesamte Fenstergröße // ....Common Controls registrieren.... INITccEX.dwICC = ICC_WIN95_CLASSES; INITccEX.dwSize = sizeof(INITCOMMONCONTROLSEX); if(!InitCommonControlsEx(&INITccEX)) return (NULL); DWORD dwStyle = WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP; if(fBalloonStyle) dwStyle |= TTS_BALLOON; // ....ToolTip erzeugen.... hWNDToTT = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, dwStyle, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWND, NULL, GetModuleHandle(NULL), NULL); // ....Handle überprüfen.... if(!IsWindow(hWNDToTT)) return (NULL); // ....Eigenschaften festlegen.... if(!SetWindowPos(hWNDToTT, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE)) return (NULL); // ....rcClient mit Client Area Größe initialisieren.... if(!GetClientRect(hWND, &rcClient)) return (NULL); // ....Elemente von ti initialisieren.... ti.cbSize = sizeof(TOOLINFO); ti.uFlags = TTF_SUBCLASS; ti.hwnd = hWND; ti.hinst = NULL; ti.uId = 0; ti.lpszText = (fMultiLine ? LPSTR_TEXTCALLBACK : pszDisplayText); // ....rect als Bereich (in dem man sich den TT anzeigen lassen kann) angeben.... ti.rect.left = rcClient.left; ti.rect.top = rcClient.top; ti.rect.right = rcClient.right; ti.rect.bottom = rcClient.bottom; // ....TTM_ADDTOOL an hWNDToTT senden.... if(!SendMessage(hWNDToTT, TTM_ADDTOOL, 0, reinterpret_cast<LPARAM>(&ti))) return (NULL); return (hWNDToTT); }Wenn Du im letzten Parameter (fMultiLine) true übergibst, musst Du zusätzlich einen Message-Handler für WM_NOTIFY in Deiner Wnd-Proc einfügen, der sieht so aus:
// ... case WM_NOTIFY: { // Zeiger auf Info-Strukur der Nachricht ermitteln: LPNMHDR pNmHdr = reinterpret_cast<LPNMHDR>(lParam); switch(pNmHdr->code) { case TTN_GETDISPINFO: { // Zeiger auf Tooltip-Info-Strukur ermitteln: LPNMTTDISPINFO pTTd = reinterpret_cast<LPNMTTDISPINFO>(pNmHdr); SendMessage(pNmHdr->hwndFrom, TTM_SETMAXTIPWIDTH, 0, uiToolTipWidth); //[h]1[/h] [*] pTTd->lpszText = szToolTipText; //[h]2[/h] <- (langen) Text setzen } break; // bzw. return (0L); } } break; // bzw. return (0L); // ...1
szToolTipText ist hier der mehrzeilige, beliebig-lange Text.
2
uiToolTipWidth ist die Breite des ToolTip-Fensters.[*]
Diese Zeile ist optional
.Noch ein Hinweis:
Wenn bei Euch die Konstanten (z.B.: TTS_BALLOON) nicht definiert, liegt das an einer veralteten SDK. Man kann den Fehler aber (wenigstens provisorisch) mit folgenden Präprozessor-Anweisungen beheben:#ifndef TTS_BALLOON #define TTS_BALLOON 0x41 #endif // TTS_BALLOONHier noch ein Informationslink zur MSDN:
Using ToolTip-Controls.Zum Schluss noch die Frage:
Wäre das eventuell was für FAQ ?PS: Funktionen sind getestet und sollten funktionieren ;).
EDIT: Noch n bissl deutlicher hervorgehoben
.
-
Sieht sehr gut aus

Wenn es fertig diskutiert ist, werde ich (oder ein anderer Mod) es zu den FAQ verschieben.