Probleme pour copier le contenue d'une listbox dans le press-papier windows.

maxoudu328 Messages postés 52 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 17 mai 2007 - 14 oct. 2005 à 21:50
barsaoui_ses Messages postés 3 Date d'inscription samedi 10 février 2007 Statut Membre Dernière intervention 27 avril 2007 - 27 avril 2007 à 00:24
Bonjour,

Voila cela fait deux jour que je me suis lance dans le delphi et plus generalement dans la programmation desktop, hier je créer ma premiere calculatrice et pour me simplifier la vie lorsque j'aide un amie a sans-cesse netoyer son pc j'ai voulue confectionner une ptite boite a outil qui me donnerait plusieur info sur osn pc aux moment ou il y a le probleme...

Pour l'instant j'arrive a afficher son IP (bah oui il a une ip dynamique alor quand j'ai besoin de le savoir ... ) et le plus important a mon gout les processus actif sur son pc (la source de souvent bien des lag) mais pour encor plus de simplicité je voudais que en 1 clic le contenue d'une listbox ce copie dans le presse-papier windows pour qu'il n'est plus qu'a me le copie par msn ou autre.

Mais voila c'est processus ne sont pas une simple ligne de carractere avec des saut de ligne mais plusieur ligne qui mon l'air independante, enfin bref je V vous colle ma source ca sera surment plus clair :

-------------------------------------------------

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Tlhelp32,
StdCtrls, ExtCtrls, winsock;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label3: TLabel;
ListBox1: TListBox;
Button2: TButton;


Function checkIP(HWSADataErr:Pchar;HIPAddress:Pchar):boolean;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

Type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;

var
Form1: TForm1;

implementation

{$R *.DFM}

Function TForm1.checkIP(HWSADataErr:Pchar;HIPAddress:Pchar):boolean;
var
HHostEnt : PHostEnt;
HPaPinAddr : PaPInAddr;
HName : array [0..255] of char;
I : Integer;
HWSAData : TWSADATA;
SIPAddress : ShortString;
begin

Result := false;

if WSAStartup($0101, HWSAData) <> 0 then begin
case WSAGetLastError of
WSASYSNOTREADY : HWSADataErr:=pchar('Indicates that the underlying network '+
'subsystem is not ready for network communication.');
WSAVERNOTSUPPORTED : HWSADataErr:=pchar('The version of Windows Sockets support '+
'requested is not provided by this particular '+
'Windows Sockets implementation.');
WSAEINPROGRESS : HWSADataErr:=pchar('A blocking Windows Sockets 1.1 operation is '+
'in progress.');
WSAEPROCLIM : HWSADataErr:=pchar('Limit on the number of tasks supported by '+
'the Windows Sockets implementation has been reached.');
WSAEFAULT : HWSADataErr:=pchar('The lpWSAData is not a valid pointer.');
end;
Exit;
end;

if GetHostName(@HName, SizeOf(HName)) = 0 then begin
HHostEnt :=GetHostByName(@HName);
if HHostEnt <> nil then begin

// IP Internet
HPaPinAddr := PaPInAddr(HHostEnt^.h_addr_list);
I := 0;
while HPaPinAddr^[I] <> nil do begin
SIPAddress:=StrPas(inet_ntoa(HPaPinAddr^[I]^));
Inc(I);
end;

StrLcopy(HIPAddress,@SIPAddress[1],length(SIPAddress));
Result:=true;
///////
{
// IP PC Local
SIPAddress:='';
for i:=0 to HHostEnt^.h_length - 1 do
SIPAddress:=SIPAddress + IntToStr(ord(HHostEnt^.h_addr_list^[i])) + '.';

StrLcopy(HIPAddress,@SIPAddress[1],length(SIPAddress)-1); // on supprime le dernier '.'
Result:=true;
//////
}
end
else begin
case WSAGetLastError of
WSANOTINITIALISED : HWSADataErr:=pchar('A successful WSAStartup must occur before '+
'using this function.');
WSAENETDOWN : HWSADataErr:=pchar('The network subsystem has failed.');
WSAHOST_NOT_FOUND : HWSADataErr:=pchar('Authoritative Answer Host not found.');
WSATRY_AGAIN : HWSADataErr:=pchar('Non-Authoritative Host not found, or server failure.');
WSANO_RECOVERY : HWSADataErr:=pchar('Nonrecoverable error occurred.');
WSANO_DATA : HWSADataErr:=pchar('Valid name, no data record of requested type.');
WSAEINPROGRESS : HWSADataErr:=pchar('A blocking Windows Sockets 1.1 call is in '+
'progress, or the service provider is still '+
'processing a callback function.');
WSAEFAULT : HWSADataErr:=pchar('The name argument is not a valid part of '+
'the user address space.');
WSAEINTR : HWSADataErr:=pchar('The (blocking) call was canceled through '+
'WSACancelBlockingCall.');
end;
end;
end
else begin
case WSAGetLastError of
WSAEFAULT : HWSADataErr:=pchar('The name argument is not a valid part of the '+
'user address space, or the buffer size specified '+
'by namelen argument is too small to hold the '+
'complete host name.');
WSANOTINITIALISED : HWSADataErr:=pchar('A successful WSAStartup must occur before '+
'using this function.');
WSAENETDOWN : HWSADataErr:=pchar('The network subsystem has failed.');
WSAEINPROGRESS : HWSADataErr:=pchar('A blocking Windows Sockets 1.1 call is '+
'in progress, or the service provider is '+
'still processing a callback function.');
end;
end;

WSACleanup;
end;




procedure TForm1.Button1Click(Sender: TObject);
var
MyError,
MyIPAddress : array[0..255] of char;
begin
if checkIP(@MyError,@MyIPAddress) then label1.caption:=string(MyIpAddress)
else label1.caption:=string(MyError);
end;






procedure TForm1.Button2Click(Sender: TObject);
var
LPPE : TProcessEntry32;
H : Thandle;
begin

Listbox1.Clear;
h:=CreateToolhelp32Snapshot(TH32CS_SNAPALL ,0);
Lppe.DwSize:=Sizeof(TProcessEntry32);
if Process32First(h,lppe)
then
Begin;
listbox1.items.add(LPPE.szexefile);
while Process32next(h,lppe) do
begin
listbox1.items.add(LPPE.szexefile);
end;

End;
Closehandle(h);
end;
end.



------------------------------------------------

Bon je vous avoue que je n'est pas tous code de A à Z, je n'est pas c'est certain les connaissance nessaicaire (deux jour d'aprentisage faut avouer que c'est peut :) ) j'ai utiliser plusieur sources en les modifiant pour les adapter a mes besoins.

Je veut bien presiser que tous fonctionne a 100% et que je ne post pas pour une malfonctionnement mais parceque je ne sait pas comment copie le contenue de la listbox dans le press-papier windows.

Je vous passe donc la main et vous demande de porter un minimum d'interet a mon probleme qui est peu etre trés simple mais qui pour moi plus vite sera regle mieu ca sera :)

Cordialement, Max.

28 réponses

bv94 Messages postés 40 Date d'inscription dimanche 2 février 2003 Statut Membre Dernière intervention 16 décembre 2006 1
16 oct. 2005 à 09:57
Voila...
Mea culpa.

BV94
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
16 oct. 2005 à 10:33
-->BV94

c'est pas grave ça arrive souvent quand on poste et même aux meilleurs
0
maxoudu328 Messages postés 52 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 17 mai 2007
16 oct. 2005 à 10:49
Bon voila, BBV94 j'ai due un eu changer ton code pour ne pas avoir d'erreur ce qui donne maintenant :

procedure TForm1.Button2Click(Sender: TObject);
var
Hdl: HWND;
entry : PROCESSENTRY32;
ID : cardinal;
ListAjout : TListItem;
begin
{ Listbox1.Clear; }
hdl := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
entry.dwSize := sizeof(entry);
ListAjout := ListView1.Items.Add;
if Process32First(hdl,entry) then
Begin;
with listview1 do
Begin
ListAjout.Caption := (entry.szExeFile);
ListAjout.SubItems.Add(inttostr(entry.th32ProcessID));
{ Listbox1.items.add(LPPE.szexefile); } // ajouter a une Tlistbox
while Process32next(hdl,entry) do
begin
ListAjout.Caption := (entry.szExeFile);
{listbox1.items.add(LPPE.szexefile);} // ajouter a une Tlistbox
with Form1.ListView1.Items do
begin
ListAjout.Caption := (entry.szExeFile);
ListAjout.subitems.add(inttostr(entry.th32ProcessID));
end;
application.ProcessMessages;
end;



End;
Closehandle(hdl);
end;
end;

J'arrive donc a avoir 1 processus et un PID 0 dans leur collone respective | Processus | PID | pour moi c'est deja un avancement mais bon je pence qu'il faudrais une boucle pour tous les afficher, une while surment mais je vois pas comment la fair...

A oui, ton : Edit1.text := ListView1.Items.Add.subitems.strings[0]; dans l'evenement OnChange du Tlistview provoque un plantage lorsque j'essai d'actualiser les proc, j'ai penser au edit1.text mais j'en est 1 qui existe et ou son afficher une sorte d'aide lorsque l'on clic sur un des bouton ... donc voila si je pouvai aussi savoir a quoi elle sert cette ligne ca serait cool, alle encor merci et ben j'espere que vous pourez m'aider pour la boucle parceque la serieux vous m'avez bien fait avancé et je vous en suit trés reconnaissan, voila pour une fois un forum ou les demande d'aide sont les bienvenus et ou le savoir et partage librement et pas selement au sein d'une communaute comme c'est souvent le cas :).

Cordialement, Max
0
maxoudu328 Messages postés 52 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 17 mai 2007
16 oct. 2005 à 12:16
Esque cela pourait m'aider :

for i := 0 to B-1 do
begin
if i> ListView1.Items.Count -1 then ListView1.Items.Add ;
ListView1.Items[i].ImageIndex := A[i].TypeM ;
ListView1.Items[i].Caption := Format ('%.5d',[i]);
tmpstr := '"'+A[i].nom + '",'+
Format ('"%5d",',[A[i].ID])+
Format ('"%5d",,,',[A[i].ParentID])+
Format ('"%5d",',[A[i].NbModules])+
Format ('"%5d",,,',[A[i].NbThreads])+
'"'+A[i].Priorite +'"';


ListView1.Items[i].SubItems.CommaText := tmpstr;
end; //i
Cordialement, Max
0

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

Posez votre question
bv94 Messages postés 40 Date d'inscription dimanche 2 février 2003 Statut Membre Dernière intervention 16 décembre 2006 1
17 oct. 2005 à 20:58
jlen100,
merci, ca me rassure

maxoudu,
la boucle while est dans le code que je t'ai donné...
Mais je fais peut être une rreur... Encore une fois, je n'ai pas testé ce bout de code
La boucle que tu proposes est bien jolie, mais que represente A,B ?
Poste la totalité de la procedure que tu as trouvée, que l'on voit la structure du type A, et comment il est renseigné. Non ?

BV94
0
barsaoui_ses Messages postés 3 Date d'inscription samedi 10 février 2007 Statut Membre Dernière intervention 27 avril 2007
26 avril 2007 à 23:55
j'ai un grand probléme pour l'affichage du contenue binaire ou hexa decimal de mon buffeur,
 avec le c++ builder 
SVP aider moi
0
barsaoui_ses Messages postés 3 Date d'inscription samedi 10 février 2007 Statut Membre Dernière intervention 27 avril 2007
27 avril 2007 à 00:20
De nos jours les stations de télédiffusion sont de plus en plus numérisées.


<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>








En effet les signaux sont transformés en une suite de 0 et de 1 ce qui augmente la qualité de la transmission et facilite le traitement des données en provenance des serveurs et  des VTR.


  








Nous avons donc  cherché à traiter une  application  qui s’intègrerait dans le cadre de la numérisation des stations de télédiffusion et de leur modernisation.










 







Par conséquent,   ce projet vise à concevoir un logiciel qui  servira comme  interface utilisateur  destiné à commander à distance des magnétoscopes béta connus sous le nom de VTR (video tape recorder)

a partir de n’importe quel PC connecté au réseau de l’entreprise.






 








Semblable à la commande du VTR, cette  interface sera réalisée avec le logiciel C++ BUILDER 5.0 et elle sera programmée en C++, pour nous permettre de transmettre et de recevoir des codes Hexa sur les ports série ou bien les ports parallèles du PC et du VTR.










 







Les communications entre le PC et le VTR sont éditées par le protocole VDCP (vidéo disc control Protocol)










 






Cet outil logiciel BORLAND, basé sur le concept de programmation orientée objet, permet à un développeur, même non expérimenté, de créer assez facilement une interface homme/machine d'aspect « WINDOWS ».





Le programme n’est pas exécuté de façon séquentielle comme dans un environnement classique.





Il s’agit de programmation « événementielle », des séquences de programme sont exécutées, suite à des actions de l’utilisateur (clique, touche enfoncée etc…), détectées par WINDOWS.






 






Ce Projet, conçu dans un esprit d’autoformation, permet de s’initier à l’outil, en maîtrisant, en particulier, quelques aspects généraux des problèmes informatiques, à savoir :





- La saisie de données,





- Le traitement,





- La restitution,





- la Transmission de donnés sur le port série,





- la Réception de donnes sur le port série.
0
barsaoui_ses Messages postés 3 Date d'inscription samedi 10 février 2007 Statut Membre Dernière intervention 27 avril 2007
27 avril 2007 à 00:24
//---------------------------------------------------------------------------


#include <vcl.h>
#pragma hdrstop


#include "BarsaouiRemoteVTR.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CPort"
#pragma link "CPortCtl"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
  ComPort1->Connected=true; //Ouverture du port (prêt à communiquer)


  ComPort1->SetRTS(true); //Mise à +15V de RTS
    ComPort1->SetRTS(false); //Mise à -15V de RTS




    
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button2Click(TObject *Sender)
{
  unsigned int tableau[1] = {0x2020};  // rewind
 ComPort1->Write(tableau, 1); //Ecrit 1 octets de "tableau" sur le port


 ComPort1->SetDTR(true); //Mise à +15V de DTR
    ComPort1->SetDTR(false); //Mise à -15V de DTR
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button3Click(TObject *Sender)
{
   unsigned int tableau[1] = {0x2001}; // play
 ComPort1->Write(tableau, 1); //Ecrit 1 octets de "tableau" sur le port série


}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button4Click(TObject *Sender)
{
 unsigned int tableau[1] = {0x200020}; //stop
 ComPort1->Write(tableau, 1); //Ecrit 1 octets de "tableau" sur le port série
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button5Click(TObject *Sender)
{
    unsigned int tableau[1] = {0x2005}; // stand bay on
 ComPort1->Write(tableau, 1); //Ecrit 1 octets de "tableau" sur le port série
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button6Click(TObject *Sender)
{
 unsigned int tableau[1] = {0x2002}; // rec
 ComPort1->Write(tableau, 1); //Ecrit 1 octets de "tableau" sur le port série
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button7Click(TObject *Sender)
{
    unsigned int tableau[1] = {0x2010}; // fast foward
 ComPort1->Write(tableau, 1); //Ecrit 1 octets de "tableau" sur le port série
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button8Click(TObject *Sender)
{
unsigned int tableau[1] = {0x200F}; // Eject
 ComPort1->Write(tableau, 1); //Ecrit 1 octets de "tableau" sur le port série
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button9Click(TObject *Sender)
{
 ComPort1->Connected=false; //Fermeture du port (arrêt des communications)      
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComPort1CTSChange(TObject *Sender, bool OnOff)
{
    if (OnOff == true)         Button1->Caption "État haut sur CTS"; //État haut +15V        
    else         Button1->Caption "État bas sur CTS"; //Etats bas -15V        


}
//---------------------------------------------------------------------------


void __fastcall TForm1::ComPort1DSRChange(TObject *Sender, bool OnOff)
{
   if (OnOff == true)         Button1->Caption "État haut sur DSR"; //État haut +15V
    else         Button1->Caption "État bas sur DSR"; //Etats bas -15V        


}
//---------------------------------------------------------------------------


void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int Count)
{
 unsigned char *Buf = new unsigned char [Count];
    ComPort1->Read(Buf, Count);
    //Lit "Count" octet(s) présent(s) dans le buffer d'entrée et le(s) place dans "Buf"
    delete [] Buf;
    Buf = NULL;


}
//---------------------------------------------------------------------------


void __fastcall TForm1::ComPort1RxBuf(TObject *Sender,
      const Variant Buffer, int Count)
{
 unsigned int *Buf = new unsigned int [Count];
    ComPort1->Read(Buf, Count);
    //Lit "Count" octet(s) présent(s) dans le buffer d'entrée et le(s) place dans "Buf"
    delete [] Buf;
    Buf = NULL;


}
//---------------------------------------------------------------------------


 
0
Rejoignez-nous