Unit1.pas
上传用户:daoqigc
上传日期:2021-04-20
资源大小:2795k
文件大小:3k
源码类别:

RichEdit

开发平台:

Delphi

  1. unit Unit1;
  2. // Properties:
  3. // rvoTagsArePChars is added in Options
  4. // rvoCtrlJumps is added in EditorOptions
  5. // "Allow adding styles dynamically" in the "Settings" in the context menu
  6. // This code is highly simplified.
  7. // RichViewActions use much more advanced code for inserting hyperlinks.
  8. interface
  9. uses
  10.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  11.   RVStyle, RVScroll, RichView, RVEdit, Buttons, ExtCtrls, Unit2, CRVFData,
  12.   ShellApi, StdCtrls;
  13. type
  14.   TForm1 = class(TForm)
  15.     RichViewEdit1: TRichViewEdit;
  16.     RVStyle1: TRVStyle;
  17.     Panel1: TPanel;
  18.     SpeedButton1: TSpeedButton;
  19.     CheckBox1: TCheckBox;
  20.     procedure RichViewEdit1Select(Sender: TObject);
  21.     procedure SpeedButton1Click(Sender: TObject);
  22.     procedure RichViewEdit1Jump(Sender: TObject; id: Integer);
  23.     procedure FormCreate(Sender: TObject);
  24.     procedure CheckBox1Click(Sender: TObject);
  25.   private
  26.     procedure SetURLToSelection(const URL: String);
  27.     { Private declarations }
  28.   public
  29.     { Public declarations }
  30.   end;
  31. var
  32.   Form1: TForm1;
  33. implementation
  34. {$R *.DFM}
  35. procedure TForm1.RichViewEdit1Select(Sender: TObject);
  36. begin
  37.   SpeedButton1.Enabled := RichViewEdit1.SelectionExists and not RichViewEdit1.ReadOnly;
  38. end;
  39. procedure TForm1.SetURLToSelection(const URL: String);
  40. var i, StartNo, EndNo, StartOffs, EndOffs: Integer;
  41.     rve: TCustomRichViewEdit;
  42. begin
  43.   rve := RichViewEdit1.TopLevelEditor;
  44.   rve.GetSelectionBounds(StartNo, StartOffs, EndNo, EndOffs, True);
  45.   if StartOffs >= rve.GetOffsAfterItem(StartNo) then
  46.     inc(StartNo);
  47.   if EndOffs <= rve.GetOffsBeforeItem(EndNo) then
  48.     dec(EndNo);
  49.   rve.BeginUndoGroup(rvutTag);
  50.   rve.SetUndoGroupMode(True);
  51.   for i := StartNo to EndNo do
  52.     rve.SetItemTagEd(i, Integer(StrNew(PChar(URL))));
  53.   rve.SetUndoGroupMode(False);
  54. end;
  55. procedure TForm1.SpeedButton1Click(Sender: TObject);
  56. var URL: String;
  57. begin
  58.   URL := PChar(RichViewEdit1.GetCurrentTag);
  59.   if URL='' then
  60.     URL := 'http://';
  61.   Form2.Edit1.Text := URL;
  62.   if Form2.ShowModal=mrOk then begin
  63.     RichViewEdit1.ApplyTextStyle(4);
  64.     URL := Form2.Edit1.Text;
  65.     SetURLToSelection(URL);
  66.   end;
  67. end;
  68. procedure TForm1.RichViewEdit1Jump(Sender: TObject; id: Integer);
  69. var URL: String;
  70.     RVData: TCustomRVFormattedData;
  71.     ItemNo: Integer;
  72. begin
  73.   RichViewEdit1.GetJumpPointLocation(id, RVData, ItemNo);
  74.   URL := PChar(RVData.GetItemTag(ItemNo));
  75.   ShellExecute(0, 'open', PChar(URL), nil, nil, SW_SHOW);
  76. end;
  77. procedure TForm1.FormCreate(Sender: TObject);
  78. begin
  79.   RichViewEdit1.Clear;
  80.   RichViewEdit1.AddNL('Select text and click the button',0,0);
  81.   RichViewEdit1.Format;
  82. end;
  83. procedure TForm1.CheckBox1Click(Sender: TObject);
  84. begin
  85.   RichViewEdit1.ReadOnly := CheckBox1.Checked;
  86.   if CheckBox1.Checked then
  87.     RichViewEdit1.Color := clBtnFace
  88.   else
  89.     RichViewEdit1.Color := clWindow;
  90.   RichViewEdit1Select(Sender);
  91.   RichViewEdit1.SetFocus;
  92. end;
  93. end.