Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Bild in RichEdit einfügen (https://www.delphipraxis.net/15874-bild-richedit-einfuegen.html)

Bobator 5. Feb 2004 16:25


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 swissdelphicenter:
Delphi-Quellcode:
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;
Das Problem ist, dass man später die Größe des Bildes ändern kann. Wie kann ich das Verhindern?

max 5. Mär 2004 12:31

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

mirage228 5. Mär 2004 13:22

Re: Bild in RichEdit einfügen
 
Du könntest es mal mit dem "RxRichEdit" aus der "RxLibrary" versuchen.

mfG
mirage228

max 5. Mär 2004 16:35

Re: Bild in RichEdit einfügen
 
hi,
das problem existiert leider auch mit dieser...

lg
XAM

Matze 5. Mär 2004 16:42

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.

max 7. Mär 2004 14:24

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

Die Muhkuh 7. Mär 2004 14:27

Re: Bild in RichEdit einfügen
 
Es geht mit beiden

max 9. Mär 2004 13:05

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 19:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz