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++;
}
}
}
}