|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Aug 2008
Messaggi: 25
|
[C#] Problema rendering caratteri in UserControl
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. [IMG]//Joss_xphp/temp/FormError.bmp[/IMG] 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: Codice:
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(); } } Il font utilizzato è un "Microsoft Sans Serif" 8 punti , ma il problema lo fa con qualsiasi font. |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
In questo momento non ho tempo di testare quindi questo è giusto un tiro alla cieca, ma hai considerato la possibilità che quei caratteri possano essere interpretati come parte di sequenze di escape in qualche punto? (magari dal codice GDI+ che usi per il rendering della stringa...)
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Aug 2008
Messaggi: 25
|
[C#] Problema rendering caratteri in UserControl
Grazie per la risposta ,
Si , ci ho pensato, ma non so come fare per testarlo. Non ho trovato nulla sulla GDI rispetto al mio caso. Se tu sai qualcosa in più ti ringrazio se puoi aiutarmi. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Domanda stupida : ma non potevi semplicemente implementare una TextBox nel tuo UserControl ?
![]() |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Aug 2008
Messaggi: 25
|
[C#] Problema rendering caratteri in UserControl
No , non potevo in quanto il TextBox ha troppi problemi , sia con i font che bloccano anche l'altezza del controllo . il disegno dei border perchè occorre intervenire sui create params WS_EX_CLIENTEDGE,WS_BORDER etc..
Visto che un controllo simile l'ho giò sviluppato in C++Builder ora volevo rifarlo in c#, solo che ho questo intoppo che vorrei risolvere (..spero ) comunque grazie |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Se è a singola linea, c'è un trucchetto per forzarne l'altezza : http://www.codeproject.com/KB/cs/Set...?display=Print Per il border, non ho chiaro cosa vuoi fare... |
|
![]() |
![]() |
![]() |
#7 |
Junior Member
Iscritto dal: Aug 2008
Messaggi: 25
|
Quel trucchetto l'ho già letto , e proprio perchè è un trucchetto non risolve il problema in generale. ( Il textBox è proprio un wrapper a un ActiveX) se è possibile non vorrei averci a che fare.
A me è sufficiente risolvere il problema del rendering. per il resto poi me la sbrigo da me ( .. se non ho altri intoppi ) |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:42.