PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Comic-Bubbles Hints / Tooltips


Messiah_of_Death
30.04.2002, 18:11
Ja Hallo !!!

würde gern wissen, wie ich diese Comic-Bubbles Hints / Tooltips mit Delphi (bzw. generell (WinAPI)) coden kann.

Eh, wenn keiner weis was ich meine WinME/2k/XP haben diese Teile. Die sieht man z.B. wenn man ein Netzwerkkabel reinstöpselt oder nach ner Neuinstalltion den "Start-Hinweis" bekommt.

also wäre cool... DANKE


Felix Kaiser
02.05.2002, 17:58
Tät mich auch mal interessieren, leider habe ich keine Win32SDK für Win4.9+.

Ich versuch mich mal schlau zu machen ...

Felix Kaiser
02.05.2002, 18:24
http://216.26.161.91/vbapi/ref/n/notifyicondata.html

Ist gut beschrieben da, ich versuchs mal in die TrayIcon Komponente zu integrieren, die ich bisher immer verwendet habe.

Und das ganze nennt sich ´Balloon Effect´. :)

xOOn
02.05.2002, 19:30
@ Guru

ich weiss dass ich faul bin!

aber koenntest du mir die fertige komponete mal zukommen lassen :D :D

Messiah_of_Death
02.05.2002, 20:01
Also ihr seit ja obercool ! :D

GURU DANKE !!!

jetzt konnte ich in der MSDN mal konkret suchen und hab auch den korrekten Artikel gefunden !!!


MSDN - How to use Tooltips (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/CommCtls/ToolTip/UsingTooltips.asp)

Aber wie krieg ich den diese Funktionen und Typen

(z.B. InitCommonControlsEX) .. da rein.. über die Unit ComCtrls jedenfalls nicht ?!

xOOn
02.05.2002, 20:44
auszug aus der SDK

Version 4.70 and later of Comctl32.dll

Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with Internet Explorer 3.0 and later).
Windows 95/98/Me: Requires Windows 98 (or Windows 95 with Internet Explorer 3.0 or later).
Header: Declared in commctrl.h.
Import Library: comctl32.lib.

Wraps the API routine, InitCommonControlsEx, which registers common control classes from ComCtl32.dll.

also die scheint in der delphi api-include weggelassen worden zu sien, du kannst entweder diese nehmen oder sie manuel include machen, wie das unter Delphi geht weiss ich aber nichtmehr ;( ;( ;(
Unit

aus der delphi help:

ComCtrls

Category

Windows controls utilities

functionInitCommonControl(CC: Integer): Boolean;

Description

InitCommonControl wraps both the current Windows API routine, InitCommonControlsEx, and its obsolete predecessor, InitCommonControls. It calls the newer function if available; otherwise it calls the older InitCommonControls function.

The routine passes the address of an InitCommonControlsEx structure that contains information specifying which control classes will be registered.

Felix Kaiser
02.05.2002, 21:16
Wer sagt denn dass ich das recht bald mach? Immerhin bin ich auch relativ faul :] Vielleicht schau ichs mir mal am Wochenende an. Ich benutze so ne Komponente, TAnimatedTrayIcon, hab aber bisher den animierten Part immer nicht benutzt, weils mir so schon gereicht hat. Ist im übrigen was PopUp Handling angeht von mir schon bugfixed worden ...

Wennde selber bauen willst, kein Thema, schick dir das Ding, ansonsten wart halt.

xOOn
02.05.2002, 21:58
@ Guru

naja ich habe eine todo liste die fuer 3 moante reicht
und ich bin mit meiner website 3 wochen im verzug also ich kann warten :D

wenn ichs mal mache schick ichs dir

Messiah_of_Death
02.05.2002, 23:02
BÖÖÖÖSSSSEEEEERRRRRRR SCHREIBFEHLER !!!!!!!!

NICHT ComCtrls

sondern

CommCtrl einbinden !!!!!!


als ich mich so ganz genau in der MSDN umsah, hab ich es gesehen:


Minimum DLL Version comctl32.dll version 4.71 or later
Header commctrl.h <- !!!!!!!
Minimum operating systems Windows 2000, Windows NT 4.0 with Internet Explorer 4.0, Windows 98, Windows 95 with Internet Explorer 4.0


hab dann mal in der Unit ComCtrls rumgesucht und gesehen DIE benutzt COMMCTRL !!!!!!

Messiah_of_Death
03.05.2002, 00:25
hier der beweis es geht:

nennt mich GOTT :D
hab grad mal das MSDN Sample umgearbeitet
ALSO

knopf auf&acute;s formular und dann dies als procedure fE den Knopf nehmen !
Nach nem Knopfdruck ist Eer dem ganzen Formular der Tooltip !!!

Nochwas:

In D5 (D6 auch ?!) fehlen einige Constanten -_- ..
naja hier eine VB-Seite mit den Constanten
das &H... = $ oki ?!

http://www.generation.net/~hleboeuf/tooltips.htm


Noch eine Anmerkung (braucht ihr weniger probieren (und mir macht&acute;s grad so ein Spa&szlig; :D )):

Da unten im Code steht Handle <- das ist das Teil vom Fenster.. sollte man das ToolTip wo anders hinhaben wollten -> Komponente.Handle <- dadurch ersetzen !
und _rect := Komponente.ClientRect <- das auch !!



uses CommCtrl; // WICHTIG !!!

const
// DELPHI 5 HAT DAS HIER NICHT !!!!

TTS_BALLOON = $40;
TTM_SETTITLEA = (WM_USER + 32);
TTM_SETTITLEW = (WM_USER + 33);

procedure TForm1.Button1Click(Sender: TObject);
var
iccex : TInitCommonControlsEx;
ti : TOOLINFO;
hwndTT : HWND;
_rect : TReCT;
strTT : array[0..29] of char;
pTitle : array[0..29] of char;
col : COLORREF
begin
strTT := &acute;This is your ToolTip string.&acute;;
pTitle := &acute;TestTitle&acute;;
col := RGB(122,0,122);
// INIT
iccex.dwICC := ICC_WIN95_CLASSES;
iccex.dwSize := sizeOf(TInitCommonControlsEx);
InitCommonControlsEx(iccex);

// CREATE TOOLTIP

hwndTT := CreateWindowEx(WS_EX_TOPMOST,
TOOLTIPS_CLASS,
nil,
WS_POPUP or TTS_NOPREFIX or TTS_BALLOON,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
Handle,
0,
hInstance,
nil
);
SetWindowPos(hwndTT, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);

// get Coords of the main client area

_rect := GetClientRect;

// INIT MEMBERS OF THE TOOLINFO STRUCT
with ti do
begin
cbSize := sizeOf(TOOLINFO);
uFlags := TTF_SUBCLASS;
hwnd := Handle;
hInst := hInstance;
uId := 0;
lpszText := strTT;
Rect := _rect; // Tooltip will cover the whole Window
// Send an ADDTOOL MESSAGE TO THE TOOLTIP CONTROL WINDOW
end;
SendMessage(hwndTT, TTM_ADDTOOLA, 0, integer(@ti));
SendMessage(hwndTT, TTM_SETTIPBKCOLOR, integer(col), 0);
SendMessage(hwndTT, TTM_SETTITLEA, 3, Integer(@pTitle));
end;

Felix Kaiser
03.05.2002, 14:39
Nun übertreib mal nicht. Hast nen schönes Sample gefunden, bzw. es gefixt. Ich versuch mal wenn ich die Zeit finde es in die AnimatedTrayIcon Komponente zu bauen.

Messiah_of_Death
03.05.2002, 15:05
?! ich hab nur das C++ Teil in Delphi umgesetzt...

sorry war gestern etwas aufgedreht... (Schlafmangel :D )

Felix Kaiser
03.05.2002, 22:30
Hmm, kannst du mir per Mail ein funktionierendes (compiliertes) Sample mit Source schicken, dein Code will und will nicht. Trotz aller Tricks aus der API. Zur Information:
Ich verwende Delphi 6 Enterprise Suite auf Windows .NET Enterprise Server Platform.

Messiah_of_Death
03.05.2002, 23:27
Du hast Post :D

(aber der Code da oben der geht... ?! )

Felix Kaiser
04.05.2002, 13:09
Mit der Ausnahme, dass dieser Code so wie er ist nichts tut. Ich setz mich mal ran.

Messiah_of_Death
04.05.2002, 13:55
also ich hab mich doch nicht umsonst 2 std davor gehockt.


ich drück auf das Knöpfchen und dann erst kommt wenn man mit der Maus über dem Formular ist der ToolTip..

schick bitte ne Mail, wenn&acute;s klappt

Schaf
04.05.2002, 19:14
bei mir kommt leider garkein tooltip :( gibt es nicht eine art code, der nicht nach microsoft-art (also auf allen pcs) funktioniert?

Felix Kaiser
04.05.2002, 20:20
Hab mir vorhin mal 30 Minuten Zeit genommen und aus dem Code auch recht brauchbare Komponente gemacht, für den Formulardesigner.

http://www.darkenemy.com/sbin/balloon.zip

Kann jeder Komponente zugewiesen werden, die von TWinControl abgeleitet ist. Leider tappe ich noch im dunklen was es betrifft dieses Tooltip einem TrayIcon zuzuweisen oder es gar per API Aufruf einfach erscheinen zu lassen.

Messiah_of_Death
04.05.2002, 21:25
?! gieht&acute;s net ?!

na gut ich hock mich später mal hin und probier&acute;s :D

Felix Kaiser
05.05.2002, 00:20
Gibt noch viele Sachen die unbekannt sind. Wie bekommt man z.B. ein Schließenkreuz rechts oben in das Tooltip? Für Inet Suche hatte ich bisher keine Zeit und meine SDK Stand &acute;98 hilft nicht sonderlich weiter.

Hab z.B. jetzt noch was gefunden für vertikale Ausrichtung des Balloontooltips.

Messiah_of_Death
05.05.2002, 00:58
:D hab deinen Fehler ... (glaub ich)

kann es sein, dass du die Win9x TrayIcon-Structure benutzt ?! Hier ist die von Win2k

http://www.visualbasic-archiv.de/vbapi/struct_NOTIFYICONDATA.php3

<- VB .. auf der MSDN is in C aber da in deutsch :)

Felix Kaiser
05.05.2002, 02:39
Das brauch ich nun nicht mehr :P

Hab das Problem selber gelöst, die Komponente funktioniert perfekt.

Eigenschaften:

Caption: String
Control: TWinControl
Delay: Integer
Duration: Integer
Enabled: Boolean
Icon: TBalloonIcon (biNone,biInfo,biWarning,biError)
Text: String
VerticalAlign: TVerticalAlign (vaUp,vaDown)

Für TrayIcons steht die Prozedur TrayBalloon zur Verfügung, in desses Parameter das Handle des TrayIcons übergeben wird. Es wird dann ein Balloon Tooltip mit den Eigenschaften der Komponente erzeugt.

Viel Spaß damit, die Komponente ist gepatcht.

xOOn
05.05.2002, 10:04
ich muss mir die komponente mal anschauen :D :D

Messiah_of_Death
05.05.2002, 17:00
is nur ne vage vermutung aber ..ich glaube das [X] <- im TrayIcon - Bubble geht _nur_ unter XP

ich sah dieses verdammte Ding nur unter WInXP - Screenies...

ach ja hab&acute;s auch endlich geschafft.. :D nur der TimeOut und das Icon spinnen jetzt -_-

Schaf
05.05.2002, 17:42
unter win2k gibbet das dingen auch, unter winme denke auch ...

Messiah_of_Death
05.05.2002, 18:42
also ich hab mir die sources angeschaut.. wo ein [x]-Knopf drinnen ist und die haben kein einzigen Flag mehr benutzt....

Felix Kaiser
05.05.2002, 19:23
Das [x] ist ein Feature von WinXP was auch in .NET übernommen wurde, das ist automatisch da bei Systemtray Balloons ;)