Accueil > > > FACEBOOK API POUR DELPHI
FACEBOOK API POUR DELPHI
Information sur la source
Description
Ce Code n'est pas de moi, je l'ai trouver dans un forum d'embarcadero à l'adresse : https://forums.embarcadero.com/message.jspa?messag eID=219789 Je commence à programmer un composant OpenSource pour ce connecter sur FaceBook. Tout le monde qui est intéressé, Venez sur mon site à l'adresse http://gcsoft.herobo.com/ PS: Cette source Utilise NativeXml et Graphics32
Source
- ////////////////////////////////////////////////////////////////////////////////
- // Fichier: UFaceBook.pas
- // SiteWeb: https://forums.embarcadero.com/message.jspa?messageID=219789
- ////////////////////////////////////////////////////////////////////////////////
-
- {
- Ce Code n'est pas de moi, je l'ai trouver dans un forum d'embarcadero
- à l'adresse : https://forums.embarcadero.com/message.jspa?messageID=219789
-
- Je commence à programmer un composant OpenSource pour ce connecter sur
- FaceBook. Tout le monde qui est intéressé, Venez sur mon site à l'adresse
- http://gcsoft.herobo.com/
-
- PS: Cette source Utilise NativeXml et Graphics32
- }
-
- Unit UFaceBook;
-
- INTERFACE
-
- Uses
- Classes, IdHash, IdHashMessageDigest, NativeXml, SysUtils,
- IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP;
-
- const
- RESTURL = 'http://api.new.facebook.com/restserver.php';
-
- Type
- ////////////////////////////////////////
- // Classe FaceBook
- TFaceBook = Class
- private
- IdHTTP1: TIdHTTP;
- FAPikey:String;
- FSecretkey:String;
-
- FToken:String;
- Fsessionkey:String;
- Fuserid:String;
-
- function md5( Plaintext: string): string;
- function Signa(L:TStringlist;SECRET_KEY:String):String;
- function GetvalueFromXml(response:String;key:String):String;
- function _FindFirstTag(xmlDoc:TNativeXML;elem:TXmlNode;const key: String): TXmlNode;
-
- public
- function Login(api_key,secret_key:String):String;
- procedure GetSession();
- procedure GetAlbums(LAlbums:TList);
- procedure GetFotos(albumid:String;Lfotos:TList);
- function GetFriends():String;
-
- constructor create;
- destructor destroy;override;
- property Token:String read FToken;
- property userid:String read Fuserid;
- property sessionkey:String read Fsessionkey;
- end;
-
- IMPLEMENTATION
-
- uses UAlbums, ufoto;
-
- ////////////////////////////////////////
- // Procedure Get Fotos From XML
- Procedure GetFotosFromXML(response:String;L:TList);
- var
- xmlDoc:TNativeXml;
- elem,elem2:TXmlNode;
- L2:TList;
- foto:TFoto_FB;
- i:Integer;
- begin
- xmlDoc := TNativeXML.Create;
- xmldoc.ReadFromString(response);
- try
- elem:=xmldoc.root;
- L2:=TList.create;
- elem.FindNodes('photo',L2);
- for i := 0 to L2.Count - 1 do begin
- elem2:=L2[i];
- foto:=TFoto_FB.create(elem2.NodeByName('pid').ValueAsWidestring);
- foto.src_small:=elem2.NodeByName('src_small').ValueAsWidestring;
- foto.src_big:=elem2.NodeByName('src_big').ValueAsWidestring;
- L.Add(foto);
- end;
- finally
- xmldoc.free;
- end;
- end;
-
- ////////////////////////////////////////
- // Procedure Get Albums From XML
- procedure GetAlbumsFromXML(response:String;L:TList);
- var
- xmlDoc:TNativeXml;
- elem,elem2:TXmlNode;
- L2:TList;
- album:TAlbum;
- i:Integer;
- begin
- xmlDoc := TNativeXML.Create;
- xmldoc.ReadFromString(response);
- try
- elem:=xmldoc.root;
- L2:=TList.create;
- elem.FindNodes('album',L2);
- for i := 0 to L2.Count - 1 do begin
- elem2:=L2[i];
- album:=TAlbum.create(elem2.NodeByName('aid').ValueAsWidestring);
- album.name:=elem2.NodeByName('name').ValueAsWidestring;
- L.Add(album);
- end;
- finally
- xmldoc.free;
- end;
- end;
-
- ////////////////////////////////////////
- // Destructeur
- destructor TFaceBook.destroy;
- begin
- idhttp1.Free;
- inherited;
- end;
-
- ////////////////////////////////////////
- // Constructeur
- constructor TFaceBook.create;
- begin
- inherited;
- FToken:='';
- Fsessionkey:='';
- Fuserid:='';
- IdHTTP1:=TIdHTTP.Create(nil);
- end;
-
- ////////////////////////////////////////
- // Fonction Find First Tag
- function TFaceBook._FindFirstTag(xmlDoc:TNativeXML;elem:TXmlNode;const key: String): TXmlNode;
- var b:Boolean ;
- begin
- if (elem.Name=key) then begin
- result:=elem;
- exit;
- end;
-
- if (elem.NodeCount>0) then Result:=elem.Nodes[0]
- else Result:=nil;
-
- b := false;
- while (not b) and (result<>nil) do begin
- b := UpperCase(result.name) = UpperCase(key);
- if not b then begin
- if (result.IndexInParent<result.Parent.NodeCount-1) then
- Result:=result.Parent.Nodes[result.IndexInParent+1]
- else Result := nil;
- end;
- end;
-
- if not b then result := nil;
- end;
-
- ////////////////////////////////////////
- // Fonction Get Value from XML
- function TFaceBook.GetvalueFromXml(response:String;key:String):String;
- var
- xmlDoc:TNativeXml;
- elem,elem2:TXmlNode;
- begin
- result:='';
- xmlDoc := TNativeXML.Create;
- xmldoc.ReadFromString(response);
- try
- elem:=xmldoc.root;
- if (elem<>nil) then begin
- elem2:=_FindFirstTag(xmldoc,elem,key);
- if (elem2<>nil) then result:=elem2.ValueAsWidestring;
- end;
- finally
- xmldoc.free;
- end;
- end;
-
- ////////////////////////////////////////
- // Fonction MD5
- function TFaceBook.md5( Plaintext: string): string;
- var FHash : TIdHashMessageDigest5;
- begin
- FHash := TIdHashMessageDigest5.Create;
- result := lowercase(FHash.HashStringAsHex(Plaintext));
- Fhash.free;
- end;
-
- ////////////////////////////////////////
- // Fonction Signa
- function TfaceBook.Signa(L:TStringlist;SECRET_KEY:String):String;
- var
- i:Integer;
- str:String;
- begin
- //keysort
- result:='';
- str:='';
- for i := 0 to L.Count - 1 do begin
- str:=L[i];
- result:=result+str;
- end;
-
- result:=md5(result+secret_key);
- end;
-
- ////////////////////////////////////////
- // Fonction Login
- function TFacebook.Login(api_key,secret_key:String):String;
- function Paramsrequest(L:TStringlist):String;
- var i:Integer;
- begin
- result:='';
- for i := 0 to L.Count - 1 do begin
- if (i>0) then result:=result+'&';
- result:=result+L[i];
- end;
- end;
- var
- L:TStringlist;
- response:String;
- str:String;
- begin
- self.FAPikey:=api_key;
- self.FSecretkey:=secret_key;
-
- L:=TStringlist.Create;
- try
- L.Add('api_key='+API_KEY);
- L.Add('method=auth.createToken');
- L.Add('v=1.0');
- L.Add('sig='+Signa(L,SECRET_KEY));
- response:=IdHTTP1.Post(RESTURL,L);
- finally
- L.Free;
- end;
-
- FToken:=GetvalueFromXml(response,'auth_createToken_response');
-
- L:=TStringlist.Create;
- L.Add('return_session=0');
- L.Add('api_key='+API_KEY);
- L.Add('auth_token='+FToken);
- result:='http://login.facebook.com/login.php?'+Paramsrequest(L);
- L.Free;
- end;
-
- ////////////////////////////////////////
- // Procedure Get Session
- procedure TFaceBook.GetSession();
- var
- L:TStringlist;
- L2:TStringList;
- str:String;
- response:String;
- begin
- L:=TStringlist.Create;
- try
- L.Add('api_key='+FAPIKEY);
- L.Add('auth_token='+token);
- // L.Add('generate_session_secret=0');
- L.Add('method=auth.getSession');
- L.Add('v=1.0');
- L.Add('sig='+Signa(L,FSECRETKEY));
- response:=IdHTTP1.Post(RESTURL,L);
- finally
- L.Free;
- end;
-
- Fsessionkey:=GetvalueFromXml(response,'session_key');
- Fuserid:=GetvalueFromXml(response,'uid');
- end;
-
- ////////////////////////////////////////
- // Procedure Get Albums
- procedure TFaceBook.GetAlbums(LAlbums:TList);
- var
- L:TStringlist;
- L2:TStringList;
- str:String;
- response:String;
- begin
- if (FSessionkey='') then GetSession();
-
- L:=TStringlist.Create;
- try
- L.Add('api_key='+FAPIKEY);
- L.Add('call_id=1');
- L.Add('method=Photos.getAlbums');
- L.Add('session_key='+sessionkey);
- L.Add('uid='+userid);
- L.Add('v=1.0');
- L.Add('sig='+Signa(L,FSECRETKEY));
- response:=IdHTTP1.Post(RESTURL,L);
- finally
- L.Free;
- end;
-
- GetAlbumsFromXML(response,LAlbums);
- end;
-
- ////////////////////////////////////////
- // Fonction Get Friends
- function TFaceBook.GetFriends():String;
- var
- L:TStringlist;
- L2:TStringList;
- str:String;
- response:String;
- begin
- if (FSessionkey='') then GetSession();
-
- L:=TStringlist.Create;
- try
- L.Add('api_key='+FAPIKEY);
- L.Add('call_id=1');
- L.Add('method=Friends.get');
- L.Add('session_key='+sessionkey);
- L.Add('v=1.0');
- L.Add('sig='+Signa(L,FSECRETKEY));
- result:=IdHTTP1.Post(RESTURL,L);
- finally
- L.Free;
- end;
- end;
-
- ////////////////////////////////////////
- // procedure Get fotos
- procedure TFaceBook.GetFotos(albumid:String;Lfotos:TList);
- var
- L:TStringlist;
- str:String;
- response:String;
- begin
- if (FSessionkey='') then GetSession();
-
- L:=TStringlist.Create;
- try
- L.Add('aid='+albumid);
- L.Add('api_key='+FAPIKEY);
- L.Add('call_id=1');
- L.Add('method=Photos.get');
- L.Add('session_key='+sessionkey);
- L.Add('v=1.0');
- L.Add('sig='+Signa(L,FSECRETKEY));
- response:=IdHTTP1.Post(RESTURL,L);
- finally
- L.Free;
- end;
-
- GetfotosFromXML(response,Lfotos);
- end;
-
- end.
////////////////////////////////////////////////////////////////////////////////
// Fichier: UFaceBook.pas
// SiteWeb: https://forums.embarcadero.com/message.jspa?messageID=219789
////////////////////////////////////////////////////////////////////////////////
{
Ce Code n'est pas de moi, je l'ai trouver dans un forum d'embarcadero
à l'adresse : https://forums.embarcadero.com/message.jspa?messageID=219789
Je commence à programmer un composant OpenSource pour ce connecter sur
FaceBook. Tout le monde qui est intéressé, Venez sur mon site à l'adresse
http://gcsoft.herobo.com/
PS: Cette source Utilise NativeXml et Graphics32
}
Unit UFaceBook;
INTERFACE
Uses
Classes, IdHash, IdHashMessageDigest, NativeXml, SysUtils,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP;
const
RESTURL = 'http://api.new.facebook.com/restserver.php';
Type
////////////////////////////////////////
// Classe FaceBook
TFaceBook = Class
private
IdHTTP1: TIdHTTP;
FAPikey:String;
FSecretkey:String;
FToken:String;
Fsessionkey:String;
Fuserid:String;
function md5( Plaintext: string): string;
function Signa(L:TStringlist;SECRET_KEY:String):String;
function GetvalueFromXml(response:String;key:String):String;
function _FindFirstTag(xmlDoc:TNativeXML;elem:TXmlNode;const key: String): TXmlNode;
public
function Login(api_key,secret_key:String):String;
procedure GetSession();
procedure GetAlbums(LAlbums:TList);
procedure GetFotos(albumid:String;Lfotos:TList);
function GetFriends():String;
constructor create;
destructor destroy;override;
property Token:String read FToken;
property userid:String read Fuserid;
property sessionkey:String read Fsessionkey;
end;
IMPLEMENTATION
uses UAlbums, ufoto;
////////////////////////////////////////
// Procedure Get Fotos From XML
Procedure GetFotosFromXML(response:String;L:TList);
var
xmlDoc:TNativeXml;
elem,elem2:TXmlNode;
L2:TList;
foto:TFoto_FB;
i:Integer;
begin
xmlDoc := TNativeXML.Create;
xmldoc.ReadFromString(response);
try
elem:=xmldoc.root;
L2:=TList.create;
elem.FindNodes('photo',L2);
for i := 0 to L2.Count - 1 do begin
elem2:=L2[i];
foto:=TFoto_FB.create(elem2.NodeByName('pid').ValueAsWidestring);
foto.src_small:=elem2.NodeByName('src_small').ValueAsWidestring;
foto.src_big:=elem2.NodeByName('src_big').ValueAsWidestring;
L.Add(foto);
end;
finally
xmldoc.free;
end;
end;
////////////////////////////////////////
// Procedure Get Albums From XML
procedure GetAlbumsFromXML(response:String;L:TList);
var
xmlDoc:TNativeXml;
elem,elem2:TXmlNode;
L2:TList;
album:TAlbum;
i:Integer;
begin
xmlDoc := TNativeXML.Create;
xmldoc.ReadFromString(response);
try
elem:=xmldoc.root;
L2:=TList.create;
elem.FindNodes('album',L2);
for i := 0 to L2.Count - 1 do begin
elem2:=L2[i];
album:=TAlbum.create(elem2.NodeByName('aid').ValueAsWidestring);
album.name:=elem2.NodeByName('name').ValueAsWidestring;
L.Add(album);
end;
finally
xmldoc.free;
end;
end;
////////////////////////////////////////
// Destructeur
destructor TFaceBook.destroy;
begin
idhttp1.Free;
inherited;
end;
////////////////////////////////////////
// Constructeur
constructor TFaceBook.create;
begin
inherited;
FToken:='';
Fsessionkey:='';
Fuserid:='';
IdHTTP1:=TIdHTTP.Create(nil);
end;
////////////////////////////////////////
// Fonction Find First Tag
function TFaceBook._FindFirstTag(xmlDoc:TNativeXML;elem:TXmlNode;const key: String): TXmlNode;
var b:Boolean ;
begin
if (elem.Name=key) then begin
result:=elem;
exit;
end;
if (elem.NodeCount>0) then Result:=elem.Nodes[0]
else Result:=nil;
b := false;
while (not b) and (result<>nil) do begin
b := UpperCase(result.name) = UpperCase(key);
if not b then begin
if (result.IndexInParent<result.Parent.NodeCount-1) then
Result:=result.Parent.Nodes[result.IndexInParent+1]
else Result := nil;
end;
end;
if not b then result := nil;
end;
////////////////////////////////////////
// Fonction Get Value from XML
function TFaceBook.GetvalueFromXml(response:String;key:String):String;
var
xmlDoc:TNativeXml;
elem,elem2:TXmlNode;
begin
result:='';
xmlDoc := TNativeXML.Create;
xmldoc.ReadFromString(response);
try
elem:=xmldoc.root;
if (elem<>nil) then begin
elem2:=_FindFirstTag(xmldoc,elem,key);
if (elem2<>nil) then result:=elem2.ValueAsWidestring;
end;
finally
xmldoc.free;
end;
end;
////////////////////////////////////////
// Fonction MD5
function TFaceBook.md5( Plaintext: string): string;
var FHash : TIdHashMessageDigest5;
begin
FHash := TIdHashMessageDigest5.Create;
result := lowercase(FHash.HashStringAsHex(Plaintext));
Fhash.free;
end;
////////////////////////////////////////
// Fonction Signa
function TfaceBook.Signa(L:TStringlist;SECRET_KEY:String):String;
var
i:Integer;
str:String;
begin
//keysort
result:='';
str:='';
for i := 0 to L.Count - 1 do begin
str:=L[i];
result:=result+str;
end;
result:=md5(result+secret_key);
end;
////////////////////////////////////////
// Fonction Login
function TFacebook.Login(api_key,secret_key:String):String;
function Paramsrequest(L:TStringlist):String;
var i:Integer;
begin
result:='';
for i := 0 to L.Count - 1 do begin
if (i>0) then result:=result+'&';
result:=result+L[i];
end;
end;
var
L:TStringlist;
response:String;
str:String;
begin
self.FAPikey:=api_key;
self.FSecretkey:=secret_key;
L:=TStringlist.Create;
try
L.Add('api_key='+API_KEY);
L.Add('method=auth.createToken');
L.Add('v=1.0');
L.Add('sig='+Signa(L,SECRET_KEY));
response:=IdHTTP1.Post(RESTURL,L);
finally
L.Free;
end;
FToken:=GetvalueFromXml(response,'auth_createToken_response');
L:=TStringlist.Create;
L.Add('return_session=0');
L.Add('api_key='+API_KEY);
L.Add('auth_token='+FToken);
result:='http://login.facebook.com/login.php?'+Paramsrequest(L);
L.Free;
end;
////////////////////////////////////////
// Procedure Get Session
procedure TFaceBook.GetSession();
var
L:TStringlist;
L2:TStringList;
str:String;
response:String;
begin
L:=TStringlist.Create;
try
L.Add('api_key='+FAPIKEY);
L.Add('auth_token='+token);
// L.Add('generate_session_secret=0');
L.Add('method=auth.getSession');
L.Add('v=1.0');
L.Add('sig='+Signa(L,FSECRETKEY));
response:=IdHTTP1.Post(RESTURL,L);
finally
L.Free;
end;
Fsessionkey:=GetvalueFromXml(response,'session_key');
Fuserid:=GetvalueFromXml(response,'uid');
end;
////////////////////////////////////////
// Procedure Get Albums
procedure TFaceBook.GetAlbums(LAlbums:TList);
var
L:TStringlist;
L2:TStringList;
str:String;
response:String;
begin
if (FSessionkey='') then GetSession();
L:=TStringlist.Create;
try
L.Add('api_key='+FAPIKEY);
L.Add('call_id=1');
L.Add('method=Photos.getAlbums');
L.Add('session_key='+sessionkey);
L.Add('uid='+userid);
L.Add('v=1.0');
L.Add('sig='+Signa(L,FSECRETKEY));
response:=IdHTTP1.Post(RESTURL,L);
finally
L.Free;
end;
GetAlbumsFromXML(response,LAlbums);
end;
////////////////////////////////////////
// Fonction Get Friends
function TFaceBook.GetFriends():String;
var
L:TStringlist;
L2:TStringList;
str:String;
response:String;
begin
if (FSessionkey='') then GetSession();
L:=TStringlist.Create;
try
L.Add('api_key='+FAPIKEY);
L.Add('call_id=1');
L.Add('method=Friends.get');
L.Add('session_key='+sessionkey);
L.Add('v=1.0');
L.Add('sig='+Signa(L,FSECRETKEY));
result:=IdHTTP1.Post(RESTURL,L);
finally
L.Free;
end;
end;
////////////////////////////////////////
// procedure Get fotos
procedure TFaceBook.GetFotos(albumid:String;Lfotos:TList);
var
L:TStringlist;
str:String;
response:String;
begin
if (FSessionkey='') then GetSession();
L:=TStringlist.Create;
try
L.Add('aid='+albumid);
L.Add('api_key='+FAPIKEY);
L.Add('call_id=1');
L.Add('method=Photos.get');
L.Add('session_key='+sessionkey);
L.Add('v=1.0');
L.Add('sig='+Signa(L,FSECRETKEY));
response:=IdHTTP1.Post(RESTURL,L);
finally
L.Free;
end;
GetfotosFromXML(response,Lfotos);
end;
end.
Conclusion
Pour les 2 autres fichiers "UAlbums" et "UFotos", ils sont dans le fichier Zip.
Historique
- 04 mai 2010 21:34:19 :
- Changement des mots clefs pour la recherche...
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
FileExist sur internet (HTTP) [ par intik ]
Bonjour Dans mon programme je regarde si un fichier existe (en réseau et si oui j'ouvre son contenu texte dans un showmessage)j'aimerai faire la meme
Parcours d'un fichier XML [ par TrustNoOne ]
Bonjour à tous, J'ai un petit soucis pour la lecture d'un fichier XML. J'ai effectué des modifs en long en large en travers mais rien n'y fait. Après
XML Signature [ par grandyaka54 ]
Bonjour, Existe t-il des composants, algo me permettant de canoniser un document xml et de signer ce meme document xml. En faite, je dois inclure da
Test présence noeud XML [ par didou2dek ]
Bonjour à tous, je suis en train de coder une appli me permettant de recuperer des valeurs d'un fichier XML, cependant je bloque sur une fonction que
Récupération de données sur un site Internet avec une appli codée avec Delphi 5 ou 6 [ par Resorbak ]
Patché Bonjour à tous... Est-il possible avec Delphi5 ou 6 de créer une appli capable d'aller chercher des données à une adresse Ex: http://www.fdjeux
Le rendez vous des Delphinautes à Lyon le Jeudi 26 Novembre [ par tlaborde ]
Bonjour à tous, Le 26 Novembre prochain se tiendra une journée de séminaire à Lyon. [b]Olivier Sannier[/b] fera une présentation de [b]dxgettext[/b].
tcomport librery [ par aqwxszedc111 ]
bonsoir tout le monde ! bon j'aimerai utiliser la librery tcomport j'ai télécharger celle si http://sourceforge.net/projects/comport/ (c'est tout ce
C'est quoi la question ? [ par smail002 ]
common fair pour un petie longage pour se logiciel [^^sad2] [img]http://i50.tinypic.com/23a5c2.jpg[/img] code source telecharge http://www.4share
Enregistrement d'une image depuis internet. [ par Eithne ]
Bonjour ! Je développe actuellement une application qui récupère des images à partir d'internet grâce à la fonction UrlDownloadToFile(nil, PChar (sou
Récupérer le contenu (texte) depuis une adresse internet http://www.etc.... [ par Goofyjp ]
Bonjour, Je suis sous Delphi V7 Une adresse internet HTTP://WWW.site_etc fournit du texte Ascii. En fait il s'agit d'un buffer-tampon rempli avec du
|
Derniers Blogs
ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0 par Philess
L'extensibilité du Team Web Access
Le Web Access (site d'équipe) de Team Foundation Server a été complètement réécrit dans la version 2012 avec pas moins de 400.000 lignes de JavaScript. Ce nouveau modèle a été pensé pour offrir de grandes...
Cliquez pour lire la suite de l'article par Philess SIMULER FACILEMENT L'ENVOI DE MAILSIMULER FACILEMENT L'ENVOI DE MAIL par JeremyJeanson
il m'a été demandé, à plusieurs reprises, comment je faisais pour simuler l'envoi de mail lors de mes démos de Workflow Foundation. Ma solution est plutôt simple : j'utilise la configuration par défaut du SmtpClient et j'oriente les mails vers un dossier ...
Cliquez pour lire la suite de l'article par JeremyJeanson VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES !VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES ! par Patrick Guimonet
Si ce n'est déjà fait (comme plus de 600 personnes déjà), il est encore temps de voter pour le concours TOP 10 des influenceurs SharePoint francophones ! Il est organisé par harmon.ie et accessible ici : http://harmon.ie/top-...
Cliquez pour lire la suite de l'article par Patrick Guimonet [CONF'SHAREPOINT] DERNIER RAPPEL ! :-)[CONF'SHAREPOINT] DERNIER RAPPEL ! :-) par Patrick Guimonet
La Conf'SharePoint en chiffres c'est : 3 jours de SharePoint ! 4 parcours et 60 sessions 17 partenaires représentant toutes les fac...
Cliquez pour lire la suite de l'article par Patrick Guimonet
Logiciels
Easy-Planning (4.5.0.11)EASY-PLANNING (4.5.0.11)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté a... Cliquez pour télécharger Easy-Planning CVEasy (3.1.0.51)CVEASY (3.1.0.51)PHMSD-CVEasy est un logiciel d'aide à la rédaction de CV d'une simplicité déconcertante.
PHMSD-C... Cliquez pour télécharger CVEasy LettresFaciles 2011 (8.6.0.31)LETTRESFACILES 2011 (8.6.0.31)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011 sDEVIS-FACTURES vlPRO (8.4.2.62)SDEVIS-FACTURES VLPRO (8.4.2.62)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO Devis-Factures PHMSD (2.1.0.11)DEVIS-FACTURES PHMSD (2.1.0.11)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD
|