Probleme pour copier le contenue d'une listbox dans le press-papier windows.
maxoudu328
Messages postés52Date d'inscriptionmercredi 24 novembre 2004StatutMembreDernière intervention17 mai 2007
-
14 oct. 2005 à 21:50
barsaoui_ses
Messages postés3Date d'inscriptionsamedi 10 février 2007StatutMembreDernière intervention27 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 :
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 :)
maxoudu328
Messages postés52Date d'inscriptionmercredi 24 novembre 2004StatutMembreDernière intervention17 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 :).
maxoudu328
Messages postés52Date d'inscriptionmercredi 24 novembre 2004StatutMembreDernière intervention17 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
bv94
Messages postés40Date d'inscriptiondimanche 2 février 2003StatutMembreDernière intervention16 décembre 20061 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 ?
barsaoui_ses
Messages postés3Date d'inscriptionsamedi 10 février 2007StatutMembreDernière intervention27 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 :
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::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;