Bonjour à tous, et a toutes
Dans mon projet j'ai une application client et une serveur qui communique via les composants IdTCPServer et IdTCPClient de Indy 10.
Dans une Unit commune j'ai déclarer un enregistrement que voici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 TServerInfos = packed record Name, Language: String[32]; PwdStr: String[8]; HasPwd: Boolean; Players: TPlayersArray; NbPlayers, MaxPlayers: Shortint; Comments: String[255]; Logo: TPicture; end;
Ici c'est le code du serveur qui envoi au client cette enregistrement
Du coté de l'application client je récupère les données....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 with SrvInfos do begin Name := edit_ServerName.Text; Language := cbx_language.Text; .... Logo := TPicture.Create; Logo.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Logos\logo.bmp'); //pas de pb, j'ai meme vérifier avec un TImage (Image1.Picture := Logo, ca marche bien end; { Envoi des données au client } with TCPClient_SrvInfos do begin try try Host := '127.0.0.1'; Connect; IOHandler.Write(RawToBytes(SrvInfos, SizeOf(TServerInfos))); except ShowMessage('Err de communication...'); end; finally Disconnect; end; end;
J'arive à récupérer toutes les données (String, Integer, Bool...) mais qd je veux utilisé l'objet Logo j'ai une erreur EAccessViolation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 procedure TClientMainForm.TCPServer_SrvInfosExecute(AContext: TIdContext); var ABuffer: TIdBytes; s: Smallint; begin { Récupération des infos du serveur } s := SizeOf(TServerInfos); SetLength(ABuffer, s); AContext.Connection.IOHandler.ReadBytes(ABuffer, s, False); Move(ABuffer[0], SrvInfos, s); { Affichage des données } with SrvInfos do begin lbl_ServerName.Caption := Name; lbl_Language.Caption := Language; lbl_Capacity.Caption := IntToStr(NbPlayers) + ' sur ' + IntToStr(MaxPlayers); try image_Logo.Picture := Logo; { c'est ici que ca bug } except image_Logo.Picture.Bitmap.Empty; end; end; end;
J'ai fait un projet vierge en utilisant la meme syntaxe mais avec juste l'envoi d'un TPicture et ca marche nikel mais dans mon projet si je remplace TServerInfos par TPicture et donc que j'envoi uniquement l'image ca ne fonctionne pas non plus! Ca fait plusieurs jours que je bloque et je vois pas d'où viens le pb.
HELP !!!!
Partager