Popup menu [Résolu]

Messages postés
2
Date d'inscription
vendredi 12 juin 2009
Dernière intervention
13 juin 2009
- - Dernière réponse : daysara21
Messages postés
12
Date d'inscription
vendredi 22 mai 2009
Dernière intervention
2 juillet 2010
- 25 juin 2009 à 19:33
salut
est ce qu'il ya une methode pour creer un popup menu dans chaque image(255) qui sont dans un listview
et merci d'avance
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
3
Merci
Un seul TPopupMenu suffit pour l'ensemble et tu peux utiliser le code suivant.
Tu associes le TPopupMenu avec le TListItem via la propriété popupmenu de ce dernier.
Dans le cas présent, j'ai simplement créé deux éléments de menu dans le composant TPopupMenu.

procedure TForm1.ListView1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
var
  li: TListItem;
begin
  li := ListView1.ItemFocused;
  if assigned(li) then
    with PopupMenu1 do
    begin
      Activer1.Caption := 'Activer ' + li.Caption;
      Desactiver1.Caption := 'Désactiver ' + li.Caption;
      case li.ImageIndex of
        0:
          Activer1.Enabled := false;
        1, 2:
          Activer1.Enabled := True;
      end;
      Desactiver1.Enabled := not Activer1.Enabled;
      //Stockage de l'adresse des propriétés caption
      Activer1.Tag := Integer(Pointer(li.Caption));
      Desactiver1.Tag := Integer(Pointer(li.Caption));
    end;
end;

procedure TForm1.Activer1Click(Sender: TObject);
begin
  ShowMessage('Activation de ' + String(Pointer(Activer1.Tag)));
end;

procedure TForm1.Desactiver1Click(Sender: TObject);
begin
  ShowMessage('Désactivation de ' + String(Pointer(Desactiver1.Tag)));
end;

May Delphi be with you<hr />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
0
Merci
salut
création de composant à la volée
ou
un seul popup dans lequel tu viens modifier le contenu des items
ou
si le menu doit contenir les meme items, un seul menu posé dans l'IDE suffit !

Que doit tu faire dans ce menu ?
Commenter la réponse de JulioDelphi
Messages postés
2
Date d'inscription
vendredi 12 juin 2009
Dernière intervention
13 juin 2009
0
Merci
salut JULIO
j'ai un imagelist relier avec un listview ce dernier contentient 255 image d'un ordinateur et a chaque image je veut faire un popup menu
pour activer ou desactive l'ordinateur si c'est possible
merci
Commenter la réponse de cs_sarah21000
Messages postés
2354
Date d'inscription
dimanche 5 octobre 2003
Dernière intervention
18 novembre 2010
0
Merci
ouè ouè ouè mais ce n'est pas tres clair, as tu la possibilité de donner du code ou le projet zippé quelquepart ?
Commenter la réponse de JulioDelphi
Messages postés
12
Date d'inscription
vendredi 22 mai 2009
Dernière intervention
2 juillet 2010
0
Merci
salut julio
mon projet c'est faire le ping sur un reseau
alors dans ma forme il y'a un listview qui contient 255 ordinateur(par imagelist)


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ImgList, ComCtrls, IniFiles, ExtCtrls, UPingUtils;

type
TForm1 = class(TForm)
ListView1: TListView;
ImageList1: TImageList;
Button6: TButton;
Button7: TButton;
PingMonitor1: TPingMonitor;
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure PingMonitor1Echo(Sender: TObject; Timing: TDateTime;
PipeHandle: Cardinal; PacketId: Integer; BufferSize: Cardinal;
SAddr: String; RTT: Cardinal; TTL: Byte);
procedure PingMonitor1Timeout(Sender: TObject; Timing: TDateTime;
PipeHandle, PacketId: Cardinal);

private
{ Déclarations privées }
public
{ Déclarations publiques }
function FindIndex(APipeHandle: DWord): Integer;
end;

Tposte = record
PipeHandle: DWord;
ItemIndex: Integer;
end;

Tlistepostes=array of Tposte;

var
Form1: TForm1;
Nbrpostes:byte=8;
Listepostes:Tlistepostes;

implementation

uses Unit2;

{$R *.dfm}

//listView1.ItemIndex:= FindIndex(0);
//listView1.Selected.ImageIndex:= 1


function TForm1.FindIndex;
begin
for Result:= 0 to Length(ListePostes)- 1 do
if ListePostes[Result].PipeHandle= APipeHandle then
Exit;
result:= -1
end;



procedure TForm1.Button6Click(Sender: TObject);
var I: Byte;
begin
with TIniFile.Create(ExtractFilePath(Application.ExeName)
+'config.ini') do
try
for I:= 1 to 255 do
WriteString('USER_IP', '192.168.0.'+IntToStr(I), 'Y');
finally
Free
end
end;

procedure TForm1.Button7Click(Sender: TObject);
var I: Byte;
Section: TStrings;
S: String;
ListItem: TListItem;
begin

with TIniFile.Create(ExtractFilePath(Application.ExeName)
+'config.ini') do
try
Section:= TStringList.Create;
ReadSection('USER_IP', Section);
for I:= 0 to Section.Count- 1 do
begin
SetLength(ListePostes, Length(ListePostes)+1);
with ListePostes[Length(ListePostes)-1] do
begin
PipeHandle:= PingMonitor1.AddPipeEx(Section[I]);
ListItem:= ListView1.Items.add;
ListItem.ImageIndex:= 0;
ListItem.Caption:= Section[I];
ItemIndex:= ListItem.Index
end
end
finally
Section.Free;
Free
end
end;

procedure TForm1.PingMonitor1Echo(Sender: TObject;
Timing: TDateTime;
PipeHandle: Cardinal; PacketId: Integer;
BufferSize: Cardinal;
SAddr: String; RTT: Cardinal; TTL: Byte);
begin

listView1.ItemIndex:= FindIndex(PipeHandle);
listView1.Selected.ImageIndex:= 01

end;

procedure TForm1.PingMonitor1Timeout
(Sender: TObject; Timing: TDateTime;
PipeHandle, PacketId: Cardinal);
begin
listView1.ItemIndex:= FindIndex(PipeHandle);
listView1.Selected.ImageIndex:= 02
end;
end.

danc je veut faire pour chaque ordinateur dans le listview un popupmenu (donc 255popup menu) pour activer l'ordinateur ou le suspendre

merci bien julio
Commenter la réponse de daysara21
Messages postés
12
Date d'inscription
vendredi 22 mai 2009
Dernière intervention
2 juillet 2010
0
Merci
merci beaucoup pour vos reponses ca ma beaucoup aidé
Commenter la réponse de daysara21

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.