Hint sur popupmenu dynamique [Résolu]

vmsn 21 Messages postés dimanche 27 avril 2003Date d'inscription 26 juin 2009 Dernière intervention - 23 mars 2007 à 15:01 - Dernière réponse : cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention
- 26 mars 2007 à 14:24
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
Afficher la suite 

8 réponses

Répondre au sujet
vmsn 21 Messages postés dimanche 27 avril 2003Date d'inscription 26 juin 2009 Dernière intervention - 26 mars 2007 à 13:21
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de vmsn
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 23 mars 2007 à 15:14
0
Utile
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.
Commenter la réponse de cs_Loda
vmsn 21 Messages postés dimanche 27 avril 2003Date d'inscription 26 juin 2009 Dernière intervention - 23 mars 2007 à 15:24
0
Utile
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é
Commenter la réponse de vmsn
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 23 mars 2007 à 15:54
0
Utile
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.
Commenter la réponse de cs_Loda
vmsn 21 Messages postés dimanche 27 avril 2003Date d'inscription 26 juin 2009 Dernière intervention - 23 mars 2007 à 17:51
0
Utile
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
Commenter la réponse de vmsn
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 26 mars 2007 à 09:33
0
Utile
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.
Commenter la réponse de cs_Loda
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 26 mars 2007 à 10:11
0
Utile
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.
Commenter la réponse de cs_Loda
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 26 mars 2007 à 14:24
0
Utile
re,

tu peux afficher le hint de ton popup menu dans un autre compo (memo, label, ...) ou une fenetre flottante (ayant le même aspect que la fenetre de hint). le code que je t'ai filer fonctionne pour afficher les hint de ton popup menu.

mais, évidement c'est plus simple avec une list box.

note que les list box sont assez simple à customizer, si tu veux un truc qui sort un peu de l'ordinaire:
http://www.delphifr.com/codes/EXEMPLE-LISTBOX-COMBOBOX-PERSONNALISE_32199.aspx

quand ton prog est stable et documenté, post le! T'aurra surement plein de feedback constructif et pertinent.

bon code!

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Commenter la réponse de cs_Loda

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.