// Hiermit kann man ein TBitmap in ein TRichEdit einfügen
// (und dann speichern). Allerdings kann von dem TRichEdit
// nur wieder der reine Text geladen werden. Deshalb muss
// die gespeicherte Datei mit einem dafür vorgesehenen
// Programm geöffnet werden (z.B. Word).
// Man benötigt dafür die Unit RichBmp.
// Es kann auch festgestellt werden, wieviel Bilder sich im
// TRichedit befinden(siehe unten).



// Getestet mit RS 10.4 unter
Win11

uses RichBmp; 
 
var 
  BMP: TBitmap; 
 
  // Bitmap einsetzen ... 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  Screen.Cursor := crHourGlass; 
  BMP := TBitmap.Create; 
  BMP.LoadFromFile('D:\Bilder\032145.bmp'); 
  RichEdit1.Selstart := 100; // z.B. 
  InsertBitmapToRE(RichEdit1.Handle, BMP.Handle); 
  FreeAndNil(BMP); 
  RichEdit1.SetFocus; 
  Screen.Cursor := crDefault; 
end; 
 
// ... und sofort zurücksetzen 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
  RichEdit1.Undo; 
  RichEdit1.SetFocus; 
end; 
 
// Speichern 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
  RichEdit1.PlainText := False; 
  RichEdit1.Lines.SaveToFile('D:\Versuch.rtf'); 
  RichEdit1.SetFocus; 
end; 
 
// ---------------------Kursorabfrage-------------------------
// Kursor steht direkt rechts oder links neben dem Bild
// bzw. das Bild ist ausgewählt 
procedure AmImBild(RE: TRichEdit); 
var 
  c0, c1: Char; 
begin 
  with RE do 
  begin 
    try 
      c0 := lines[CaretPos.Y][CaretPos.X]; 
      c1 := lines[CaretPos.Y][succ(CaretPos.X)]; 
    except 
      c0 := #0; 
      c1 := #0; 
    end; 
  end; 
  if (c0 = #$FFFC) or (c1 = #$FFFC) then 
    showmessage('Bild'); // z.B. 
end; 
 
// Abfrage mit Strg+b 
procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char); 
begin 
  if (Key = #2) then 
    AmImBild(TRichEdit(Sender)); 
end;
 
// ------------------Bilderanzahl feststellen----------------------
function CountSubStr(const SubStr, Txt: String; Offset: Integer): Word; 
var 
  Lg: Integer; 
begin 
  Result := 0; 
  Lg := Length(SubStr); 
  repeat 
    Offset := System.StrUtils.PosEx(SubStr, Txt, Offset); 
    if Offset = 0 then 
      break; 
    Inc(Result); 
    Offset := Offset + Lg; 
  until False; 
end; 
 
function NrOfPic(RE: TRichEdit): Word; // Anzahl gefundener Bilder
var 
  SS: TStringStream; 
  M: Boolean; 
begin 
  SS := TStringStream.Create; 
  M := RE.PlainText; 
  RE.PlainText := False; 
  RE.Lines.SaveToStream(SS); 
  Result := CountSubStr('{\pict', SS.DataString, 1); 
  SS.Free; 
  RE.PlainText := M; 
end;
 
 


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke