L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013
-
1 avril 2009 à 08:29
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
2 avril 2009 à 19:13
Mes cieux d'âmes, bien le bonjour;
Je vous viens avec une question délicate, je vais essayé de l'expliciter au mieux dans ce post...
Alors voilà, pour vous expliquer vite fait le context, j'ai fais une petite application en Delphi (Delphi 7), utilisant le composant VDreamVNC, permettant de voir l'écran d'un poste distant dans mon réseau, donc admettons j'ai la liste des postes d'une salle dans une listview, je selectionne un poste je clique sur me connecter et mon application ouvre une fenêtre qui est l'écran du poste distant, (c'est un VNC ni plus ni moins).
Jusque là tout vat bien, je vais bien... Ce que j'aimerais faire, c'est créer une miniature de cette fenêtre, et pour la suite mettre ces miniatures sur un panel par exemple afin d'avoir une vue sur tous les écrans de la salle, mais bon déjà si je pouvais avoir juste une miniature ce serai pas mal !
J'avoue que j'ai commencé à faire des recherches sur comment créer la miniature d'une fenêtre mais tous mes efforts fûrent vains, je ne sais pas trop par où commencer
Si quelqu'un aurait un piste à m'indiquer, je l'en remercie d'avance
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 1 avril 2009 à 10:37
Ha d'accord, un peu comme les fenetres sous windows vista dans l'alt tab ou sur le mouseover de la barre des taches ... mmm ... ça sens le directX minimum ça non ?
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 1 avril 2009 à 11:01
bonjour,
si tu souhaites que l'ensemble de tes miniatures soient en temps réel ça veut dire qu'en permanence tu es connecté avec tous les ordinateurs...
cantador
Vous n’avez pas trouvé la réponse que vous recherchez ?
L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013 1 avril 2009 à 11:10
Oui
Mon application utlise un ServerSocket, et les postes de la salle un ClientSocket qui se connectent au serveur (ca c'est pour pouvoir envoyer des message et effectuer des actions sur le client en fonction de ce que le serveur envoie), chacun de son côté a un VDreamServer et un VDreamClient (composant qui permet d'avoir l'apercu de l'écran), mais lorsqu'on demande l'apercu, c'est une fenetre vncviewer qui s'ouvre en fait, et c'est de cette fenêtre que je veux faire une miniature. Dans un premier lieu pour faire un system genre quand on passe la sourie sur le nom d'un poste dans la liste hop ca nous donne un petit apercu et ensuite si j'ai le courage et la force de faire une miniature de chaque poste sur un panel
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 1 avril 2009 à 17:10
Attention L'Art Ment, les TSocket sont reconnus comme mauvais par Borland ... et ils ont raison, j'ai testé sur mon réseau, chaque requête prend environ 5 secondes à s'effectuer ...
L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013 2 avril 2009 à 08:15
Bein c'est vrai que j'ai lutté à faire un cette application assez propre, sans messages d'erreur (bien qu'il m'en reste sur certains postes dont je n'arrive pas à comprendre la cause) avec ces composants, cependant pour faire ce dont j'ai besoins ca ma suffit, Ce n'est pas ces composants qui gêrent l'aperçu d'écran distant, c'est le composant VDreamVNC, mes client/serveur socket ne servent qu'à envoyer des messages et savoir qui est présent dans une salle, ni plus ni moins.
@JulioDelphi : Ce serai bête de revoir toute mon application vu que la partie d'écran distant est déjà réalisée, et ca ne permettrait plus de prendre la main à distance non plus si je ne travail qu'avec des images :s
procedure TForm1.Button1Click(Sender: TObject);
var
hWnd: THandle;
hMemDc: THandle;
hScreenDc: THandle;
rect: TRect;
hBitmap: THandle;
hOldBitmap: THandle;
begin
hWnd:= FindWindow(0, PChar(Edit1.Text));
if hWnd = 0 then
begin
ShowMessage('Il n''y a pas de fenêtre avec le titre :' + sLineBreak +
Edit1.Text + sLineBreak +
'Essaye encore jeune boulet.');
Exit;
end;
// Création d'un DC compatible avec l'écran
hScreenDc:= GetDC(0);
hMemDc:= CreateCompatibleDC(hScreenDc);
// Création d'une bitmap de la taille de la fenêtre cible
GetWindowRect(hWnd, rect);
hBitmap:= CreateCompatibleBitmap(hScreenDc, rect.Right - rect.Left, rect.Bottom - rect.Top);
ReleaseDC(0, hScreenDc);
// Mise en place de notre nouvelle bitmap dans notre DC
hOldBitmap:= SelectObject(hMemDc, hBitmap);
// Copie du contenu de la fenêtre dans notre DC
PrintWindow(hWnd, hMemDc, 0);
// Important pour la qualité de l'image
SetStretchBltMode(Image1.Canvas.Handle, HALFTONE);
// Recopie depuis le DC tampon vers le DC de Image1, avec redimenssionnement
StretchBlt(Image1.Canvas.Handle, 0, 0, DEST_WIDTH, DEST_HEIGHT, hMemDc, 0, 0,rect.Right - rect.Left, rect.Bottom - rect.Top, SRCCOPY);
Image1.Repaint;
// Restitution de la bitmap et libérations
SelectObject(hMemDc, hOldBitmap);
DeleteObject(hBitmap);
DeleteDC(hMemDc);
end;