D2005 et Indy [Résolu]

Messages postés
1649
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
- - Dernière réponse : jlen100
Messages postés
1649
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
- 29 mai 2006 à 13:10
bonsoir,

je viens de m'appercevoir que le code du module MAIL n'est pas portable
sous D2005 et INDY 10 (il ne se compile tout simplement pas)
Apparemment il y a eu une refonte complète du composant, comme il n'est
pas documenté ..... et que l'on ne peut pas installer la version
9  je ne sais plus à quel saint me vouer.

avant pour attacher un fichier on faisait:

  TIdAttachment.Create(IdMessage1.MessageParts,FileName);

maintenant cela ne fonctionne plus

sans parler de propriétés qui onr disparues j'en passe et des meilleures

Encore une chose à mettre au passif de D2005!!

si quelqu'un sait quelle est la procédure à suivre maintenant je lui en serait reconnaissant


@+

jlen
Afficher la suite 

20/47 réponses

Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
9 décembre 2019
34
0
Merci
Mais à mon avis il doit y avoir une bonne raison pour qu'ils aient renommé cette propriété mais la quelle

@+
Cirec
Commenter la réponse de Cirec
Messages postés
1649
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
7
0
Merci
francky,

ta méthode est assez proche de celle que j'ai utilisée puisque j'ai
fait 2 fichiers différents : pas le top ça va finir à la grenade
Commenter la réponse de jlen100
Messages postés
1649
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
7
0
Merci
pour avoir renomer cette propriété : un vrai boulot de stagiaire la
seule utilité auraiit été le risque qu'elle fasse double emploi mais
lequel et avec quelle autre mystère toujours est-il que cela fait
sacrément Ch... de se retaper le code pour des modifs de ce genre.

je n'ose même pas imaginer un réseau ou il faudrait migrer sous indy10.
Tu me diras faire et défaire c'est toujours travailler au moins les
programmeurs réseau ne risquent pas le chomage!!!

@+

jlen
Commenter la réponse de jlen100
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
9 décembre 2019
34
0
Merci
TIdAttachment  est devenue une classe de base abstaite
dont découle deux nouvelles classes
TIdAttachmentFile  // pour un fichier sur le disque dur
TIdAttachmentMemory// pour un fichier en mémoire

ceci explique peut être cela
l'envoi de pièces jointes depuis la mémoire n'était pas prévue dans la version 9 (enfin je crois)

@+
Cirec
Commenter la réponse de Cirec
Messages postés
1649
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
7
0
Merci
rien ne les empêchait de laisser la procédure par défaut de la version
9 et de la surchrager et/ou d'en faire une autre différenciant les flux
au point ou ils était de la complexité cela ne cahgeait pas la face du
mode et cela restait transparent pour l'utilisateur. Il ne faut quand
même pas oublier qu'un composant est sensé simplifoer la tache du
programmeur pas la compliquer


@+

jlen
Commenter la réponse de jlen100
0
Merci
Re,


Cirec je ne vois pas l'utilité d'utiliser un acces mémoire pour envoyer
une pièce jointe : tu imagines les serveurs utiliser ce genre de truc ??


Maintenant le probleme d'Indy 10 n'est pas lié qu'aux mails et j'irai
meme plus loin : INDY c'est pire que TSOCKET. En effet pour transmettre
un fichier d'un serveur vers un client : bah accroche toi, c'est à
passer par la fenetre. Alors evidemment cette team a du se dire : " bah
envoyer un fichier sur un serveur c'est inutle". Rien que cela, tu n'as
aucune source sur le net. C'est possible mais :


-C'est d'une difficulté extraordinaire (en effet tu n'as pas de
procedure OnExecute pour le client, ce qui manque cruellement ca me
parait evident).


-Est ce portable sur un autre serveur ? loin de là il faut mettre des
sleeps a tout bout de champs  donc  à la moindre fiante
d'oiseau sur la ligne ADSL tu as une grosse violation de mémoire.


En fait Indy10 vient de l'apparition du .net : manque de bol les mecs
auraient du débeuguer Indy9 et rajouter des options fondamentales; bien
non ils ont faits une succession de connerie sur conneries.


Quand aux composants ICS : j'en parle meme pas c'est encore pire


Bien JLen bon courage
Commenter la réponse de Utilisateur anonyme
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
9 décembre 2019
34
0
Merci
Salut Francky,

si toi tu ne vois pas l'utilité d'un accès mémoire pour envoyer un document où fichier joint, d'autre y trouveront une utilité :

et justement quand tu fais une application qui doit envoyer des messages pour information sur l'état d'un pc (par exemple) et bien tu peux envoyer le texte d'un mémo (par Ex.) directement sans l'enregistrer préalablement sur ton disque et il ne sera pas fusionné avec mail mais envoyé en piece jointe.

Deuxième exemple tu fais un logiciel de surveillance vidéo (tiens ça me rappel quelque chose non ?)  et tu envoies une image à un moment précis : encore une fois pas besoin d'enregistrer l'image sur le disque pour la joindre au mail tu peux directement l'envoyé depuis le stream.

et des exemples comme ceux là il doit y en avoir une tone ça fonctionne avec les Stream et les String

ps: j'ai testé pour vous l'envoie par Stream et String et ça fonctionne très bien c'est même plus souple d'utulisation que la voie habituelle

@+
Cirec
Commenter la réponse de Cirec
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
9 décembre 2019
34
0
Merci
Et pour information je viens refaire un autre teste
un mail + pièce jointe normale + un texte par Stream
et le tout à très bien fonctionné

@+
Cirec
Commenter la réponse de Cirec
0
Merci
Il y a un truc de très génant avec Indy : l'envois d'un client vers un
serveur avec les compsants IdTCP a été oublié par ces gens .


Si à chaque version d'Indy il faut tout réapprendre on est pas sortis de l'auberge .


Pour finir mon intervention sur ce topic, il y a pas mal de choses à
revoir avec cette suite de composants, et il me parait urgent que ces
gens travaillent sur les amélioration plutot que de tout refaire.


J'ai voulu mailer cette team pour leur signaler certains disfonctionnement mais le lien sur la boite mail, ne fonctionne pas.


@+
Commenter la réponse de Utilisateur anonyme
Messages postés
1649
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
7
0
Merci
je ne doute pas de l'intérêt d'envoyer diectement à patir du stream (il
faudrait d'ailleurs que je regarde pour envoyer directemnt le flux
video mais passons).dans le cas d'une photo l'interêt est assez faible
du moins dans le cas de delphi :

toute les images sont traitées en bitmap on ne les converties qu'au
moment de l'enregistrement et intercepter le flux à ce moment là est
plutot périlleux . en plus dans le cas de la surveillance il fallait
garder une trace des anomalies et je n'envoie qu'une seule photo ou une
photo toutes les x minutes et comme on n'est en temps réel (vu le délai
entre l'envoi et la réception du mail on n'est pas à quelques dixièmes
de soconde) il est donc de toute façon plus simple de prendre le
fichier sur le disque de d'intercepter le flux .


@+

jlen
Commenter la réponse de jlen100
0
Merci
Surtout JLen si on commence à bouffer les ressources mémoires des
serveurs SMTP, qui sont simplement des bureaux de postes, ils vont etre
content les FAI . Je vous laisse devenir ce que pourrait faire quelqu'un mal attentionné
Commenter la réponse de Utilisateur anonyme
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
9 décembre 2019
34
0
Merci
Oui effectivement je n'avais pas pensé à ça,
 mon exemple pour les images était assez mal choisi mais bon vous avez compris ou je voulais en venir, tout ça pour dire que l'envoie par MemoryStream peut avoir des avantages certains où certains avantages.

La modification des composants Indy nous échappes encore mais une chose est certaine c'est que nous devons composer avec ou nous en passer.

Bien sur on pourrais en discuter des heures mais ça ne fera pas avancer le schmilblick enfin c'est mon avis

Bon sur ce bonne chance pour la suite ...


<hr />


Chaque problème à sa solution ... le tout c'est de la trouver
<hr />














@+
Cirec
Commenter la réponse de Cirec
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
9 décembre 2019
34
0
Merci
Attention Francky,
quand je parle de stream c'est sur le pc de l'expéditeur que ça ce passe
dans le fonctionnement ça reste identique à un mail avec piece jointe normal

Je veux dire qu'a la reception du mail il n'y a pas de différence le tout est mis dans un fichier Zip

Il n'y a donc pas de ressources supplémentaires utilisée pour réaliser ce genre d'opération

@+
Cirec
Commenter la réponse de Cirec
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
9 décembre 2019
34
0
Merci
ps: (un petit oublis )

Toujours pour Francky
Donc ce que tu sous entends n'est pas possible
en tout cas pas par cette voie
donc pas de soucis a avoir de ce coté

@+
Cirec
Commenter la réponse de Cirec
0
Merci
Par contre JLen, pour revenir à ton probleme :


*Tu peux te passer des composants Indy et utiliser notre bon vieux
shell pour transferer ton mail. Par contre c'est bcp bcp plus c...t. à
faire.


*Pourquoi utiliser un mail ? Et oui obliger d'aller dans sa boite mail c'est long. Pourquoi ne pas transferer via TCP tes photos et envoyer un message d'alerte en cas de réception??
Ca serait plus simple pour l'utilisateur et il me semble que les
composants TCP des version 9 et 10 sont identiques.  Voici un code
fonctionnel pour downloader ou Uploader d'un client vers un serveur.
Normalement tu peux utiliser ce code directement il ne devrait pas y
avoir de beug et le transfert est rapide .Pour une alerte il suffit en fin dde procedure d'rajouter un WriteLn et un showmessage . Si tu veux le projet pour le tester sous D 2005 D7 et D6, je te le passe


////////////

//UPLOADER//

////////////


procedure TForm1.Button1Click(Sender: TObject);

begin
IdTCPClient1.Host:=Edit1.text; //L'adresse IP est le contenu de l'Edit1

IdTCPClient1.Connect; //On connecte le client

end;


procedure TForm1.Button2Click(Sender: TObject);

begin
IdTCPClient1.DisConnect; //On déconnecte le client

end;


procedure TForm1.Button3Click(Sender: TObject);

begin
IdTCPServer1.Active:=true; //On active le serveur

end;


procedure TForm1.Button4Click(Sender: TObject);

begin
IdTCPServer1.Active:=false; //On désactive le client

end;


procedure TForm1.Button6Click(Sender: TObject);

begin
Uploader; //On lance la procédure «Uploader»

end;


procedure TForm1.Button5Click(Sender: TObject);

begin
Opendialog1.execute; //On execute l'Opendialog1

Edit2.text:=Opendialog1.FileName;//L'Edit2 est le nom du fichier sélectionné dans l'Opendialog1

end;


procedure TForm1.Button8Click(Sender: TObject);

begin
Savedialog1.execute; //On execute le Savedialog1

Edit3.text:=Savedialog1.FileName; //L'Edit3 est le nom du fichier sélectionné dans le Savedialog1

end;


Procedure TForm1.Uploader;
var

Fs1 : TFileStream; //On définit Fs1 comme un TFileStream

begin //On commence

if (Edit2.text<>'Fichier Client') and (Edit3.text<>'Fichier Serveur') then

//Si Edit2 est différent de 'Fichier Client' et Edit3 est différent de 'Fichier Serveur' alors

try //On essaye

Fs1 := TFileStream.Create(Edit2.text,fmOpenRead,fmShareDenyWrite); //De créer le flux

IdTCPClient1.WriteLn('Upload|'+Edit3.text); //De transmettre 'Upload|'+le nom du fichier cible

IdTCPClient1.WriteInteger(Fs1.Size); //D'écrire la taille

IdTCPClient1.WriteStream(Fs1); //D'écrire le flux

finally //Finalement

FreeAndNil(Fs1); //On libère le flux

IdTCPClient1.Disconnect; //On déconnecte le client

end;

end;


procedure TForm1.IdTCPServer1Exception(AThread: TIdPeerThread;

  AException: Exception);
var //On définit les variables

Line, FileName : String; //Line et FileName sont des strings

FileSize : integer; //FileSize est un entier

Fs2 : TfileStream; //Fs2 est un TFileStream

begin //On commence

with AThread.Connection do //Avec la connection du serveur

try //On essaye de

Line := ReadLn(); //Récupérer le message du client

if Copy(Line,1,Pos('|',Line)-1)='Upload' then //Si le début du message jusqu'à '|' est 'Upload'

begin //On commence

FileName := Copy(Line,Pos('|',Line)+1,length(Line)); //FileName est le message à partir de '|'

Fs2 := TFileStream.Create(FileName,fmCreate); // On Crée le flux

FileSize := ReadInteger(); //On Lit la taille

ReadStream(Fs2,FileSize,False); //On Lit le flux

end;

finally //Finalement

FreeAndNil(Fs2); // On libère le flux

Disconnect; //On déconnecte le serveur

end;

end;


///////////////

//DOWNLOADER//

///////////////


procedure TForm1.Button9Click(Sender: TObject);

begin
IdTCPClient2.Host:=Edit4.text; //L'adresse IP est le contenu de l'Edit4

IdTCPClient2.Connect; //On connecte le client

end;


procedure TForm1.Button10Click(Sender: TObject);

begin
IdTCPClient2.DisConnect;  //On déconnecte le client;

end;


procedure TForm1.Button11Click(Sender: TObject);

begin
IdTCPServer2.Active:=true; //On active le serveur

end;


procedure TForm1.Button12Click(Sender: TObject);

begin
IdTCPServer2.Active:=false; //On désactive le serveur

end;


procedure TForm1.Button16Click(Sender: TObject);

begin
Opendialog2.execute; //On execute l'Opendialog2

Edit6.text:=Opendialog2.FileName;//L'Edit6 est le nom du fichier sélectionné dans l'Opendialog2

end;


procedure TForm1.Button13Click(Sender: TObject);

begin
Savedialog2.execute; //On execute le Sabedialog2

Edit5.text:=Savedialog2.FileName; //L'Edit5 est le nom du fichier sélectionné dans le Savedialog2

end;


procedure TForm1.Button14Click(Sender: TObject);

var //On définit les variables
Line, FileName : String; //Line et FileName sont des strings

FileSize : integer; //FileSize est un entier

Fs2 : TfileStream; //Fs2 est un TFileStream

begin //On commence

if (Edit5.text<>'Fichier Client') and (Edit6.text<>'Fichier Serveur') then

//Si Edit2 est différent de 'Fichier Client' et Edit3 est différent de 'Fichier Serveur' alors

begin //On commence

idtcpclient2.WriteLn('Download|'+Edit6.text); //On envoye 'Download|'+le nom du fichier Source

with idtcpclient2 do //Avec le client on fait

try //On essaye

Line := ReadLn(); //Line est le message reçu de la part du serveur

if Line='ok' then // Si le message reçu est ok

begin //On commence

FileName := Edit5.text; //FileName est le contenu de l'Edit5

Fs2 := TFileStream.Create(FileName,fmCreate); //On crée le flux

FileSize := ReadInteger(); //On lit la taille

ReadStream(Fs2,FileSize,False); //On lit le flux

end;

finally //Finalement

FreeAndNil(Fs2); //On libère le flux

Disconnect; //On déconnecte

end;

end;

end;


procedure TForm1.IdTCPServer2Execute(AThread: TIdPeerThread);
var //On définit les variables

Fs1 : TfileStream; //Fs1 est un TFileStream

line, Filename:string; //Line et Filename sont des strings

begin //On commence     

line:=Athread.Connection.readln(); //line est le message reçu par le serveur

Filename:=Copy(line,Pos('|',line)+1,length(line)); //Filename est le message après '|'

if Copy(line,1,Pos('|',line)-1)='Download' then //Si le message jusqu'à '|' est 'Download'

try //On essaye

with Athread.Connection do //Avec la connection avec le client

begin //On commence

Fs1 := TFileStream.Create(Filename,fmOpenRead,fmShareDenyWrite); // On crée le flux

WriteLn('ok'); //On transmet le message 'ok'

WriteInteger(Fs1.Size); //On écrit la taille

WriteStream(Fs1); //On écrit le flux

end;

finally //Finalement

FreeAndNil(Fs1); //On libère le flux

AThread.Connection.Disconnect; //On déconnecte le serveur.

end;

end.
Commenter la réponse de Utilisateur anonyme
Messages postés
1649
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
7
0
Merci
salut francky,

et merci, mais comme je n'ai pas envore les yeux bien en face des trous
et que ce que tu m'as passé est assez copieux  je regarde ça dans
la journée et je te tiens au courant


@+

jlen
Commenter la réponse de jlen100
Messages postés
1649
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
7
0
Merci
salut francky,ça m'a l'air pas mal , je n'ai pas encore pu tester mais l'apprche me semble bonne.

toutefois par rapport aux mails il y a un bemol  (enfin si je ne
me plante pas)en effet il faut ici avoir un pc client sur lequel est
installé le dowloader ce qui limite les possibilités de consultation
alors que que dans le cas du mail il peut êter lu sur n'importe PC
connecté.


Ensuite je ne suis pas trop partisan pour ce genre d'utilisation des
alertes par Email dont les délais de transmission sont tout à fait
incontrolables cela peut peut prendre plusieurs minute voir plusieurs
heures ensuite on n'est pas toujours rivé à son écran ce qui fait que
les chances de pouvoir intrevenir (ne serait ce qu'avertir les képis
sont bien mince)je leur préfère nettement les alertes 
téléphoniques ( avec les protables on est joignable presque partout et
même sans modem vocal s'il y a un applel qui vie,t de chez toi alors
qu'il est sensé n'y avoir personne c'est qu'il y a un problème!!)


par contre cela m'intéresse quand même pour ajouter une fonctionnalité au programme.

en effet puisque l'on est  capable de récupérer des images on peut
interroger chaque caméra pour s'assurer que tout se passe bien même
sans alerte.


dernière petite question (mais là je crois que je rêve) : penses tu
qu'il serait possible de mettre l'application client dans une clef USB
et de la lancer sur n'importe quel PC (ce serait le pieds: tu arrives à
l'hotel à l'autre bout du monde et avant d'aller faire un plongeon dans
la piscine tu jettes un oeil pour voir si tout est OK chez toi!!


@+

jlen
Commenter la réponse de jlen100
0
Merci
Salut JLen,


*Par rapport au bémol, tu as entièrement raison. Donc les mails est solution meilleure c'est vrai.


*Le délai des emails, il me semble que dans le cas d'indy tu peux controler la priorité d'envois.


* "Par contre cela m'intéresse quand même pour ajouter une
fonctionnalité au programme.en effet puisque l'on est  capable de
récupérer des images on peut
interroger chaque caméra pour s'assurer que tout se passe bien même
sans alerte.". Oui c'est vrai donc si tu veux rajouter cette
fonctionnalité , ca pourrait etre un plus. Il est possible de
transferer l'image directement par un TMemoryStream et de l'afficher
sur un TImage sans passer par un TFileStream (j'ai un code sous la main
qui fonctionne, si tu veux je te le passe). Tu peux aussi visualiser
directement la webcam via un systeme client/serveur. J'ai aussi une
source la dessus qui fonctionne avec TCamera mais le TCamera se trouve
sur le client (Quand il est sur le serveur il y a un probleme au niveau
du timing : violation de mémoire. Problème du aux composants Indy).


*Pour la clé USB, rien ne t'empeche de mettre ton application client
sur une clé USB et de l'installer sur n'importe quel PC. Niveau taille
l'application n'est pas grosse et ne consomme pas beaucoup en CPU donc
pas besoin d'avoir un PC du tonnerre de Dieu. Cependant il y a une
restriction de taille : connaitre son adresse IP internet si tu es
derrière un proxy ca risque de poser probleme (comme toujours). Sinon
mettre le client ou le serveur (je parle pour le Download et le Upload)
dans une clé USB et l'utililiser sans installation sur le HDD je dis
OUI si tes images sont des JPEG (et encore meme avec une bmp ca doit
fonctionner). En effet l'utilisation des TFileStream "ne consomme pas
de ressources mémoires" à la différence des Blocks ou TMemoryStream.
N'ayant pas de clé USB je ne peux pas te dire. Si tu as une adresse
mail passe la moi en PV et je te file le source comme ca tu pourras
tester et de plus tu pourras essayer l'histoire de la clé USB si tu en
as une.


@+
Commenter la réponse de Utilisateur anonyme
0
Merci
Quant à faire autant en faire profiter tout le monde

1-Transfer d'un TImage du client vers un serveur


//////////

//Client//

//////////


procedure TForm1.Button1Click(Sender: TObject);

begin

IdTCPClient1.Host:=edit1.text; // L'adresse IP est le contenu de l'Edit1

IdTCPClient1.connect; // On connecte le client

end;


procedure TForm1.Button2Click(Sender: TObject);

begin

IdTCPClient1.disconnect; // On déconnecte le client

end;


procedure TForm1.Button3Click(Sender: TObject);

var

MS1:TMemoryStream; // On définit une variable MS1 comme un TMemoryStream

begin

MS1:=TMemoryStream.Create; // On créé le MemoryStream

Image1.Picture.graphic.SaveToStream(MS1); // On enregistre le contenu de Image1 dans MS1

With IdTCPClient1 do  // Avec le client on fait

Try // On essaye de

WriteStream(MS1); // Envoyer le MemoryStream

Finally // Finalement

MS1.Free; // On libère le Stream => L'image est envoyée

IdTCPClient1.disconnect; // On déconnecte le client

end;

end;


///////////

//Serveur//

///////////


procedure TForm1.Button4Click(Sender: TObject);

begin

IdTCPServer1.active:=true; // On connecte le serveur

end;


procedure TForm1.Button5Click(Sender: TObject);

begin

IdTCPServer1.active:=false; // On déconnecte le serveur

end;


procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);

var  // On définit les variables

MS2 : tmemorystream; // MS2 est un TMemoryStream

jpg2 : tjpegimage; // jpg2 est un TjpegImage => Attention on doit rajouter Jpeg dans les Uses

begin // On commence

MS2:= tmemorystream.Create; // On crée MS2

jpg2:= tjpegimage.Create; // On crée jp2

try // On essaye de

AThread.Connection.ReadStream(MS2, -1, true); // Récupérer le Stream du client dans MS2

MS2.Seek(0, soFromBeginning); // On se replace au début de MS2

jpg2.LoadFromStream(MS2); // On charge le Stream dans jpg2 qui est un JpegImage

image2.Picture.Graphic:= jpg2;  // On définit le contenu de Image2 comme jpg2

Finally // Finalement

jpg2.free;  // On libère jpg3

MS2.free;  // On libère MS2

end;

end;


2-Transfer de Webcam et récupération dans un TImage

//////////

//Client//

//////////


procedure TForm1.FormCreate(Sender: TObject);

begin

Camera1.Actif:=false; //On déconnecte la caméra : c'est une précaution

end;


procedure TForm1.Button1Click(Sender: TObject);

begin

Camera1.CaptureImageDisque; //On réalise une capture : penser avant à rentrer le nom du fichier image

Timer1.Enabled:=True; //On active le timer

end;


procedure TForm1.Button2Click(Sender: TObject);

begin

Timer1.Enabled:=False; //On arrette le timer : tout le processus est alors arretté

end;


procedure TForm1.Button3Click(Sender: TObject);

begin

Camera1.Actif:=true; //On connecte la caméra

end;


procedure TForm1.Timer1Timer(Sender: TObject);

Var

FS1:TFileStream; //On définit la variable FS1 comme un TFileStream

begin //On commence

IdTCPClient1.Host:=Edit1.text; //On définit l'adresse IP comme le contenu de l'Edit1

IdTCPClient1.Connect; //On connecte le client

FS1:=TFileStream.Create('C:\webcamclient.bmp',fmOpenRead); //On crée FS1 en lecture seulement

With IdTCPClient1 do //Avec le client on fait

Try //On essaye de

WriteInteger(FS1.Size); //D'envoyer la taille de FS1

WriteStream(FS1); //D'envoyer FS1

Finally //Finalement

FS1.Free; //On libère le stream

IdTCPClient1.disconnect; //On déconnecte le client sinon il n'y a pas de transfert

Camera1.CaptureImageDisque; //On capture l'image de la webcam

end;

end;


procedure TForm1.Button4Click(Sender: TObject);

begin

IdTCPServer1.Active:=true; //On connecte le serveur

end;


procedure TForm1.Button5Click(Sender: TObject);

begin

IdTCPServer1.Active:=false; //On déconnecte le serveur

end;


procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);

var //On définit les variables

FS2 : TFileStream; //FS2 est un TFileStream

I:integer; //I est un entier

jpg:TJPEGIMAGE; //jpg est TJpegImage => Attention dans les Uses il faut rajouter JPeg

bmp:TBitMap; //bmp est TBitMap

begin //On commence

bmp:=TBitMap.Create; //On crée bmp

jpg:= tjpegimage.Create; //On crée jpg

FS2:=TFileStream.Create('C:\webcamserveur.bmp',fmCreate); //On crée FS2 en mode création

try //On essaye

i:=AThread.Connection.ReadInteger(); //i est le réel lu par le serveur (alias la taille de FS1)

AThread.Connection.ReadStream(FS2,i,false);  //De lire les données et les placer dans FS2

Finally //Finalement

FS2.free; //On libère FS2

end;

Try //On essaye

bmp.LoadFromFile('C:\webcamserveur.bmp');//De charger le fichier image dans bmp

jpg.Assign(bmp); //D'assigner bmp à jpg

image1.Picture.Graphic:= jpg; //De définir jpg comme le contenu de Image1

Finally //Finalement

jpg.Free; //On libère jpg

bmp.Free; //On libère bmp

deleteFile('C:\webcamserveur.bmp'); //On détruit le fichier

end;

end;

end.


Ces deux sources fonctionnent.


En espérant t'avoir aidé un petit peu. Evidemment tu peux utiliser ses sources pleinement (il y a pas de soucis ).


@+
Commenter la réponse de Utilisateur anonyme
Messages postés
1649
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
7
0
Merci
oui on peut controler la rpiorité de l'envoi mais pour la transmission
réelle c'est un eautre histoire. Ceux qui veulent uitiliser cette
possibilité ils le peuvent comme on dit c'est "tendance' mais pour
l'efficacité .....

visualiser directement la webcam n'est pas nécessaire la plupart du
temps on a une image fixe de la pièce (heureusement!!) et une fréquence
de scan de 5/6 iimages/s est largement suffisante (en sureveillance
c'est bien souvent 2/3) en plus systématiquement je passe en jpeg
surtout que l'adsl n'est pas encore présent partout (à 500m de chez moi
il est out) alors dans certains pays n'en parlons pas j'avais regarder
TCamera mais pour la visualisation il n'utilise que le preview et il
n'implémente pas la capture à partir du memorystream prévu dans la dll
AVICAP. (il faudrait que je me penche dessus pour le compléter dans le
style de TVideocapture)

Pour l'adresse IP je crois qu'on doit pouvoir la récupérer (là je m'avance peut être un peu!!)


pour la clef  USB j'en ai qui me serve de dongle sur les machines
que je loue : le client n'a pas accès à windows et à la sortie du
programme d'exploitation je coupe le PC si la clef n'est pas présente.


si on arrive à intégrer ce module ce serait sans aucun doute un plus et
comme tout est fait en module l'intéragration ne devrait pas êter trop
compliquée d'autant que tout les traitements utilise déjà un tableau de
bitmap et qu'il suffira d' envoyer les images en JPEG dans un
Tfilestream (le tableau est déjà dans l'interface et je l'utilise pour
les alertes)


@+

jlen
Commenter la réponse de jlen100