⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 与Action相结合,可以解决中文件显示乱码
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, RVStyle, RVScroll, RichView, RVEdit, CRVFData, RVTable;

const WM_SETCARETPOS = WM_USER+10;

type
  TForm1 = class(TForm)
    RichViewEdit1: TRichViewEdit;
    RVStyle1: TRVStyle;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    procedure RichViewEdit1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure RichViewEdit1DragDrop(Sender, Source: TObject; X,
      Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    Dragging: Boolean;
    procedure WMSetCaretPos(var Msg: TMessage); message WM_SETCARETPOS;
  public
    { Public declarations }
    procedure MoveCaretTo(X,Y: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.RichViewEdit1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TImage;
  // We cannot create/destroy inplace editors for cells just
  // in OnDragOver, so we position caret in OnWMSetCaretPos
  // We same technique should be used for OnMouseMove
  if Accept then
    PostMessage(Handle, WM_SETCARETPOS, X,Y);
end;

procedure TForm1.WMSetCaretPos(var Msg: TMessage);
begin
  MoveCaretTo(Msg.WParam, Msg.LParam);
end;

procedure TForm1.MoveCaretTo(X, Y: Integer);
var RVData: TCustomRVFormattedData;
    ItemNo, Offs: Integer;
begin
  inc(X, RichViewEdit1.HScrollPos);
  inc(Y, RichViewEdit1.VScrollPos*RichViewEdit1.VSmallStep);
  RichViewEdit1.GetItemAt(X,Y,RVData,ItemNo,Offs, False);
  RVData := RVData.Edit as TCustomRVFormattedData;
  if ItemNo<0 then
    exit;
  RVData.SetSelectionBounds(ItemNo, Offs, ItemNo, Offs);
  RVData.Invalidate;
end;

procedure TForm1.RichViewEdit1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
var bmp: TBitmap;
begin
  // Dragging is finished. Inserting picture.
  MoveCaretTo(X, Y);
  bmp := TBitmap.Create;
  bmp.Assign(TImage(Source).Picture.Bitmap);
  RichViewEdit1.InsertPicture('', bmp, rvvaBaseLine);
end;

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
    table: TRVTableItemInfo;
begin
  RichViewEdit1.Clear;
  RichViewEdit1.AddNL('This demo shows dragging TImage to TRichViewEdit using VCL drag&drop procedures.',2,0);
  RichViewEdit1.AddNL('TRichViewEdit has its own drag&drop implementation: '+
    'you can drag inside TRichViewEdit, '+
    'from TRichViewEdit to another window/application, '+
    'from another window/application to TRichViewEdit.',2,0);
  for i := 0 to 5 do
    RichViewEdit1.AddNL('Drag images from the right and drop them here',0,0);

  table := TRVTableItemInfo.CreateEx(1,2, RichViewEdit1.RVData);
  table.CellBorderWidth := 1;
  table.BorderWidth := 1;
  table.Cells[0,0].Clear;
  table.Cells[0,0].AddNL('Drag images from the right and drop them here',0,0);
  table.Cells[0,1].Clear;
  table.Cells[0,1].AddNL('Drag images from the right and drop them here',0,0);
  RichViewEdit1.AddItem('', table);

  for i := 0 to 50 do
    RichViewEdit1.AddNL('Drag images from the right and drop them here',0,0);
  RichViewEdit1.Format;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -