Popup menu [Résolu]

Signaler
Messages postés
2
Date d'inscription
vendredi 12 juin 2009
Statut
Membre
Dernière intervention
13 juin 2009
-
Messages postés
12
Date d'inscription
vendredi 22 mai 2009
Statut
Membre
Dernière intervention
2 juillet 2010
-
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

6 réponses

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
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.
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
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 ?
Messages postés
2
Date d'inscription
vendredi 12 juin 2009
Statut
Membre
Dernière intervention
13 juin 2009

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
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
ouè ouè ouè mais ce n'est pas tres clair, as tu la possibilité de donner du code ou le projet zippé quelquepart ?
Messages postés
12
Date d'inscription
vendredi 22 mai 2009
Statut
Membre
Dernière intervention
2 juillet 2010

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
Messages postés
12
Date d'inscription
vendredi 22 mai 2009
Statut
Membre
Dernière intervention
2 juillet 2010

merci beaucoup pour vos reponses ca ma beaucoup aidé