Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Placer des données d'un TFileStream dans un TMemoryStream [ Divers / Aide et documentation ] (christophedlr)

samedi 26 juillet 2008 à 20:12:56 | Placer des données d'un TFileStream dans un TMemoryStream

christophedlr

Membre Club
Bonsoir, Je voudrais dans mon programme, lire un fichier don les données que le lis sont transféré vers un TMemoryStream afin de pouvoir les placer ensuite dans un TRichEdit avec un LoadFromStream. Voici le code de la fonction qui foire (C'est une DLL que j'ai créer pour mon programme) : procedure TFormatFEF.LoadFromFile(var RichEdit: TRichEdit); export; var Size: Integer; MemoryStream: TMemoryStream; begin MemoryStream := TMemoryStream.Create; if (ReadFile = False) then begin MessageDlg('Vous ne pouvez pas appeler une fonction de lecture en demandant'+ ' une écriture du projet', mtError, [mbok], 0); Exit; end; FileStream.ReadBuffer(Size, 4); //Lit la taille FileStream.ReadBuffer(MemoryStream, Size); //Lit le contenu pour le RichEdit RichEdit.Lines.LoadFromStream(MemoryStream); //Inscrit dans le RichEdit end; Avec le debugueur, j'ai regardé MemoryStream, il reste à () donc à priori il a instancié sans problème (pas de réponse nil de sa part). Mais quand il passe sur ma ligne : RichEdit.Lines.LoadFromStream(MemoryStream); Là il me renvoi une violation d'accès. Ce que j'en conclut c'est qu'il n'arrive pas à lire les données du TMemoryStream. Merci d'avance pour l'aide. P.S. : Foxi et les autres, vous êtes contents ? J'utilse les streams pour la seconde version de mon projet FicEditor ;)

samedi 26 juillet 2008 à 21:32:04 | Re : Placer des données d'un TFileStream dans un TMemoryStream

Bacterius

Membre Club
Bonjour,
euh ouais il existe une touche, qui est située au dessus du shift droit, et en dessous de la touche Retour Arrière, qui permet de faire un saut de ligne, et ainsi aérer le message  parce que là c'est pas facile à lire ...
Oui vous avez deviné c'est la touche Entrée !

Bon sinon, pour transferer des données d'un fichier jusqu'à un TMemoryStream, tu peux procéder ainsi :

MemoryStream.LoadFromFile([tonfichier]);
RichEdit.Lines.LoadFromStream(MemoryStream);

A mon avis ca devrait marcher !
Mais je ne sais pas si ça va rester stable jusqu'au bout ...

Cordialement, Bacterius !

Copyright = RIGHT TO COPY


samedi 26 juillet 2008 à 21:34:20 | Re : Placer des données d'un TFileStream dans un TMemoryStream

Bacterius

Membre Club

Re, ah ouais j'avais pas vu le TFileStream ...

Pourquoi ne pas charger directement depuis un fichier tout simplement ? Pourquoi se compliquer la vie avec un TFileStream ?

Enfin si ma méthode ne convient pas à tes besoins fais-le moi savoir, d'autres personnes détiennent sûrement la clé de la vérité (ooh me voila poète !). ouais bon, ... clé de la solution ... (vexé).
J'espère quand même t'avoir aidé :p

Cordialement, Bacterius !

Copyright = RIGHT TO COPY


samedi 26 juillet 2008 à 21:34:51 | Re : Placer des données d'un TFileStream dans un TMemoryStream

christophedlr

Membre Club
Pour la touche entrée, il semble que se soit un nl2br qui soit manquant sur le forum car dans la fenêtre de rédaction du message j'avais bien mes retours à la ligne. Pour mon problème, en fait j'ai une certaine structure sur mon fichier, je dois lire la taille des données qui est enregistré et après le lit count octets renvoyé par la lecture de la taille. Donc je ne peux pas faire directement un LoadFromFile d'où mon utilisation de TFileStream couplé avec TMemoryStream.

samedi 26 juillet 2008 à 23:01:19 | Re : Placer des données d'un TFileStream dans un TMemoryStream

christophedlr

Membre Club
Réponse acceptée !
Problème résolu.

A la place du ReadBuffer j'utilise un CopyFrom et ça fonctionne.

Voici donc le nouveau code (qui lui est fonctionnel) :
procedure TFormatFEF.LoadFromFile(var RichEdit: TRichEdit);
var
Size: Integer;
MemoryStream: TMemoryStream;
begin
MemoryStream := TMemoryStream.Create;

if (ReadFile = False) then
begin
MessageDlg('Vous ne pouvez pas appeler une fonction de lecture en demandant'+
' une écriture du projet', mtError, [mbok], 0);
Exit;
end;

FileStream.ReadBuffer(Size, 4); //Lit la taille
MemoryStream.CopyFrom(FileStream, Size); //Copie les données dans le TMemoryStream
RichEdit.Lines.LoadFromStream(MemoryStream); //Inscrit dans le RichEdit
MemoryStream.Free;
end;

Merci quand même à ceux qui ont tenté de m'aider.

samedi 26 juillet 2008 à 23:14:35 | Re : Placer des données d'un TFileStream dans un TMemoryStream

Bacterius

Membre Club
Bonsoir, ah oui CopyFrom n'était pas mal non plus ^^
Bon ben ton problème est résolu, n'oublie pas de t'auto-valider ta réponse ^^
Bonne prog'

Cordialement, Bacterius !

Copyright = RIGHT TO COPY


samedi 26 juillet 2008 à 23:17:01 | Re : Placer des données d'un TFileStream dans un TMemoryStream

Bacterius

Membre Club
Juste une question : pourquoi tu concatènes le contenu de la MessageDlg ? :

MessageDlg('Vous ne pouvez pas appeler une fonction de lecture en demandant'+
' une écriture du projet'
, mtError, [mbok], 0);
end;

Je me rappelles que tu utilises une DLL, c'est pour un souci de taille de String que tu concatènes ? (256 caractères max pour PChar). Je voudrais bien comprendre ...

Cordialement, Bacterius !

Copyright = RIGHT TO COPY


samedi 26 juillet 2008 à 23:20:44 | Re : Placer des données d'un TFileStream dans un TMemoryStream

christophedlr

Membre Club
En fait je concatène car je préfère garder une taille de 80 caractères au maximum par ligne.
Du coup comme cela dépasse, je concatène afin de séparer sur plusieurs lignes.
La limite de 80 caractères maxi sur la ligne me permet de tous voir sans bouger l'ascenseur (et pourtant je suis en 1280x1024).

samedi 26 juillet 2008 à 23:43:21 | Re : Placer des données d'un TFileStream dans un TMemoryStream

Bacterius

Membre Club
Bonjour,
ah ok c'est pour une raison de confort !
je pensais qu'il s'agissait d'une limite technique de passage en paramètre dont j'aurais ignoré l'existence (comme le passage maximum de 256 caractères en SharedMem, donc PChar ou shortstring plutot que String).
Bon ben bonne fin de soirée :p

Cordialement, Bacterius !

Copyright = RIGHT TO COPY




Cette discussion est classé dans : données, placer, richedit, memorystream, tmemorystream


Répondre à ce message

Sujets en rapport avec ce message

Passer des objets à une DLL [ par christophedlr ] Bonsoir, A la suite du problème que j'avais ici : http://www.delphifr.com/infomsg_PLACER-DONNEES-TFILESTREAM-DANS-TMEMORYSTREAM_1178462.aspx J'ai un Problème avec un TMemoryStream [ par Bestiol ] Salut à tous !!!J'utilise dans mon prog un TMemoryStream, dont j'aimerais modifier la taille avec SetSize... Le seul problème c'est que les données co TMemoryStream [ par informatixo ] Bonjour,Voilà, je sauve le texte d'un richedit dans dans un TMemoryStream par le biais de SaveToStream.Ensuite, pour vérifier que tout fonctionne j'ef Crée dynamiquement un tab et y placer 2 RichEdit [ par taye78 ] Salut, j'aimerais savoir comment crée dynamiquement un tab (ds un TabbedNotebook) enfin sa encore je sais comment faire (NomDuControle.Pages.Add();) m Tmemorystream et mediaplayer [ par zjb ] J'ai un problème lorsque j'utlise un tmediaplayer et que je souhaite charger un son à partir d'un stream, il ne les charges qu'a partir d'un chemin su pagecontrol et richedit [ par cyberphp ] salut,je voudrais savori comment faire pour quand je clique sur un bouton nouveau, sa m'ajoute un onglet a un pagecontrol et dessus, j'ai un richedit Problème de DELETE sur db4 avec ADO [ par barttabac ] Slt à tous,J'utilise une base de données db4 en utilisant ADO, sous Delphi 6. Pour faire des INSERT ou UPDATE, pas de problème, tout se passe bien.Par envoie de données attachées à un message [ par nicolaspennaneach ] Je souhaite transmettre une structure attachée à un message.peut-on utiliser CopyDataStruct avec des messages que l'on se défini comme par exemple WM_ bases de données: "Aucun index actif actuellement" [ par niko72 ] Bonjour à tous les amis du Delphi,je ne connais à peu près rien en gestion de bases de données,sur un"TableG.FindKey([tache,fonction,operation])",Delp Utiliser données d'une boite de dialogue [ par kisskool ] Bon, j'avais posté un message hier mais on m'a envoyé pleins de message pour me dire qu'on avait pas bien capté ce que je voulais . Alors voici une ve


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.