216 lines
6.2 KiB
C#
216 lines
6.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace TestWndProc
|
|
{
|
|
public partial class MyPanel : UserControl
|
|
{
|
|
#region Constructors
|
|
public MyPanel()
|
|
{
|
|
InitializeComponent();
|
|
myRTB1.LinkLocationsChanged += new RTBEvent(myRTB1_LinkLocationsChanged);
|
|
myRTB1.RTBSelectionChanged += new RTBEvent(myRTB1_RTBSelectionChanged);
|
|
myRTB1.RTBTextChanged += new RTBEvent(myRTB1_RTBTextChanged);
|
|
myRTB1.RTBRangeStatusChanged += new RTBEvent(myRTB1_RTBRangeStatusChanged);
|
|
SetRtfString();
|
|
}
|
|
#endregion
|
|
#region Debug
|
|
private bool _ShowDebug = true;
|
|
public bool ShowDebug
|
|
{
|
|
get { return _ShowDebug; }
|
|
set { _ShowDebug = value; }
|
|
}
|
|
private void DebugPrint(string where, string format, params object[] myParams)
|
|
{
|
|
DebugPrint(where + string.Format(format, myParams));
|
|
}
|
|
private void DebugPrint(string format, params object[] myParams)
|
|
{
|
|
if (_ShowDebug)
|
|
Console.WriteLine(format, myParams);
|
|
}
|
|
#endregion
|
|
#region RTB Event Handlers
|
|
void myRTB1_RTBTextChanged(object sender, EventArgs args)
|
|
{
|
|
DebugPrint("<=====RTBTextChanged");
|
|
if (_TextChanging == false)
|
|
{
|
|
_TextChanging = true;
|
|
tbRTF.Text = myRTB1.Rtf;
|
|
_TextChanging = false;
|
|
}
|
|
}
|
|
void myRTB1_RTBRangeStatusChanged(object sender, EventArgs args)
|
|
{
|
|
DebugPrint("<=====RTBRangeStatusChanged");
|
|
lblRangeStatus.Text = myRTB1.RTBRangeStatus.ToString();
|
|
}
|
|
void myRTB1_RTBSelectionChanged(object sender, EventArgs args)
|
|
{
|
|
DebugPrint("<=====RTBSelectionChanged");
|
|
ShowSelection();
|
|
UpdateNudsFromSelection();
|
|
}
|
|
void myRTB1_LinkLocationsChanged(object sender, EventArgs args)
|
|
{
|
|
DebugPrint("<<LinkLocationsChanged");
|
|
dgv.DataSource = myRTB1.LinkLocations;
|
|
}
|
|
#endregion
|
|
#region Setup Text
|
|
private void btnRefreshText_Click(object sender, EventArgs e)
|
|
{
|
|
SetRtfString();
|
|
}
|
|
private void SetRtfString()
|
|
{
|
|
myRTB1.Rtf = @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Arial;}}\r\n" +
|
|
@"\viewkind4\uc1\pard\sl-240\slmult0\f0\fs20 " +
|
|
@"\v <START]\v0 Link at start of box\v #Link data including URL\v0 \v [END>\v0 " +
|
|
@"Some text \v <START]\v0 Lonesome Link\v #Link data including URL\v0 \v [END>\v0 " +
|
|
@"Add some text before \v <START]\v0 First Link in between\v #Link data including URL\v0 \v [END>\v0 " +
|
|
@"\v <START]\v0 Second Link in between\v #Link data including URL\v0 \v [END>\v0 " +
|
|
@"\v <START]\v0 Third Link in between\v #Link data including URL\v0 \v [END>\v0 and some more text after " +
|
|
@"\v <START]\v0 Link at end of box\v #Link data including URL\v0 \v [END>\v0 " + @"\par}";
|
|
}
|
|
#endregion
|
|
#region Selection
|
|
private void ShowSelection()
|
|
{
|
|
lblFind.Text = string.Format("{0}-{1}", myRTB1.SelectionStart, myRTB1.SelectionStart + myRTB1.SelectionLength);
|
|
tbSelRTF.Text = myRTB1.SelectedRtf;
|
|
tbSelText.Text = myRTB1.SelectedText;
|
|
UpdateNudsFromSelection();
|
|
}
|
|
private void tbRTB_SelectionChanged(object sender, EventArgs e)
|
|
{
|
|
//lbTbSel.Text = string.Format("{0}, {1}", tbRTF.SelectionStart, tbRTF.SelectionLength);
|
|
}
|
|
private void tbRTF_SelectionChange(object sender, EventArgs e)
|
|
{
|
|
lbTbSel.Text = string.Format("{0}, {1}", tbRTF.SelectionStart, tbRTF.SelectionLength);
|
|
}
|
|
private void btnReplaceSelection_Click(object sender, EventArgs e)
|
|
{
|
|
myRTB1.SelectedText = tbWith.Text;
|
|
if (tbSendKeys.Text != "") SendKeys.Send(tbSendKeys.Text);
|
|
}
|
|
private void dgv_SelectionChanged(object sender, EventArgs e)
|
|
{
|
|
if (dgv.SelectedRows.Count == 1)
|
|
{
|
|
LinkLocation ll = myRTB1.LinkLocations[dgv.SelectedRows[0].Index];
|
|
myRTB1.SetSelection(ll);
|
|
}
|
|
}
|
|
#endregion
|
|
#region Numeric Up/Down
|
|
private void UpdateNudsFromSelection()
|
|
{
|
|
nudStart.Value = myRTB1.SelectionStart;
|
|
nudLength.Value = myRTB1.SelectionLength;
|
|
}
|
|
private void UpdateNuds(int start, int length)
|
|
{
|
|
nudStart.Value = start;
|
|
nudLength.Value = length;
|
|
}
|
|
private void UpdateSelectionFromNuds()
|
|
{
|
|
myRTB1.SetSelection((int)(nudStart.Value), (int)(nudLength.Value));
|
|
}
|
|
private void btnUpdateSel_Click(object sender, EventArgs e)
|
|
{
|
|
UpdateSelectionFromNuds();
|
|
myRTB1.Focus();
|
|
}
|
|
#endregion
|
|
#region Protection
|
|
private void myRTB1_Protected(object sender, EventArgs e)
|
|
{
|
|
MessageBox.Show("Cannot change protected text that way!");
|
|
}
|
|
private void btnProtectOn_Click(object sender, EventArgs e)
|
|
{
|
|
RTBAPI.Protect(myRTB1);
|
|
}
|
|
private void btnProtectOff_Click(object sender, EventArgs e)
|
|
{
|
|
RTBAPI.UnProtect(myRTB1);
|
|
}
|
|
#endregion
|
|
#region Button Handlers
|
|
private void btnBoldOn_Click(object sender, EventArgs e)
|
|
{
|
|
RTBAPI.ToggleBold(true, myRTB1, RTBAPI.RTBSelection.SCF_SELECTION);
|
|
}
|
|
private void btnBoldOff_Click(object sender, EventArgs e)
|
|
{
|
|
RTBAPI.ToggleBold(false, myRTB1, RTBAPI.RTBSelection.SCF_SELECTION);
|
|
}
|
|
private void btnLinkOn_Click(object sender, EventArgs e)
|
|
{
|
|
RTBAPI.Link(myRTB1);
|
|
}
|
|
private void btnLinkOff_Click(object sender, EventArgs e)
|
|
{
|
|
RTBAPI.UnLink(myRTB1);
|
|
}
|
|
private void btnFindAllLinks_Click(object sender, EventArgs e)
|
|
{
|
|
myRTB1.FindAllLinks();
|
|
}
|
|
#endregion
|
|
#region Text Change
|
|
private bool _TextChanging = false;
|
|
private void tbRTF_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if (_TextChanging == false)
|
|
{
|
|
_TextChanging = true;
|
|
myRTB1.Rtf = tbRTF.Text;
|
|
_TextChanging = false;
|
|
}
|
|
}
|
|
#endregion
|
|
#region Process Check Box
|
|
private void cbProcess_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
myRTB1.ProcessKeystrokes = cbProcess.Checked;
|
|
}
|
|
#endregion
|
|
|
|
private void btnPG_Click(object sender, EventArgs e)
|
|
{
|
|
frmPG myFrmPG = new frmPG(myRTB1);
|
|
myFrmPG.Show();
|
|
}
|
|
int hngIndent = 25;
|
|
private void btnSelHngIndent_Click(object sender, EventArgs e)
|
|
{
|
|
//myRTB1.SelectionHangingIndent = hngIndent;
|
|
//hngIndent += 25;
|
|
myRTB1.SelectAll();
|
|
myRTB1.SelectionHangingIndent = 0;
|
|
int indchar = 0;
|
|
while ((indchar = myRTB1.Find("@", indchar, RichTextBoxFinds.None)) >= 0)
|
|
{
|
|
Point indent = myRTB1.GetPositionFromCharIndex(indchar);
|
|
myRTB1.SelectionHangingIndent = indent.X;
|
|
indchar++;
|
|
}
|
|
}
|
|
}
|
|
}
|