Popup menu [Résolu]

cs_sarah21000 2 Messages postés vendredi 12 juin 2009Date d'inscription 13 juin 2009 Dernière intervention - 13 juin 2009 à 00:04 - Dernière réponse : daysara21 12 Messages postés vendredi 22 mai 2009Date d'inscription 2 juillet 2010 Dernière intervention
- 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
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 21 juin 2009 à 22:11
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.

Merci cs_Delphiprog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 13 juin 2009 à 07:53
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
cs_sarah21000 2 Messages postés vendredi 12 juin 2009Date d'inscription 13 juin 2009 Dernière intervention - 13 juin 2009 à 18:11
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
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 13 juin 2009 à 19:45
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
daysara21 12 Messages postés vendredi 22 mai 2009Date d'inscription 2 juillet 2010 Dernière intervention - 13 juin 2009 à 23:44
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
daysara21 12 Messages postés vendredi 22 mai 2009Date d'inscription 2 juillet 2010 Dernière intervention - 25 juin 2009 à 19:33
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.