rvico TRichView Reference | TRichViewEdit

Example: Using OnDropFiles to accept files of different formats

Top  Previous  Next

By default, TRichViewEdit accepts the following types of dropped files:

graphics,

RVF,

RTF,

plain text (ANSI).

This example shows how to use OnDropFiles event to insert all these types of files, and all file formats supported by installed Microsoft Office text import converters.

This example assumes that RVOfficeConverter1:TRVOfficeConverter is placed on the form.

procedure TForm1.RichViewEdit1DropFiles(Sender: TCustomRichViewEdit;

  Files: TStrings; var FileAction: TRVDropFileAction;

var DoDefault: Boolean);

  {....................................................}

  { This function inserts one file FileName }

  function InsertFile(const FileName: String): Boolean;

  var pic: TPicture;

  gr: TGraphic;

  Ext: String;

  i: Integer;

  begin

    Result := False;

    try

      // 1. Trying to insert as a graphic

      pic := TPicture.Create;

      try

        pic.LoadFromFile(FileName);

        gr := RV_CreateGraphics(TGraphicClass(pic.Graphic.ClassType));

        gr.Assign(pic.Graphic);

        Sender.InsertPicture('', gr, rvvaBaseline);

        Result := True;

      except;

      end;

      pic.Free;

      if Result then

        exit;

      // 2. Trying to insert as RTF file

      Ext := LowerCase(ExtractFileExt(FileName));

      if Ext='.rtf' then begin

        Sender.InsertRTFFromFileEd(FileName);

        Result := True;

        exit;

      end;

      // 3. Trying to insert as RVF file

      if Ext='.rvf' then begin

        Sender.InsertRVFFromFileEd(FileName);

        Result := True;

        exit;

      end;

      // 4. Trying to insert as text file

      if Ext='.txt' then begin

        Sender.InsertTextFromFile(FileName);

        Result := True;

        exit;

      end;

      // 5. Trying to insert using office converters

      for i := 0 to RVOfficeConverter1.ImportConverters.Count-1 do

        if Pos(Ext, RVOfficeConverter1.ImportConverters[i].Filter)>0 then

          if RVOfficeConverter1.ImportRTF(FileName, i) then begin

            RVOfficeConverter1.Stream.Position := 0;

            Sender.InsertRTFFromFileEd(RVOfficeConverter1.Stream);

            RVOfficeConverter1.Stream.SetSize(0);

            Result := True;

            exit;

          end;

    except

    end;

  end;

  {....................................................}

var i: Integer;

begin

  for i := 0 to Files.Count-1 do

    InsertFile(Files[i]);

  DoDefault := False;

end;


TRichView © trichview.com