Zum Inhalt springen

Wie erstelle ich ein Tooltip.


Empfohlene Beiträge

HAllo, ich habe mal wieder ein problem.

Ich habe eine Toolbar (siehe Bild)

HAMTS.png

die einzelnen elemte sind dafür in einem Bitmap gespeichert

das Bitmap schaut so aus

(sihe Bild) I5IDL.png

Die einzlnen Elemente werden aus dem bitmap gelesen denn aller 15*16 Pixel entspricht ein symbol.

diese werden in einer header datei geladen


// Die Elemente für die Toolbar

TBBUTTON tbButton[] = 

{

//{0, ID_FILE_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{16, ID_FILE_NEWtb, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{0, ID_FILE_MAKRO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{1, ID_FILE_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{2, ID_FILE_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

//{4, ID_FILE_SAVE_AS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

//{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

{3, ID_EDIT_CLEAR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

{12, ID_HARDCOPY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

{7, ID_STRUKTURIERTER_TEXT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

{9, ID_EINGANG_PLUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{10, ID_EINGANG_MINUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

{14, ID_ZOOM_PLUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{15, ID_ZOOM_MINUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

{11, ID_HELP, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

//{13, ID_INFO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}

}; 

Die anfangs zahlen entpricht den Symbol auf den Bitmap.

Nun meine Frage wie kann ich realiesieren das wenn ich über ein BUtton mit der Maus bin, dann sich dann pro button so ein Tooltip öffnet wo der name des Butten steht.

Bsp. Maus ist über der dem Button OPEN das dann steht öffnen. Quasi so eine art mousovereffekt wie bei java.

Danke im VOrraus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Danke für deinen Tipp aber es funktioniert noch nicht bei mir.

so sieht jetzt mein Quellcode aus für die Umgebung.h also wo die Toolbar erzeugt wird


bool ErstelleArbeitsFenster(HWND Handle,ProgrammInformation *info)

{

	RECT rect;

	GetClientRect(Handle,&rect);

	(*info).handles.Arbeitsfenster = CreateWindow (	TEXT("Arbeitsfenster"), NULL,

												WS_CHILDWINDOW | WS_VISIBLE,

												0,0,

												rect.right,rect.bottom,

												Handle,NULL,

												(*info).hInstance, NULL) ;

	if ((*info).handles.Arbeitsfenster == NULL)

		return FALSE;


	// Toolbar erstellen

	(*info).handles.Toolbar =	CreateToolbarEx((*info).handles.Arbeitsfenster,	// parent

												WS_CHILD | WS_BORDER | 

												WS_VISIBLE | TBSTYLE_TOOLTIPS,	// style

												IDR_TOOLBAR,						// toolbar id

												AnzahlButtons,                  // number of bitmaps

												(*info).hInstance,						// mod instance

												IDB_TOOLBAR,					// resource id for the bitmap

												(LPCTBBUTTON)&tbButton,			// address of buttons

												AnzahlButtons,                  // number of buttons

												16,16,							// width & height of the buttons

												16,16,							// width & height of the bitmaps

												sizeof(TBBUTTON)

												);	

	if ((*info).handles.Toolbar == NULL)

		return FALSE;


	HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,

		WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,

		CW_USEDEFAULT, CW_USEDEFAULT,

		CW_USEDEFAULT, CW_USEDEFAULT,

		(*info).handles.Arbeitsfenster, NULL,info->hInstance,

		NULL);


	if (NULL != hwndTip)

	{

		Programminfo.handles.ToolTip = hwndTip;


		SetWindowPos(hwndTip, HWND_TOPMOST, 0, 0, 0, 0, 

			SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); 


	}


	TOOLINFO ti;

	ti.cbSize = sizeof(TOOLINFO);

	ti.uFlags = TTF_SUBCLASS;

	ti.hwnd = info->handles.Arbeitsfenster;

	ti.hinst = info->hInstance;

	ti.rect.left=1;

	ti.rect.top=1;

	ti.rect.bottom=200;


	//ti.rect.left = 0;

	//ti.rect.top = 0;

	//ti.rect.right = 100;

	//ti.rect.bottom = 100;


	for(int i =0; i < AnzahlButtons; i++)

	{

		int x;

		if( ToolButtonHilfsText[i][0]==0) 

			x=6; // Separator

		else 

			x=22; // normaler Button

		ti.rect.right = ti.rect.left + x;

		ti.lpszText = ToolButtonHilfsText[i];

		SendMessage(hwndTip, TTM_ADDTOOL, 0,(LPARAM)&ti);

		ti.rect.left = ti.rect.right + 1;

	}



	return TRUE;

}
und so schaut der Quelltext vom Hauptprogramm.h aus wo die elemente definiert werden für die Toolbar
const int AnzahlButtons	= 18;


#define ID_FILE_NEW                     0xE100

#define ID_FILE_OPEN                    0xE101

#define ID_FILE_SAVE                    0xE103

#define ID_FILE_SAVE_AS                 0xE104

#define ID_EDIT_CLEAR                   0xE120

#define ID_HELP                         0xE146

#define ID_HELP_INDEX                   0xE142


// Die Elemente für die Toolbar

TBBUTTON tbButton[] = 

{

{0, ID_FILE_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

//{0, ID_FILE_NEWtb, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{16, ID_FILE_MAKRO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{1, ID_FILE_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{2, ID_FILE_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

//{4, ID_FILE_SAVE_AS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

//{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

{3, ID_EDIT_CLEAR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

{12, ID_HARDCOPY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

{7, ID_STRUKTURIERTER_TEXT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

{9, ID_EINGANG_PLUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{10, ID_EINGANG_MINUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

{14, ID_ZOOM_PLUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{15, ID_ZOOM_MINUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

{11, ID_HELP, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},

{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},

//{13, ID_INFO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}

}; 


char* ToolButtonHilfsText[AnzahlButtons] =

{

	"Neues FUP-Projekt",

	"Neues Makro-Projekt",

	"Projekt Öffnen",

	"Projekt Speichern",

	"letztes eingefügtes Element löschen",

	"HARDCOPY",

	"",

	"erzeuge Strukturierten Text",

	"",

	"Eingang hinzufügen",

	"Eingang entfernen",

	"",

	"herein zoomen",

	"heraus zoomen",

	"",

	"Hilfe",

	"",

	""

};

aber leider wird immernoch kein tooltip erzeugt wenn ich mit der Maus darüber fahre. Weis einer rat?? Oder was mache ich falsch??

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also Sendmessage war erfolgreich aber die Tooltips kamen immer noch nicht.

Nun hab ich beim googeln was gefunden:

Tooltip won't display over toolbar button - C Board

NUn hab ich das versucht den Code an mein Programm anzupassen, aber erscheint über jedem Toolbutton der gleiche Tooltext (immer der erste String von meinem Textarry, in dem ich die Tooltips hinterlegt habe)


for(int i =0; i < AnzahlButtons; i++)

	{

		if (*ToolButtonHilfsText[i] != *"")

		{			

			tbButton[i].iString = SendMessage((*info).handles.Toolbar, TB_ADDSTRING, 0, (LPARAM) (LPSTR) ToolButtonHilfsText[i]);

		}

		else tbButton[i].iString = 0;

}


DWORD ToolButtonID[AnzahlButtons] = 

{

	ID_FILE_NEW,

	ID_FILE_MAKRO,

	ID_FILE_OPEN,

	ID_FILE_SAVE,

	ID_EDIT_CLEAR,

	0,

	ID_HARDCOPY,

	0,

	ID_STRUKTURIERTER_TEXT,

	0,

	ID_EINGANG_PLUS,

	ID_EINGANG_MINUS,

	0,

	ID_ZOOM_PLUS,

	ID_ZOOM_MINUS,

	0,

	ID_HELP,

	0

};


char* ToolButtonHilfsText[AnzahlButtons] =

{

	"Neues FUP-Projekt",

	"Neues Makro-Projekt",

	"Projekt Öffnen",

	"Projekt Speichern",

	"letztes eingefügtes Element löschen",

	"HARDCOPY",

	"",

	"erzeuge Strukturierten Text",

	"",

	"Eingang hinzufügen",

	"Eingang entfernen",

	"",

	"herein zoomen",

	"heraus zoomen",

	"",

	"Hilfe",

	"",

	""

};

Hast du eine Idee, woran es liegt?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem ist vermutlich, dass du die Strings erst hinzufügst, nachdem die Toolbar mit allen Buttons bereits erstellt wurde. Nachträgliche Änderungen an dem TBBUTTON-Array wirken sich natürlich nicht automatisch aus. Möglicherweise reicht es, wenn du danach nochmal für jeden Button TB_SETBUTTONINFO verschickst, damit die aktualisierten Stringindizes auch bei der Toolbar ankommen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem ist vermutlich, dass du die Strings erst hinzufügst, nachdem die Toolbar mit allen Buttons bereits erstellt wurde.

Ja, das mache ich. Wie kann man das schon vorher machen oder geht das nicht?

Nachträgliche Änderungen an dem TBBUTTON-Array wirken sich natürlich nicht automatisch aus. Möglicherweise reicht es, wenn du danach nochmal für jeden Button TB_SETBUTTONINFO verschickst, damit die aktualisierten Stringindizes auch bei der Toolbar ankommen.

Wenn ich die TB_SETBUTTONINFO Message sende fliegt das Programm weg. Ich hab den Aufruf von Sendmessage mit TB_SETBUTTONINFO in die Schleife gepackt, ist das vllt verkehrt?

Hast du eine Idee?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich die TB_SETBUTTONINFO Message sende fliegt das Programm weg.
Was soll das denn für eine Fehlerbeschreibung sein? :rolleyes:

Ich hab den Aufruf von Sendmessage mit TB_SETBUTTONINFO in die Schleife gepackt, ist das vllt verkehrt?
Nö. Vermutlich sind irgendwelche Member der Struktur falsch oder gar nicht gesetzt.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...