![]() |
Hint beim PopUp
Ich erzeuge mit folgendem Procedureauszug Enträge im PopUp Menü:
Code:
Doch wenn ich über den Eintrag im PopUp Menü zur Laufzeit drüber fahre, dann wird der Hint nicht angezeigt. Aber warum nicht? Es gibt doch aber auch kein ShowHint was man auf True setzen müßte.
var s:string;
i,j:integer; Item:TMenuItem; begin s:='Eintrag=blabla-"Hint"'; Item:=TMenuItem.Create(Self); j:=Pos('=',s); If j<>0 then Item.Caption:=copy(s,1,j-1) else begin j:=Pos('-',s); If j<>0 then Item.Caption:=copy(s,1,j-1) else Item.Caption:=s; end; j:=Pos('-',s); If j<>0 then Item.Hint:=copy(s,j+2,Length(s)-j-2) else Item.Hint:=''; PopUpMenu1.Items.Add(Item); |
Hi!
Es gibt noch eine weitere Eigenschaft für den Hint: ShowHint Du musst wohl nur noch folgendes ergänzen:
Code:
Müsste dann funktionieren.
Item.ShowHint := True;
Gruß Yheeky |
Bei mir wird bei einem PopupMenu-Item auch kein Hint angezeigt :(
Könnte es sein (hab' ich noch nicht getestet), dass der Hint nur bei einem grafischen Menüeintrag erscheint? Dann würde eine gewisse Logik dahinter stecken. Die Delphi-Hilfe geht jedenfalls mit keinem Wort darauf ein, dass der Hint nicht angezeigt würde. Das Ereignis onHint wird aber zuverlässig ausgelöst. :coder: |
@ Yheeky:
TMenuItem besitzt kein ShowHint :( Zumindest hat der Delphi 5-Compiler noch nichts davon gehört... :coder: |
Mhmm, und wie sieht´s beim PopUpMenu selbst aus?
Gruß Yheeky |
Ein Menü an sich hat überhaupt keine Hint-Eigenschaft.
:coder: |
Beim PopUp selbst geht's ja auch nicht. Aber irgendwie muß das ja gehen, da es sonst die Eigenschaft doch nicht gäbe?
|
Mir sind eigentlich keine Standard-Anwendungen bekannt, welche Hints beim Menü anzeigen. Vielleicht gibt es die Eigenschaft nur, um bei onHint einen Text in der Statuszeile ausgeben zu können...
:coder: |
Die Eigenschaft Hint von TMenuItem steht in Verbindung mit dem OnHint/OnShowHint-Ereignis von TApplication. Eine TStatusLine-Komponten besitzt die Eigenschaft AutoHint. Wenn diese True ist, zeigt sie den Hint-Text des jeweiligen TMenuItem an.
|
Wie macht denn der IE das bei den Favoriten?
|
Hi,
vielleicht ist es einfach einem "normalen" Menü ein Hint zuzufügen, als bei einem Kontextmenü. Ich selbst hab auch noch keine Hints in einem Kontextmenü gesehen. Aber lass dich davon nicht abbringen, ich weiss was du vor hast. ;) Grüsse, Daniel :) |
Irgendwie muß das gehen und wenn ich die selbst zeichnen muß.
|
Hat denn echt keiner 'ne Idee?
|
AW: Hint beim PopUp
Ich weiß, is schon alt, aber da ich auch danach suchte....
![]() Theoretisch müßte es so dann doch funktionieren.
Delphi-Quellcode:
var MenuHintWindow : THintWindow;
procedure THauptForm.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); var SubMenu : HMENU; MenuItem : TMenuItem; HintPos : TRect; begin if (Msg.message = WM_MENUSELECT) and (({MenuFlag}HIWORD(Msg.wParam) <> $FFFF) or ({IDItem}LOWORD(Msg.wParam) <> 0)) then begin if {MenuFlag}HIWORD(Msg.wParam) and MF_POPUP <> 0 then begin SubMenu := GetSubMenu(HMENU(Msg.lParam), {IDItem}LOWORD(Msg.wParam)); MenuItem := Self.Menu.FindItem(SubMenu, fkHandle); end else MenuItem := Self.Menu.FindItem({IDItem}LOWORD(Msg.wParam), fkCommand); if MenuItem.Hint <> '' then begin if not Assigned(MenuHintWindow) then MenuHintWindow := TGenerics.IfThen<THintWindowClass>(Assigned(HintWindowClass), HintWindowClass, THintWindow).Create(Self); HintPos.TopLeft := Mouse.CursorPos; HintPos.TopLeft := Point(HintPos.Left + 16, HintPos.Top + 16); HintPos.BottomRight := Point(HintPos.Left + Canvas.TextWidth(MenuItem.Hint), HintPos.Top + Canvas.TextHeight(MenuItem.Hint)); MenuHintWindow.ActivateHint(HintPos, MenuItem.Hint); end else Application.HideHint; Handled := True; end; end; Aber WM_MENUSELECT wird nicht aufgerufen, wenn ich die Maus über dem Popup-Menü bewege. Auch beim direkten Weg kommt nichts an.
Delphi-Quellcode:
Gut, könnte ja sein, daß es an das TPopupMenu gesendet wird und nicht an die TForm, aber dann müßte es doch dennoch am TApplicationEvent.OnMessage (Application.OnMessage) vorbeikommen. :gruebel:
private
procedure WMMenuSelect(var Msg: TWMMenuSelect); message WM_MENUSELECT; end |
AW: Hint beim PopUp
Hallo himitsu,
bin den gleichen Weg gegangen wie Du (Tip von About.com)und kann die WM_MENUSELECT ebenfalls nicht abfangen. Gibt es hier eine Lösung? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 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