![]() |
Bild in RichEdit einfügen
hi,
ich hab ein echt großes Problem an dem ich schon ein paar Monate sitze(sicher so wie jeder der ein neuen Thread öffnet:wink:). Ich will ein Bild in ein RichEdit einfügen. Als Komponente verwende ich TJvxRichEdit der JVCL. Zum Einfügen verwende ich diesen Code von ![]()
Delphi-Quellcode:
Das Problem ist, dass man später die Größe des Bildes ändern kann. Wie kann ich das Verhindern?
uses
RichEdit; // Stream Callback function type TEditStreamCallBack = function(dwCookie: Longint; pbBuff: PByte; cb: Longint; var pcb: Longint): DWORD; stdcall; TEditStream = record dwCookie: Longint; dwError: Longint; pfnCallback: TEditStreamCallBack; end; // RichEdit Type type TMyRichEdit = TRxRichEdit; // EditStreamInCallback callback function function EditStreamInCallback(dwCookie: Longint; pbBuff: PByte; cb: Longint; var pcb: Longint): DWORD; stdcall; // by P. Below var theStream: TStream; dataAvail: LongInt; begin theStream := TStream(dwCookie); with theStream do begin dataAvail := Size - Position; Result := 0; if dataAvail <= cb then begin pcb := read(pbBuff^, dataAvail); if pcb <> dataAvail then Result := UINT(E_FAIL); end else begin pcb := read(pbBuff^, cb); if pcb <> cb then Result := UINT(E_FAIL); end; end; end; // Insert Stream into RichEdit procedure PutRTFSelection(RichEdit: TMyRichEdit; SourceStream: TStream); // by P. Below var EditStream: TEditStream; begin with EditStream do begin dwCookie := Longint(SourceStream); dwError := 0; pfnCallback := EditStreamInCallBack; end; RichEdit.Perform(EM_STREAMIN, SF_RTF or SFF_SELECTION, Longint(@EditStream)); end; // Convert Bitmap to RTF Code function BitmapToRTF(pict: TBitmap): string; // by D3k var bi, bb, rtf: string; bis, bbs: Cardinal; achar: ShortString; hexpict: string; I: Integer; begin GetDIBSizes(pict.Handle, bis, bbs); SetLength(bi, bis); SetLength(bb, bbs); GetDIB(pict.Handle, pict.Palette, PChar(bi)^, PChar(bb)^); rtf := '{\rtf1 {\pict\dibitmap '; SetLength(hexpict, (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; hexpict[I - 1] := achar[1]; hexpict[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; hexpict[I - 1] := achar[1]; hexpict[I] := achar[2]; Inc(I, 2); end; rtf := rtf + hexpict + ' }}'; Result := rtf; end; // Example to insert image from Image1 into RxRichEdit1 procedure TForm1.Button1Click(Sender: TObject); var SS: TStringStream; BMP: TBitmap; begin BMP := TBitmap.Create; BMP := Image1.Picture.Bitmap; SS := TStringStream.Create(BitmapToRTF(BMP)); try PutRTFSelection(RxRichEdit1, SS); finally SS.Free; end; end; |
Re: Bild in RichEdit einfügen
hallo,
ich habe das gleiche prob... zudem freezed bei dem ausführen und anklicken der eingefügten bitmap windosen komplett ein... lg XAM |
Re: Bild in RichEdit einfügen
Du könntest es mal mit dem "RxRichEdit" aus der "RxLibrary" versuchen.
mfG mirage228 |
Re: Bild in RichEdit einfügen
hi,
das problem existiert leider auch mit dieser... lg XAM |
Re: Bild in RichEdit einfügen
Hi, oben ist die Rede von TJvxRichEdit, ich weiß nicht, ob's ein Tippfehler ist, falls ja, vergesst meinen Post. ;)
Es gibt dort auch die Jedi-Komponente: TJvRichEdit (wenn nicht die gemeint ist), mit der es gehen sollte. Der Code von Swissdelphicenter bezieht sich auf das TRxRichEdit. |
Re: Bild in RichEdit einfügen
hi
TJvxRichEdit ist die Migration von TRxRichEdit in Jedi... Demzufolge ist das Problem "nicht 100% readonly" leider auch dort vorhanden... lg XAM |
Re: Bild in RichEdit einfügen
Es geht mit beiden
|
Re: Bild in RichEdit einfügen
@spider:das einfügen eines images - logo -
aber wie verhindern das ein eingefügtes image als object bei mausaktion nicht skaliert wird - obwohl read only definiert... XAM |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz