Accueil > > > RÉARRANGER LES LIGNES D'UNE LISTVIEW À LA SOURIS (WIN32 API)
RÉARRANGER LES LIGNES D'UNE LISTVIEW À LA SOURIS (WIN32 API)
Information sur la source
Description
Ce code source montre comment réarranger les lignes d'une ListView à la souris. Il utilise la notification LVN_BEGINDRAG, le message LVM_CREATEDRAGIMAGE et les fonctions ImageList_BeginDrag(), ImageList_DragEnter(), ImageList_DragMove(), ImageList_DragLeave() et ImageList_EndDrag(). Ces fonctions sont utilisées pour l'aspect visuel des opérations de glissement des lignes. Projet réalisé avec Visual C/C++ 2005 mais très facilement adaptable aux autres outils car il est en WIN32 API.
Source
- #include <windows.h>
- #include <commctrl.h>
- #pragma comment(lib,"comctl32.lib")
-
- BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- static HWND hquit,hlistview;
- static LVITEM lvi;
- static BOOL bDragging;
- static HIMAGELIST hDragImage;
- static char buffer[MAX_PATH];
- static HCURSOR hDragCursor,hNoDragCursor,hNormalCursor;
- static LVHITTESTINFO lvhti;
-
- switch(message)
- {
- case WM_INITDIALOG:
- {
- // Définir le titre de la boite de dialogue:
- SetWindowText(hwnd,"Réarranger les lignes d'une ListView à la souris");
- //Créer les controles:
- hquit=CreateWindowEx(0,"button","Quitter", WS_CHILD | WS_VISIBLE ,330, 100, 60, 20, hwnd, 0, 0, 0);
- hlistview=CreateWindowEx(WS_EX_CLIENTEDGE,WC_LISTVIEW,0, WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL ,10, 10, 304, 200, hwnd, 0, 0, 0);
- SendMessage(hlistview,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES );
- // Créer les colonnes de la ListView:
- LVCOLUMN lvc;
- lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT |LVCF_SUBITEM;
- lvc.fmt = LVCFMT_CENTER;
- lvc.iSubItem =0; lvc.cx = 0; lvc.pszText = 0;
- SendMessage(hlistview,LVM_INSERTCOLUMN,0,(LPARAM)&lvc);
- lvc.iSubItem =1; lvc.cx = 100; lvc.pszText = "Rang";
- SendMessage(hlistview,LVM_INSERTCOLUMN,1,(LPARAM)&lvc);
- lvc.iSubItem =2; lvc.cx = 100; lvc.pszText = "Pays";
- SendMessage(hlistview,LVM_INSERTCOLUMN,2,(LPARAM)&lvc);
- lvc.iSubItem =3; lvc.cx = 100; lvc.pszText = "Capitale";
- SendMessage(hlistview,LVM_INSERTCOLUMN,3,(LPARAM)&lvc);
- // Ajout des éléments de la ListView:
- lvi.mask=LVIF_TEXT | LVIF_STATE ;
- char* contenu[]={"1","France","Paris","2","Allemagne","Berlin","3","Angleterre","London","4","Italie","Rome","5","Espagne","Madrid"};
- int i;
- for(i=0;i<5;i++)
- {
- lvi.iItem=i;
- lvi.iSubItem=0;
- SendMessage(hlistview,LVM_INSERTITEM ,0,(LPARAM)&lvi);
- lvi.iSubItem=1;
- lvi.pszText=contenu[i*3];
- SendMessage(hlistview,LVM_SETITEMTEXT ,i,(LPARAM)&lvi);
- lvi.iSubItem=2;
- lvi.pszText=contenu[i*3+1];
- SendMessage(hlistview,LVM_SETITEMTEXT ,i,(LPARAM)&lvi);
- lvi.iSubItem=3;
- lvi.pszText=contenu[i*3+2];
- SendMessage(hlistview,LVM_SETITEMTEXT ,i,(LPARAM)&lvi);
- }
- // Charger les différents curseurs;
- hDragCursor=LoadCursor((HMODULE)lParam,"IDC_DRAG");
- hNoDragCursor=LoadCursor((HMODULE)lParam,"IDC_NODRAG");
- hNormalCursor=LoadCursor(0,IDC_ARROW);
- return 0;
- }
-
- case WM_NOTIFY:
- LPNMHDR pnmhdr;
- pnmhdr=(LPNMHDR)lParam;
- if(pnmhdr->code==LVN_BEGINDRAG)
- {
- POINT pt;
- // Obtenir l'index de l'élément sélectionné:
- int iSelected = SendMessage(hlistview,LVM_GETNEXTITEM,-1,LVIS_SELECTED);
- // Créer une DragImage de l'élément sélectionné:
- hDragImage = (HIMAGELIST)SendMessage(hlistview,LVM_CREATEDRAGIMAGE ,iSelected,(LPARAM)&pt);
- // Commencer le dragging de notre DragImage:
- ImageList_BeginDrag(hDragImage, 0, 0, 0);
- // Déterminer la position de notre DragImage sur l'écran:
- LPNM_LISTVIEW pnml;
- pnml=(LPNM_LISTVIEW)pnmhdr;
- pt = pnml->ptAction;
- ClientToScreen(hlistview, &pt);
- // Afficher notre DragImage:
- ImageList_DragEnter(0, pt.x, pt.y);
- // Mettre le flag du drag en cours à TRUE:
- bDragging = TRUE;
- // Empêcher le curseur de la souris de sortir de notre fenêtre:
- RECT rect;
- GetWindowRect(hwnd,&rect);
- ClipCursor(&rect);
- // Capturer les événements de la souris:
- SetCapture(hwnd);
- return 0;
- }
- break;
-
- case WM_MOUSEMOVE:
- {
- // Ne rien faire si le flag du drag en cours est FALSE:
- if (!bDragging) break;
- // Obtenir l'index de l'élément pointé par la souris:
- lvhti.pt.x = LOWORD(lParam);
- lvhti.pt.y = HIWORD(lParam);
- ClientToScreen(hwnd, &lvhti.pt);
- ScreenToClient(hlistview, &lvhti.pt);
- SendMessage(hlistview,LVM_HITTEST,0,(LPARAM)&lvhti);
- // Si l'index est valide alors afficher le curseur de drag:
- if(lvhti.iItem!=-1)SetCursor(hDragCursor);
- // Sinon afficher le curseur d'interdiction de drag:
- else SetCursor(hNoDragCursor);
- // Mettre notre DragImage à la position courante de la souris:
- lvhti.pt.x=0;
- ClientToScreen(hlistview, &lvhti.pt);
- ImageList_DragMove(lvhti.pt.x, lvhti.pt.y);
- }
- break;
-
- case WM_LBUTTONUP:
- {
- // Mettre le flag de drag en cours à FALSE:
- bDragging = FALSE;
- // Cacher notre DragImage:
- ImageList_DragLeave(hlistview);
- // Terminer le dragging:
- ImageList_EndDrag();
- // Détruire notre DragImage:
- ImageList_Destroy(hDragImage);
- // Arrêter la capture des événements souris:
- ReleaseCapture();
- // Libérer le curseur souris:
- ClipCursor(0);
- // Afficher le curseur nomal (flèche):
- SetCursor(hNormalCursor);
- // Déterminer l'élément pointé par la souris:
- lvhti.pt.x = LOWORD(lParam);
- lvhti.pt.y = HIWORD(lParam);
- ClientToScreen(hwnd, &lvhti.pt);
- ScreenToClient(hlistview, &lvhti.pt);
- SendMessage(hlistview,LVM_HITTEST,0,(LPARAM)&lvhti);
- // Ne rien faire si en dehors des éléments de la ListView:
- if (lvhti.iItem == -1) break;
- // Trouver l'élément sélectionné:
- int iSelected = SendMessage(hlistview,LVM_GETNEXTITEM,-1,LVIS_SELECTED);
- // Ne rien faire si aucun élément sélectionné ou s'il s'agit du même élément que celui pointé par la souris:
- if(iSelected==-1 || iSelected==lvhti.iItem) break;
- // Initialiser la structure LVITEM pour l'élément à ajouter:
- lvi.iSubItem = 0;
- if(lvhti.iItem<iSelected)lvi.iItem = lvhti.iItem;
- else lvi.iItem = lvhti.iItem + 1;
- // Ajouter le nouvel élément:
- int iNewItem=SendMessage(hlistview,LVM_INSERTITEM,0,(LPARAM)&lvi);
- // Incrémenter l'index de l'élément sélectionné si celui-ci se trouve après l'élément pointé par la souris:
- if (iNewItem < iSelected) iSelected++;
- // Obtenir le nombre de colonnes de la ListView:
- HWND hheader= (HWND)SendMessage(hlistview, LVM_GETHEADER, 0, 0);
- int iColumnCount=SendMessage(hheader,HDM_GETITEMCOUNT ,0,0);
- // Transférer le contenu des colonnes de l'élément sélectionné vers le nouvel élément:
- lvi.cchTextMax = MAX_PATH;
- lvi.pszText = buffer;
- int i;
- for (i = 1; i < iColumnCount; i++)
- {
- lvi.iSubItem=i;
- SendMessage(hlistview,LVM_GETITEMTEXT,iSelected,(LPARAM)&lvi);
- SendMessage(hlistview,LVM_SETITEMTEXT,iNewItem,(LPARAM)&lvi);
- }
- // Sélectionner l'élément nouvellement inséré:
- lvi.state=LVIS_SELECTED;
- lvi.stateMask=LVIS_SELECTED;
- SendMessage(hlistview,LVM_SETITEMSTATE,iNewItem,(LPARAM)&lvi);
- // Supprimer l'élément de la position originale:
- SendMessage(hlistview,LVM_DELETEITEM,iSelected,0);
- }
- break;
-
- case WM_COMMAND:
- // Envoyer le message de fermeture de la boite de dialogue si clic sur le bouton "Quitter":
- if((HWND)lParam==hquit) SendMessage(hwnd,WM_CLOSE,0,0);
- break;
-
- case WM_CLOSE:
- //Fermer la boite de dialogue:
- EndDialog(hwnd,0);
- break;
- default:
- break;
- }
- return 0;
- }
-
- int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprev, LPSTR cmd, int show)
- {
- // Charger La DLL des Common Controls:
- HINSTANCE hCmLib= LoadLibrary("comctl32.dll");
- //Allouer de la mémoire pour notre dialog template:
- LPDLGTEMPLATE lpdt = ( LPDLGTEMPLATE) GlobalAlloc(GPTR, 512);
- // Définir les styles de la boite de dialogue:
- lpdt->style = WS_DLGFRAME| DS_CENTER |WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
- // Obtenir les unités d'affichage des boite de dialogues:
- long baseunits=GetDialogBaseUnits();
- // Définir les dimensions de la boite de dialogue:
- lpdt->cx = MulDiv(406, 4,LOWORD(baseunits));
- lpdt->cy = MulDiv(220, 8, HIWORD(baseunits));
- //Lancer la boite de dialogue
- DialogBoxIndirectParam(hinst,lpdt,0,(DLGPROC)DlgProc,(LPARAM)hinst);
- //Libération de la mémoire allouée:
- GlobalFree((HGLOBAL)lpdt);
- // Libérer la DLL des Common Controls:
- FreeLibrary(hCmLib);
- return 0;
- }
#include <windows.h>
#include <commctrl.h>
#pragma comment(lib,"comctl32.lib")
BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hquit,hlistview;
static LVITEM lvi;
static BOOL bDragging;
static HIMAGELIST hDragImage;
static char buffer[MAX_PATH];
static HCURSOR hDragCursor,hNoDragCursor,hNormalCursor;
static LVHITTESTINFO lvhti;
switch(message)
{
case WM_INITDIALOG:
{
// Définir le titre de la boite de dialogue:
SetWindowText(hwnd,"Réarranger les lignes d'une ListView à la souris");
//Créer les controles:
hquit=CreateWindowEx(0,"button","Quitter", WS_CHILD | WS_VISIBLE ,330, 100, 60, 20, hwnd, 0, 0, 0);
hlistview=CreateWindowEx(WS_EX_CLIENTEDGE,WC_LISTVIEW,0, WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL ,10, 10, 304, 200, hwnd, 0, 0, 0);
SendMessage(hlistview,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES );
// Créer les colonnes de la ListView:
LVCOLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT |LVCF_SUBITEM;
lvc.fmt = LVCFMT_CENTER;
lvc.iSubItem =0; lvc.cx = 0; lvc.pszText = 0;
SendMessage(hlistview,LVM_INSERTCOLUMN,0,(LPARAM)&lvc);
lvc.iSubItem =1; lvc.cx = 100; lvc.pszText = "Rang";
SendMessage(hlistview,LVM_INSERTCOLUMN,1,(LPARAM)&lvc);
lvc.iSubItem =2; lvc.cx = 100; lvc.pszText = "Pays";
SendMessage(hlistview,LVM_INSERTCOLUMN,2,(LPARAM)&lvc);
lvc.iSubItem =3; lvc.cx = 100; lvc.pszText = "Capitale";
SendMessage(hlistview,LVM_INSERTCOLUMN,3,(LPARAM)&lvc);
// Ajout des éléments de la ListView:
lvi.mask=LVIF_TEXT | LVIF_STATE ;
char* contenu[]={"1","France","Paris","2","Allemagne","Berlin","3","Angleterre","London","4","Italie","Rome","5","Espagne","Madrid"};
int i;
for(i=0;i<5;i++)
{
lvi.iItem=i;
lvi.iSubItem=0;
SendMessage(hlistview,LVM_INSERTITEM ,0,(LPARAM)&lvi);
lvi.iSubItem=1;
lvi.pszText=contenu[i*3];
SendMessage(hlistview,LVM_SETITEMTEXT ,i,(LPARAM)&lvi);
lvi.iSubItem=2;
lvi.pszText=contenu[i*3+1];
SendMessage(hlistview,LVM_SETITEMTEXT ,i,(LPARAM)&lvi);
lvi.iSubItem=3;
lvi.pszText=contenu[i*3+2];
SendMessage(hlistview,LVM_SETITEMTEXT ,i,(LPARAM)&lvi);
}
// Charger les différents curseurs;
hDragCursor=LoadCursor((HMODULE)lParam,"IDC_DRAG");
hNoDragCursor=LoadCursor((HMODULE)lParam,"IDC_NODRAG");
hNormalCursor=LoadCursor(0,IDC_ARROW);
return 0;
}
case WM_NOTIFY:
LPNMHDR pnmhdr;
pnmhdr=(LPNMHDR)lParam;
if(pnmhdr->code==LVN_BEGINDRAG)
{
POINT pt;
// Obtenir l'index de l'élément sélectionné:
int iSelected = SendMessage(hlistview,LVM_GETNEXTITEM,-1,LVIS_SELECTED);
// Créer une DragImage de l'élément sélectionné:
hDragImage = (HIMAGELIST)SendMessage(hlistview,LVM_CREATEDRAGIMAGE ,iSelected,(LPARAM)&pt);
// Commencer le dragging de notre DragImage:
ImageList_BeginDrag(hDragImage, 0, 0, 0);
// Déterminer la position de notre DragImage sur l'écran:
LPNM_LISTVIEW pnml;
pnml=(LPNM_LISTVIEW)pnmhdr;
pt = pnml->ptAction;
ClientToScreen(hlistview, &pt);
// Afficher notre DragImage:
ImageList_DragEnter(0, pt.x, pt.y);
// Mettre le flag du drag en cours à TRUE:
bDragging = TRUE;
// Empêcher le curseur de la souris de sortir de notre fenêtre:
RECT rect;
GetWindowRect(hwnd,&rect);
ClipCursor(&rect);
// Capturer les événements de la souris:
SetCapture(hwnd);
return 0;
}
break;
case WM_MOUSEMOVE:
{
// Ne rien faire si le flag du drag en cours est FALSE:
if (!bDragging) break;
// Obtenir l'index de l'élément pointé par la souris:
lvhti.pt.x = LOWORD(lParam);
lvhti.pt.y = HIWORD(lParam);
ClientToScreen(hwnd, &lvhti.pt);
ScreenToClient(hlistview, &lvhti.pt);
SendMessage(hlistview,LVM_HITTEST,0,(LPARAM)&lvhti);
// Si l'index est valide alors afficher le curseur de drag:
if(lvhti.iItem!=-1)SetCursor(hDragCursor);
// Sinon afficher le curseur d'interdiction de drag:
else SetCursor(hNoDragCursor);
// Mettre notre DragImage à la position courante de la souris:
lvhti.pt.x=0;
ClientToScreen(hlistview, &lvhti.pt);
ImageList_DragMove(lvhti.pt.x, lvhti.pt.y);
}
break;
case WM_LBUTTONUP:
{
// Mettre le flag de drag en cours à FALSE:
bDragging = FALSE;
// Cacher notre DragImage:
ImageList_DragLeave(hlistview);
// Terminer le dragging:
ImageList_EndDrag();
// Détruire notre DragImage:
ImageList_Destroy(hDragImage);
// Arrêter la capture des événements souris:
ReleaseCapture();
// Libérer le curseur souris:
ClipCursor(0);
// Afficher le curseur nomal (flèche):
SetCursor(hNormalCursor);
// Déterminer l'élément pointé par la souris:
lvhti.pt.x = LOWORD(lParam);
lvhti.pt.y = HIWORD(lParam);
ClientToScreen(hwnd, &lvhti.pt);
ScreenToClient(hlistview, &lvhti.pt);
SendMessage(hlistview,LVM_HITTEST,0,(LPARAM)&lvhti);
// Ne rien faire si en dehors des éléments de la ListView:
if (lvhti.iItem == -1) break;
// Trouver l'élément sélectionné:
int iSelected = SendMessage(hlistview,LVM_GETNEXTITEM,-1,LVIS_SELECTED);
// Ne rien faire si aucun élément sélectionné ou s'il s'agit du même élément que celui pointé par la souris:
if(iSelected==-1 || iSelected==lvhti.iItem) break;
// Initialiser la structure LVITEM pour l'élément à ajouter:
lvi.iSubItem = 0;
if(lvhti.iItem<iSelected)lvi.iItem = lvhti.iItem;
else lvi.iItem = lvhti.iItem + 1;
// Ajouter le nouvel élément:
int iNewItem=SendMessage(hlistview,LVM_INSERTITEM,0,(LPARAM)&lvi);
// Incrémenter l'index de l'élément sélectionné si celui-ci se trouve après l'élément pointé par la souris:
if (iNewItem < iSelected) iSelected++;
// Obtenir le nombre de colonnes de la ListView:
HWND hheader= (HWND)SendMessage(hlistview, LVM_GETHEADER, 0, 0);
int iColumnCount=SendMessage(hheader,HDM_GETITEMCOUNT ,0,0);
// Transférer le contenu des colonnes de l'élément sélectionné vers le nouvel élément:
lvi.cchTextMax = MAX_PATH;
lvi.pszText = buffer;
int i;
for (i = 1; i < iColumnCount; i++)
{
lvi.iSubItem=i;
SendMessage(hlistview,LVM_GETITEMTEXT,iSelected,(LPARAM)&lvi);
SendMessage(hlistview,LVM_SETITEMTEXT,iNewItem,(LPARAM)&lvi);
}
// Sélectionner l'élément nouvellement inséré:
lvi.state=LVIS_SELECTED;
lvi.stateMask=LVIS_SELECTED;
SendMessage(hlistview,LVM_SETITEMSTATE,iNewItem,(LPARAM)&lvi);
// Supprimer l'élément de la position originale:
SendMessage(hlistview,LVM_DELETEITEM,iSelected,0);
}
break;
case WM_COMMAND:
// Envoyer le message de fermeture de la boite de dialogue si clic sur le bouton "Quitter":
if((HWND)lParam==hquit) SendMessage(hwnd,WM_CLOSE,0,0);
break;
case WM_CLOSE:
//Fermer la boite de dialogue:
EndDialog(hwnd,0);
break;
default:
break;
}
return 0;
}
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprev, LPSTR cmd, int show)
{
// Charger La DLL des Common Controls:
HINSTANCE hCmLib= LoadLibrary("comctl32.dll");
//Allouer de la mémoire pour notre dialog template:
LPDLGTEMPLATE lpdt = ( LPDLGTEMPLATE) GlobalAlloc(GPTR, 512);
// Définir les styles de la boite de dialogue:
lpdt->style = WS_DLGFRAME| DS_CENTER |WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
// Obtenir les unités d'affichage des boite de dialogues:
long baseunits=GetDialogBaseUnits();
// Définir les dimensions de la boite de dialogue:
lpdt->cx = MulDiv(406, 4,LOWORD(baseunits));
lpdt->cy = MulDiv(220, 8, HIWORD(baseunits));
//Lancer la boite de dialogue
DialogBoxIndirectParam(hinst,lpdt,0,(DLGPROC)DlgProc,(LPARAM)hinst);
//Libération de la mémoire allouée:
GlobalFree((HGLOBAL)lpdt);
// Libérer la DLL des Common Controls:
FreeLibrary(hCmLib);
return 0;
}
Conclusion
Le zip contient le projet complet.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Couleur item dans un listview [ par kevinmitnik66 ]
Salut à tous,une petite kestion, j'ai un listview et j'aimerais mettre seulment certaines lignes en couleur (rouge par ex) et non pas mettre toutes le
ListView Item survolé par la souris ? [ par Capa6T ]
Bonjour,Comment peut-on récupérer l'item survolé par la souris dans un contrôle ListView ?J'ai vu quelques sources qui font des calculs sur la positio
Gestion de la souris listview c++ api Win32 [ par Spunk62 ]
Bonjour, je voudrai savoir comment récupérer la cellule d'une listview avec un click de la sourisvoila ce que j'ai fait: case WM_LBUTTONUP:
scrolling listview [ par nfousa ]
lorsque le nombre des lignes dans ma listeview(c#) devient grand des lignes ne s'affichent pas. J'ai besoin normalement une scrollbar comment puis_je
Bibliothèque pour gérer 2 souris et 2 curseurs ? [ par hate spam ]
Bonjour, je crée actuellement un explorateur de fichiers multiplateforme et j'aimerai pouvoir manipuler 2 souris en même temps ayant chacune son propr
[BASH]recherche d'un caractère [ par danpsaume ]
Bonjour J'ai un probleme je vous l'expose je suis en face d'un fichier contenant les données sous cette forme. 1 2 3 6 7 90 67 9 45 8 90 34 Bref c'es
Comment connaître l'état du curseur de la souris ? [ par thenaoh ]
Bonjour ! Je souhaiterais simplement savoir quand le curseur de ma souris prend la forme du curseur de saisie (I-beam), comme quand on est au-dessus
QT - Fenetres Transluside (NO-CLIC) [ par shorzy ]
Salut. Je voudrais avoir une Fenetre qui ne recoit pas les Clics de la souris, et les passes aux fenetres qui sont derrieres. Comme si elle était tran
Segmentation d'un texte en lignes [ par haning ]
Bonsoir, Je suis débutante en c++ et j'ai vraiment besoin de votre aide. J'ai un texte enregistré sous forme d'image en niveau de gris. Je veux se
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
MATRICE TEMPLATEMATRICE TEMPLATE par hjr2610
Cliquez pour lire la suite par hjr2610 RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|