IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

probleme procedure ListBox


Sujet :

Delphi

  1. #1
    Membre confirmé Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut probleme procedure ListBox
    Bonjour a tous,

    j'ai un enorme probleme avec une ListBox...
    Je voudrais récupérer les applications en cours sur Windows j'ai un tutorial sur ca
    mais le probleme c'est que Delphi m'indique une erreure sur une ListBox, voyez mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    [...]type
      TForm3 = class(TForm)
        ListBox1: TListBox;
        Label1: TLabel;
        procedure ListBox1Click(Sender: TObject);//l'erreure est ici d'apres delphi
        procedure FormActivate(Sender: TObject);
        procedure ListBox1DblClick(Sender: TObject);
        [...]
        function UpString(Str: string): string;
    var i: integer;
    begin
      result:='';
      for i:=1 to length(str) do
        result:=result+UpCase(str[i]);
    end;
    function GetProcessId(ProgName:string):cardinal;
    var  Snaph:thandle;
         Proc:tprocessentry32;
         PId:cardinal;
    begin
      PId:=0;
      Proc.dwSize:=sizeof(Proc);
      Snaph:=createtoolhelp32snapshot(TH32CS_SNAPALL,0);
      process32first(Snaph,Proc);
      if UpString(extractfilename(Proc.szExeFile))=UpString(ProgName) then
         PId:=Proc.th32ProcessID
      else
        begin
          while process32next(Snaph,Proc) do
            begin
               if extractfilename(Proc.szExeFile)=ProgName then
                  PId:=Proc.th32ProcessID;
            end;
       end;
      Closehandle(Snaph);
      result:=PId;
    end;
    function GetProcessList():TStringList;
    var  Snaph:thandle;
         Proc:tprocessentry32;
         PList:TStringList;
    begin
      PList:= TStringList.Create();
      PList.Clear;
      Proc.dwSize:=sizeof(Proc);
      Snaph:=createtoolhelp32snapshot(TH32CS_SNAPALL,0);
      process32first(Snaph,Proc);
      PList.Add(extractfilename(proc.szExeFile));
      while process32next(Snaph,Proc) do
          PList.Add(extractfilename(Proc.szExeFile));
      result:=PList;
      Closehandle(Snaph);
    end;
    
    procedure TForm3.FormActivate(Sender: TObject);
    var TSL : TStringList;
    begin
      Listbox1.Clear;
      TSL := GetProcessList;
      Try Listbox1.Items.Assign(TSL);
      Finally
        TSL.Free;
      end;
    end ;
    
    procedure TForm3.ListBox1DblClick(Sender: TObject);
    var  Proch:thandle;
         PId:cardinal;
    begin
        PId:=GetProcessId(Listbox1.items[Listbox1.itemindex]);
        Proch:=openprocess(PROCESS_ALL_ACCESS ,true,PId);
        if not terminateprocess(Proch,PId) then
            showmessage('Impossible d''arrete '+Listbox1.items[Listbox1.itemindex])
        else
        begin
          Listbox1.Clear;
          Listbox1.Items:=GetProcessList();
        end;
        Closehandle(Proch);
    end;
    Merci de votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    Par défaut
    Et pas de message particulier ?

  3. #3
    rbh
    rbh est déconnecté
    Membre chevronné Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 384
    Par défaut
    Salut
    C'est vrai qu'avec le message ce serait plus facile.
    Par contre, si tu as mis tout le code de ton unité à part ce qui est contenu dans le "[...]" au début de ton code, il manque l'implémentation de cette procédure.
    Si tu ne veux rien faire au click sur la listbox, tu peux supprimer cette ligne. Sinon il faut que tu écrives l'implémentation de cette fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Procedure TForm3.ListBox1Click(Sender: TObject);
    begin
    ...
    end;

  4. #4
    Membre confirmé Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    Merci de vos reponses ;
    si il y a un message particulier :
    "Déclaration forward ou external non satisfaite: 'TFrom3.ListBox1Click'"
    PS : désolé je commence le delphi

  5. #5
    Membre éclairé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Par défaut
    Salut
    Citation Envoyé par bionicleman
    si il y a un message particulier :
    "Déclaration forward ou external non satisfaite: 'TFrom3.ListBox1Click'"
    Logique !
    Tu déclares la procedure ListBox1Click dans l'interface de ta form, mais la procédure est absente de l'implémentation (apparemment)
    En supprimant la déclaration de l'interface, ça devrait régler le pb

    Bonne prog

  6. #6
    Membre confirmé Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    héhé j'ai déjà esseyé
    Ca marche sauf que après je ne vois pas les applications que doit écrire dans laListBox du programme

  7. #7
    Membre éclairé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Par défaut
    Citation Envoyé par bionicleman
    Ca marche sauf que après je ne vois pas les applications que doit écrire dans laListBox du programme
    Pourrais-tu être + clair ?

  8. #8
    Membre confirmé Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    Ok
    Mon programme doit pouvoir montrer les applications en cous sur Windows;
    On pourra les voirent dans la LisBox ET en cliquant dessu en selectionner une et en double cliquant dessu la fermer.
    Assez clair comme ca?

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 88
    Par défaut
    Tu peux montrer TOUT le code ?

  10. #10
    Membre éclairé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Par défaut
    Si j'ai bien compris, la listbox reste vide ? aucun item ?
    Dans ce cas, regarde plutôt le code qui est sensé alimenter la lite d'items

    SINON :

    1) Si tu dois écrire du code dans l'événement TForm3.ListBox1Click, doubleclique sur l'événement en question dans le gestionnaire d'objet, onglet Evénements, ligne OnClick, colonne de droite...
    L'éditeur de texte se branche auto sur la procédure à créer.

    2) Si le code est déjà écrit, utilise la liste déroulante (même endroit) pour sélectionner la procédure

    Je ne sais pas si je réponds à ta question

  11. #11
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    ta fiche (.dfm) n'est peut être pas en phase avec ton source (.pas).
    Sinon regarde dans les sources Delphi si un programme de ce type existe...

  12. #12
    Membre confirmé Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    Ok voila tout le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    unit Unit3;
     
    interface
     
    uses
      Windows, Messages, SysUtils,  Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,tlhelp32;
     
    type
      TForm3 = class(TForm)
        ListBox1: TListBox;
        Label1: TLabel;
        procedure ListBox1Click(Sender: TObject);
        procedure FormActivate(Sender: TObject);
        procedure ListBox1DblClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
    var
      Form3: TForm3;
     
    implementation
     
    {$R *.dfm}
     
     
    function UpString(Str: string): string;
    var i: integer;
    begin
      result:='';
      for i:=1 to length(str) do
        result:=result+UpCase(str[i]);
    end;
     
     
    //fonction qui retourne l'id d'un process fournit en parametre
    function GetProcessId(ProgName:string):cardinal;
    var  Snaph:thandle;
         Proc:tprocessentry32;
         PId:cardinal;
    begin
      PId:=0;
      Proc.dwSize:=sizeof(Proc);
      Snaph:=createtoolhelp32snapshot(TH32CS_SNAPALL,0);  //recupere un capture de process
      process32first(Snaph,Proc);  //premeir process de la list
      if UpString(extractfilename(Proc.szExeFile))=UpString(ProgName) then  //test pour savoir si le process correspond
         PId:=Proc.th32ProcessID // recupere l'id du process
      else
        begin
          while process32next(Snaph,Proc) do  //dans le cas contraire du test on continue à cherche le process en question
            begin
               if extractfilename(Proc.szExeFile)=ProgName then
                  PId:=Proc.th32ProcessID;
            end;
       end;
      Closehandle(Snaph);
      result:=PId;
    end;
    //fonction qui marche comme GetProcessId, sauf que la elle retourne une liste de process
     
    function GetProcessList():TStringList;
    var  Snaph:thandle;
         Proc:tprocessentry32;
         PList:TStringList;
    begin
      PList:= TStringList.Create();
      PList.Clear;
      Proc.dwSize:=sizeof(Proc);
      Snaph:=createtoolhelp32snapshot(TH32CS_SNAPALL,0);
      process32first(Snaph,Proc);
      PList.Add(extractfilename(proc.szExeFile));
      while process32next(Snaph,Proc) do
          PList.Add(extractfilename(Proc.szExeFile));
      result:=PList;
      Closehandle(Snaph);
    end;
     
    procedure TForm3.FormActivate(Sender: TObject);
    var TSL : TStringList;
    begin
      Listbox1.Clear;
      TSL := GetProcessList;
      Try Listbox1.Items.Assign(TSL);
      Finally
        TSL.Free;
      end;
    end ;
     
    procedure TForm3.ListBox1DblClick(Sender: TObject);
    var  Proch:thandle;
         PId:cardinal;
    begin
        PId:=GetProcessId(Listbox1.items[Listbox1.itemindex]);
        Proch:=openprocess(PROCESS_ALL_ACCESS ,true,PId); //handel du process
        if not terminateprocess(Proch,PId) then  //terminer le process
            showmessage('Impossible d''arrete '+Listbox1.items[Listbox1.itemindex])
        else
        begin
          Listbox1.Clear;
          Listbox1.Items:=GetProcessList();
        end;
        Closehandle(Proch);
    end;
    end.
    Oui la ListBox est vide malgres ce code a mon avis bon...

  13. #13
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut,

    Comme l'avais imaginé OutOfRange ta procédure ListBox1Click n'est pas implémentée (absente de la partie implémentation, mais déclarée dans la partie Interface). D'où ton erreur de compilation.

    Supprime la déclaration ListBox1Click de la partie Interface, et compile. Tu devrais ne plus avoir d'erreur.

    Ensuite depuis l'IDE fais un double-clic sur l'évènement OnClick du ListBox1 et implemente la procédure.
    Je suppose que tu dois renseigner la liste des processus existants, car pour l'instant la liste reste vide car à aucun endroit tu ne la renseignes.

    @+ Bon dev

  14. #14
    Membre confirmé Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    Merci a tous , merci de toutes vos reponces
    je suis allé cherché un peu partout puis j'ai trouvé une source et, effectivement il y avait un probleme dans la source qui me servait de base
    Je vais esseyé la nouvelle source et je vous tien au courant

  15. #15
    Membre confirmé Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut

    Oh OUI!!!!
    C'est bon c'est génial le code est bon ca marche comme je le veux ;
    Merci a tous

  16. #16
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Tant de joie fait plaisir à lire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme dans listbox
    Par sanfour_walhan dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 24/12/2006, 18h18
  2. [VB.NET]probleme avec listbox.selectedvalue
    Par elastoplas dans le forum ASP.NET
    Réponses: 9
    Dernier message: 07/11/2006, 14h13
  3. [Pl/SQL]Probleme Procedure stockee[/Pl/SQL]
    Par rafounette dans le forum Oracle
    Réponses: 4
    Dernier message: 14/06/2006, 12h56
  4. probleme procedure stockée avec Mysql
    Par emna_bz dans le forum Installation
    Réponses: 2
    Dernier message: 01/02/2006, 16h26
  5. [interbase6]probleme procedure stockee
    Par macadam314 dans le forum InterBase
    Réponses: 6
    Dernier message: 13/02/2005, 12h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo