Problème de caption popupmenu

Résolu/Fermé
yodavip Messages postés 6 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 16 octobre 2006 - 13 oct. 2006 à 17:52
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 - 14 oct. 2006 à 16:49
Bonjour,
j'ai actuellement un soucis avec un programme que j'essaue de faire...
Je m'explique :

J'utilise un Tmemo qui me récupères les données d'un fichier et qui créé un popupmenu avec le contenu de ce fichier txt voilà le code :
procedure TForm1.FormCreate(Sender: TObject);
var
x:integer;
item:TmenuItem;
begin
x := 0;
popupmenu2.Items.Clear;
memo1.Clear;
Memo1.Lines.LoadFromFile('raisons.txt');
nbq := memo1.lines.Count;
while x < nbq do begin
Item := TMenuItem.Create(Self);
Item.Caption := Gauche('*',memo1.lines[x]);
Item.OnClick := est1Click;
popupmenu2.Items.Add(item);
x:= x+1;
end;
end;

Jusque là ca fonction très bien si j'affiche mon popupmenu, il est présent dans l'ordre que j'ai voulu etc...
Le soucis est le suivant :
Je voudrais maintenant faire un test quand je clique sur un des éléments du popupmenu qui recherche dans le Tmemo le caption correspondant pour pouvoir lancer l'action Droite('*',memo1.lines[x]);
j'avais donc penser à ce code :

procedure TForm1.est1Click(Sender: TObject);
var
x:integer;
begin
x := 0;
while x < nbq do begin
if popupmenu2.Items.Caption = Gauche('*',memo1.lines[x]) then
SendToRoomDirect(Droite('*',memo1.lines[x]));
x := x+1;
end;
end;

Seulement popupmenu2.Items.Caption est toujours vide... donc la condition n'est jamais vérifiée...

Auriez-vous un coup de pouce pour que je puisse trouver la valeur du caption de la partie du menu sur laquelle je clique (je fais un screen pour expliquer de quelle caption je parle)
 voilà je voudra réussir à récupérer essai2 quand je clique dessus

Merci d'avance !

8 réponses

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
13 oct. 2006 à 18:52
Salut,

tu as une erreur ds ton code:

while x < nbq do begin
if popupmenu2.Items.Caption = Gauche('*',memo1.lines[x]) then

Voilà ce que tu dois faire:
while x < nbq do begin
if  TMenuItem(Sender).Caption = Gauche('*',memo1.lines[x]) then

Sender étant le control qui a executé l' événement OnClick, tu récupère le MenuItem comme cela : TMenuItem(Sender)

A+
3
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
13 oct. 2006 à 20:02
Utilise le TAG de l'itemmenu, et pour chaque ligne du mémo transformée en itemmenu, tu lui mets (dans l'itemmenu créé) le TAG au n° de la ligne. ainsi quand tu clic sur un itemmenu, tu sais quel est son TAG (grace au sender par exemple) et donc tu trouvés ta ligne dans le memo direct.
me suis je fait comprendre ? ^^
3
yodavip Messages postés 6 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 16 octobre 2006
13 oct. 2006 à 22:34
merci infiniment a vous deux :)
ca marche parfaitement maintenant
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
14 oct. 2006 à 07:39
procedure TForm1.FormCreate(Sender: TObject);
var
  x    : integer;
  item : TmenuItem;
begin
  popupmenu2.Items.Clear;
  memo1.Clear;
  memo1.Lines.LoadFromFile('raisons.txt');

  nbq := Memo1.Lines.Count;

  for x := 0 to nbq-1 do begin
      Item         := TMenuItem.Create(PopuMenu2);
      Item.Caption := Gauche('*',memo1.lines[x]);
      Item.OnClick := est1Click;
      Item.Tag     := x;
      popupmenu2.Items.Add(Item);
  end;
end;




procedure TForm1.est1Click(Sender: TObject);
begin
  SendToRoomDirect(Droite('*',memo1.lines[(Sender as TMenuItem).Tag]));
end;





par contre je suis curieux de voir le code des fonctions Gauche et Droite ?

<hr size="2" width="100%" />Croc (click me)
0

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

Posez votre question
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
14 oct. 2006 à 08:32
Je propose :

function Gauche(const SubStr : String; const s : String; Position : Integer = 1) : String;
var p : Integer;
begin
  p := Pos(SubStr, s, Position);
  if p<=0
    then Result := s
    else Result := System.Copy(s, 1, p-1);
end;
et donc droite :
function Droite(const SubStr : String; const s : String; Position : Integer = 1) : String;
var p : Integer;
begin
  p := Pos(SubStr, s, Position);
  if p<=0
    then Result := ''
    else Result := System.Copy(s, p+Length(SubStr), Length(s));
end;

Mon site DELPHI =)
0
yodavip Messages postés 6 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 16 octobre 2006
14 oct. 2006 à 15:58
alors les fonctions gauche et droite viennent d'ici , je trouve le fichier FonctionsChaine.pas remarquablement bien réalisé donc je m'en sert :)

Pour le reste ca fonctionne tres bien grâce à Mauricio et Julio :)
0
yodavip Messages postés 6 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 16 octobre 2006
14 oct. 2006 à 16:08
je me permets de poster dans le meme thread vu que c'est le même logiciel que je créé...
j'ai un autre petit soucis... voici les exe du logiciel si vous voulez tester quand vous mettez "toujours au dessus" (j'utilise stayontop) parfois mon logiciel repasse derriere d'autres fenetre quand meme... je sais pas pourquoi... et ca m'enerve... aurieez vous déjà rencontré ce probleme?
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
14 oct. 2006 à 16:49
Autre probleme, autre post ! Merci =)
Ce post est considéré comme "resolu", tu auras moins de personnes qui viendront dans ce thread pour t'aider. ouvre en un autre, c'est gratuit ^^

Mon site DELPHI =)
0
Rejoignez-nous