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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 22 425 fois - Téléchargée 2 858 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

Messages postés
2
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
10 novembre 2004

Désolé,
Petite erreur, veuillez remplacer RxRichedit1 par RETX, dans le commentaire précédent.
Messages postés
2
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
10 novembre 2004

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;
Messages postés
71
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
24 février 2012

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, à+
Messages postés
71
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
24 février 2012

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! :-) à+
Messages postés
71
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
24 février 2012

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.