gpnet
05-03-2009, 13:09
Ciao a tutti,
Ho iniziato ascriver un controllo derivato da UserControl dove ho la necessità di far scrivere del testo nella clientArea all'utente ( tipo textbox).
la scrittura del testo e il relativo rendering lo faccio nella funzione OnPaint con una chiamata alla funzione :
g.DrawString(FInternalText, Font, brushText, 2, 2);
Ho notato che il tutto funziona bene fino a che non si immettono i caratteri / e \ ( slash e backslash). In questo caso il rendering viene sbagliato.
//Joss_xphp/temp/FormError.bmp
La cosa stana è che ad ogni aggiunta di uno dei due caratteri / o \ il testo visualizzato si restringe. Il cursore invece si posiziona correttamente.
preciso che il calcolo della posizione del cursore lo faccio chiamando la funzione nativa GetTextExtentPoint32( IntPtr hdc, string Text, int Length, ref SIZE size);
.. che mi pare funzioni bene.
Il problema quindi mi pare solo il rendering legato alla clientArea di UserControlo.
Qualcuno mi può aiutare ?.
per completezza aggiungo il codice interessato:
public partial class myNote : UserControl
{
private int iCursor;
public myNote ()
{
InitializeComponent();
iCursor = 0;
}
protected override void OnPaint(PaintEventArgs e)
{
SolidBrush brushText;
Pen tPen ;
Graphics g;
base.OnPaint(e);
g = e.Graphics;
brushText = new SolidBrush(ForeColor);
g.DrawString(FInternalText, Font, brushText, 2, 2);
SIZE size = GetStringSize(FInternalText.Substring( 0, iCursor ), 0, Font );
xCaret = size.cx;
caret.Position = new Point( xOffset +size.cx , 2);
caret.Show();
}
protected override void OnKeyPress( KeyPressEventArgs ea )
{
FInternalText = FInternalText.Substring( 0,iCursor ) + ea.KeyChar + FInternalText.Substring(iCursor);
Invalidate();
}
}
la varibile iCursor viene incrementata o diminuita nella funzione OnKeyDown.
Il font utilizzato è un "Microsoft Sans Serif" 8 punti , ma il problema lo fa con qualsiasi font.
Ho iniziato ascriver un controllo derivato da UserControl dove ho la necessità di far scrivere del testo nella clientArea all'utente ( tipo textbox).
la scrittura del testo e il relativo rendering lo faccio nella funzione OnPaint con una chiamata alla funzione :
g.DrawString(FInternalText, Font, brushText, 2, 2);
Ho notato che il tutto funziona bene fino a che non si immettono i caratteri / e \ ( slash e backslash). In questo caso il rendering viene sbagliato.
//Joss_xphp/temp/FormError.bmp
La cosa stana è che ad ogni aggiunta di uno dei due caratteri / o \ il testo visualizzato si restringe. Il cursore invece si posiziona correttamente.
preciso che il calcolo della posizione del cursore lo faccio chiamando la funzione nativa GetTextExtentPoint32( IntPtr hdc, string Text, int Length, ref SIZE size);
.. che mi pare funzioni bene.
Il problema quindi mi pare solo il rendering legato alla clientArea di UserControlo.
Qualcuno mi può aiutare ?.
per completezza aggiungo il codice interessato:
public partial class myNote : UserControl
{
private int iCursor;
public myNote ()
{
InitializeComponent();
iCursor = 0;
}
protected override void OnPaint(PaintEventArgs e)
{
SolidBrush brushText;
Pen tPen ;
Graphics g;
base.OnPaint(e);
g = e.Graphics;
brushText = new SolidBrush(ForeColor);
g.DrawString(FInternalText, Font, brushText, 2, 2);
SIZE size = GetStringSize(FInternalText.Substring( 0, iCursor ), 0, Font );
xCaret = size.cx;
caret.Position = new Point( xOffset +size.cx , 2);
caret.Show();
}
protected override void OnKeyPress( KeyPressEventArgs ea )
{
FInternalText = FInternalText.Substring( 0,iCursor ) + ea.KeyChar + FInternalText.Substring(iCursor);
Invalidate();
}
}
la varibile iCursor viene incrementata o diminuita nella funzione OnKeyDown.
Il font utilizzato è un "Microsoft Sans Serif" 8 punti , ma il problema lo fa con qualsiasi font.