Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Hint beim PopUp (https://www.delphipraxis.net/136-hint-beim-popup.html)

Tpercon 13. Jun 2002 12:15


Hint beim PopUp
 
Ich erzeuge mit folgendem Procedureauszug Enträge im PopUp Menü:
Code:
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);
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.

Yheeky 13. Jun 2002 16:26

Hi!

Es gibt noch eine weitere Eigenschaft für den Hint: ShowHint
Du musst wohl nur noch folgendes ergänzen:

Code:
Item.ShowHint := True;
Müsste dann funktionieren.

Gruß Yheeky

Alfons_G 13. Jun 2002 16:38

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:

Alfons_G 13. Jun 2002 16:41

@ Yheeky:
TMenuItem besitzt kein ShowHint :(
Zumindest hat der Delphi 5-Compiler noch nichts davon gehört...

:coder:

Yheeky 13. Jun 2002 17:30

Mhmm, und wie sieht´s beim PopUpMenu selbst aus?

Gruß Yheeky

Alfons_G 13. Jun 2002 18:23

Ein Menü an sich hat überhaupt keine Hint-Eigenschaft.

:coder:

Tpercon 13. Jun 2002 18:28

Beim PopUp selbst geht's ja auch nicht. Aber irgendwie muß das ja gehen, da es sonst die Eigenschaft doch nicht gäbe?

Alfons_G 13. Jun 2002 18:43

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:

jbg 13. Jun 2002 20:56

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.

Tpercon 14. Jun 2002 10:15

Wie macht denn der IE das bei den Favoriten?

Daniel B 14. Jun 2002 12:51

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 :)

Tpercon 14. Jun 2002 13:00

Irgendwie muß das gehen und wenn ich die selbst zeichnen muß.

Tpercon 18. Jun 2002 15:52

Hat denn echt keiner 'ne Idee?

himitsu 21. Jun 2012 15:19

AW: Hint beim PopUp
 
Ich weiß, is schon alt, aber da ich auch danach suchte....

http://delphi.about.com/od/vclusing/a/menuitemhints.htm


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:
private
  procedure WMMenuSelect(var Msg: TWMMenuSelect); message WM_MENUSELECT;
end
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:

ZOD 10. Jan 2014 06:25

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 10:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz