Insérer une image (bitmap) dans un richedit (rxrichedit)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 23 204 fois - Téléchargée 2 860 fois

Contenu du snippet

La fonction "BitmapToRtf" transforme une image bitmap en sa représentation Hexadécimale et ajoute les tags rtf.
La procédure "button1Click" utilise cette fonction et insère l'image dans le composant RxRichEdit (de la librairie RxLib).

Source / Exemple :


function BitmapToRtf(graph:TBitmap):string;
var
 bi, bb, rtf:string;
 bis, bbs:cardinal;
 achar:ShortString;
 HexGraph:string;
 I:Integer;
begin
 GetDIBSizes(graph.Handle, bis, bbs);
 SetLength(bi,bis);
 SetLength(bb,bbs);
 GetDIB(graph.Handle, graph.Palette, PChar(bi)^, PChar(bb)^);
 rtf:='{\rtf1 {\pict\dibitmap ';
 SetLength(HexGraph,(Length(bb) + Length(bi)) * 2);
 I:=2;
 For bis:=1 to Length(bi) do
 begin
  achar:=Format('%x',[Integer(bi[bis])]);
  if Length(achar)=1 then achar:='0'+achar;
  HexGraph[I-1]:=achar[1];
  HexGraph[I]:=achar[2];
  Inc(I,2);
 end;
 For bbs:=1 to Length(bb) do
 begin
  achar:=Format('%x',[Integer(bb[bbs])]);
  if Length(achar)=1 then achar:='0'+achar;
  HexGraph[I-1]:=achar[1];
  HexGraph[I]:=achar[2];
  Inc(I,2);
 end;
 rtf:=rtf + HexGraph + ' }}';
 Result:=rtf;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 SS:TStringStream;
begin
 SS:=TStringStream.Create(BitmapToRtf(Image1.Picture.Bitmap));
 RxRichEdit1.PlainText:=False;
 RxRichEdit1.StreamMode:=[smSelection];
 RxRichEdit1.Lines.LoadFromStream(SS);
 SS.Free;
end;

A voir également

Ajouter un commentaire Commentaires
Rubicode Messages postés 2 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 10 novembre 2004
10 nov. 2004 à 11:39
Désolé,
Petite erreur, veuillez remplacer RxRichedit1 par RETX, dans le commentaire précédent.
Rubicode Messages postés 2 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 10 novembre 2004
10 nov. 2004 à 11:33
Salut,
Pour que l'image soit enregistrée dans le fichier RTF, j'ai trouvé deux solutions:

if RxRichedit1 <> nil then
if saveDialog1.execute then
begin
retx.streamMode:=[smPlainRtf];
retx.Lines.SaveToFile(saveDialog1.fileName);
end;

ou encore

if RETX <> nil then
if saveDialog1.execute then
begin
retx.SelectAll;
retx.Lines.SaveToFile(saveDialog1.fileName);
retx.SetSelection(0,0,true);
end;
cs_subzero Messages postés 71 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 24 février 2012
31 oct. 2003 à 13:04
ARF!!! J'ai parlé trop vite je crois! En effet, la transparence est dispo que sur les GIFs, et il faut faire une convertion assez balaise, j'ai l"impression! Je passe par word pour récupérer le code RTF de l'image que j'insère tel quel... Je vais qu'en même essayer de trouver une solution, à+
cs_subzero Messages postés 71 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 24 février 2012
31 oct. 2003 à 11:29
Salut! J'ai trouvé le moyen pour intégrer des fichiers avec transparence! Cela engendre le fait que le fichier final est moins lourd, puisque les pixels trnasparents ne sont pas enregistrés dans le fichier. Je vais modifier votre code pour ajouter cette fonction, je vous avertis que ce sera au point! :-) à+
cs_subzero Messages postés 71 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 24 février 2012
29 oct. 2003 à 16:44
Merci Spatul pour cette astuce! Elle m'a permis de concretiser un projet de tchat avec des smilies & détection d'url. Je me demandais si on pouvait faire pareil avec d'autres type d'objets, comme des cadres par exemple... En fait, je recherche le moyen d'afficher plusieurs couleurs de fond dans le RxRichEdit, si vous pouviez m'aider, ce serait vraiment sympa! Merci, à+
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.