Hint sur popupmenu dynamique

Résolu
vmsn Messages postés 21 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 juin 2009 - 23 mars 2007 à 15:01
vmsn Messages postés 21 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 juin 2009 - 26 mars 2007 à 13:21
bonjour,
Je demande votre aide car la je bloque depuis tout a l'heure pour mettre une infobulle sur mon popup menu :

Voici comment je le construit :

procedure TForm1.menuPopup(Sender: TObject);
var
x:integer;
nb:integer;
test : string;
begin
x:= 0;
nb := listbox1.Items.Count;
menu.items.Clear;
while (x < nb) do begin
Item := TMenuItem.Create(Self);
test := listbox1.Items[x];
Setlength(test,50);
Item.Caption := test+'...';
item.Hint := listbox1.Items[x];
item.Onclick := et1Click;
item.Tag := x;
menu.Items.Add(item);
inc(x);
end;
Item := TMenuItem.Create(Self);
Item.Caption := '-';
menu.Items.Add(item);
Item := TMenuItem.Create(Self);
Item.Caption := 'Fermer vMCC';
item.Onclick := fermer1Click;
item.Tag := x+1;
menu.Items.Add(item);
end;

je pensais que item.hint me permettrait de créer une info bulle quand mon curseur resterait dessus, mais non, jai donc cherché a mettre showhint a true mais elle n'existe pas, si quelqu'un pouvait m'aider ca serait génial

7 réponses

vmsn Messages postés 21 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 juin 2009
26 mars 2007 à 13:21
salut,

Je ne savais pas, je vais donc suivre ton conseil, donc en fait plutot qu'un popup menu j'ai utilisé une listbox qui affiche mes résultats ce qui fait que je peux afficher mes hint comme je le veux, bon il est vrai que de ce fait mon interface graphique a un peu changé mais au moins j'ai pu terminer mon logiciel

http://paace.free.fr/vmcc/vmcc.exe

c'est ce logiciel il n'est pas fini, mais c'est a peu pret stable, il permet de garder en mémoire 20 copié collé

voila voila et encore merci de ton aide
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
23 mars 2007 à 15:14
salut,

je suis pas sur,
mais je ne crois pas que tu puisse mettre des info BULL dans un menu (enfin, j'en ai jamais vu).
par contre, si tu met une statusbar avec autohint= true, tu devrait voir tes hint.

N'oublie pas le format des hint:
"Hint bull | hint status bar | hint 3 (pas utiliser pa defaut) "

aussi, le parent de ton menu (ie: ta form) devrait avoir ShowHint = true.

Loda

PS: oublie pas de valider la réponse si ça joue.
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
vmsn Messages postés 21 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 juin 2009
23 mars 2007 à 15:24
salut,

en fait la solution ne va pas car mon logiciel n'affiche au final qu'une image de 32x32 sur laquelle est posée le fameux popupmenu donc je ne peux pas me permettre d'afficher une statusbar :)

je vais réfléchir a une autre solution je vous tiens au courant si j'ai trouvé
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
23 mars 2007 à 15:54
tu peux triger le hint à la main avec un truc genre (pas testé):

procedure TForm1.MonOnHint(....); //event pour application.onhint
var tmpSt:String;
    Msg   : TMessage;
begin
    Self.Hint:=GetHint(....);
    Application.CancelHint;
    TWMMouse(Msg).XPos := X; //pos du hint (du curseur quoi)
    TWMMouse(Msg).YPos := Y;
    Application.HintMouseMessage(self,msg);
end;

sinon, il te faut utiliser le Application.OnHint et te faire une petit fenetre "hint bull" toi même.

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vmsn Messages postés 21 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 juin 2009
23 mars 2007 à 17:51
bon ca n'a pas marché soit je suis blond soit je sais pas :)

je suis donc passé par une autre méthode qui elle marche je te remercie en tout cas pour ton aide Loda j'ai une autre question mais je vais faire un nouveau topic
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
26 mars 2007 à 09:33
re,

si ca n'as pas marché, ne VALIDE PAS LA REPONSE!

Si tu as choisit une autre méthode, explique nous là ici, et valide ta réponse. (Pour le prochain qui aurra le même problème)

Le but des "réponse validée" est de savoir qu'est-ce qui marche et qui répond à ton problème.

Sinon, ça devrait marché. je vais faire quelques test et je te redis.

A+

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
26 mars 2007 à 10:11
re,

effectivement, cette methode ne marche pas pour les menu. désolé.

ceci focntionne (testé)

unit MainForm_frm;

interface

uses Windows, forms, Classes, Menus, Controls, StdCtrls;

type
  TSDIAppForm = class(TForm)
    PopupMenu1: TPopupMenu;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure PopupMenu1Popup(Sender: TObject);
  private
    { Private declarations }
     procedure MonOnHint(sender:TObject);
  public
    { Public declarations }
  end;

var
  SDIAppForm: TSDIAppForm;

implementation

uses
  Messages;
{$R *.dfm}

{
OnHint event (TApplication)

Occurs when the mouse pointer moves over a control or menu item that can display a Help Hint.

Delphi syntax:

property OnHint: TNotifyEvent;

Description

Write an OnHint event handler to perform special processing when the mouse pauses over a control or menu item whose Hint property is not an empty string.

A common use of the OnHint event is to display the value of a control or menu item's Hint property in another control. Note that it is not necessary to use an OnHint event handler to display hints on a status bar (TStatusBar): TStatusBar will automatically display hints if you set its AutoHint property to true.

The Hint property of a control can specify both a short Help Hint and a (usually) longer hint that appears elsewhere because of code in an OnHint event handler.

Note:    You can also respond to this event using the TApplicationEvents component, which allows you to assign an event handler using the IDE.
Tip:    Component writers can respond to the automatically-fired THintAction action in a component’s ExecuteAction method rather than relying on an OnHint event handler.
}

procedure TSDIAppForm.MonOnHint(sender: TObject);
var
  TheHint, // Hint  2, 3
  TheShortHint, //hint 2
  TheLongHint //hint 3
  : string;

begin
  TheHint      : = Application.Hint;
  TheLongHint  := GetLongHint(TheHint);
  TheShortHint := GetShortHint(TheHint);

  // memo ou form
  //utilise GetCUrsorPos pour savoir ou afficher la fenetre.

  Memo1.Lines.Clear;
  Memo1.Lines.Add('H: ' + TheHint);
  Memo1.Lines.Add('S: ' + TheShortHint);
  Memo1.Lines.Add('L: ' + TheLongHint);

end;

procedure TSDIAppForm.PopupMenu1Popup(Sender: TObject);
var
  MenuItem : TMenuItem;
begin
  //del old dyn menu
  PopupMenu1.Items.Clear;

  MenuItem := TMenuItem.Create(PopupMenu1);

  // loop
  MenuItem.Caption := 'Dyn Menu';
  MenuItem.Hint := 'Hint 1 | Hint 2 | hint3';
//  menuItem.OnClick : = ...

  PopupMenu1.Items.Add(MenuItem);
  //fin loop

end;

procedure TSDIAppForm.FormCreate(Sender: TObject);
begin
//  ShowHint := true;
  Application.OnHint := MonOnHint;
end;

end.
<hr size ="2" width="100%" />
si tu veux l'afficher dans une fenetre perso, c'est assez facile.

PS: i y a surement un moyen de trigger à la main le hint, même pour un menu. mais j'ai pas creusé.

PS2: je ne connais aucun moyen de savoir quel control a trigger le OnHint event.

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
Rejoignez-nous