| Autor |
Thema  |
|
|
UweK
PDA-Programmierer
 
24 Beiträge |
Erstellt am: 22.07.2010 : 13:07:05 Uhr
|
Hallo Leute, ich stehe mal wieder vor einem Problem... Hat jemand ein Beispiel wie man mittels CompactFramework die Anzahl sichtbarer Zeichen einer normalen Textbox ohne Multiline ermitteln kann? Ich benötige die Anzahl um eine Laufschrift zu erzeugen wenn der gesamte Text der TextBox länger ist als der sichtbare Text. Beim suchen bin ich auf ein Beispiel der API-Funktion GetTextExtentExPoint() gestoßen, welches sich aber auf die normale Windows API bezog. Die Funktion steht auch in der coredll im CompactFramework zur Verfügung, jedoch ist der Rückgabewert immer 0 :-/ Hier Codeausschnitte wie ich es mit VB versucht habe zu implementieren: <DllImport("coredll.dll")> _ Public Function GetTextExtentExPoint(ByVal DC As IntPtr, ByVal Str As String, ByVal Len As Integer, ByVal nMaxExtent As Integer, ByVal lpnFit As Integer(), ByVal alpDx As Integer(), ByVal size As stSize) As Integer End Function <StructLayout(LayoutKind.Sequential)> _ Public Structure stSize Public lx As Integer Public ly As Integer End Structure Private Function AnzahlNichtSichtbarerZeichen(ByVal TextBox As Microsoft.Dynamics.Mobile.Framework.Controls.TextBox) As Integer Dim lpnFit As Integer() Dim alpDx As Integer() Dim mySize As WinMobileApi.stSize mySize.lx = 0 mySize.ly = 0 TextBox.Text &= "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" Dim g As Graphics = TextBox.CreateGraphics() Dim DC As New IntPtr() DC = g.GetHdc() Dim nResult As Integer = WinMobileApi.GetTextExtentExPoint(DC, TextBox.Text, TextBox.TextLength, 80, lpnFit, alpDx, mySize) Return nResult End Function Hat jemand diese Funktion schonmal eingesetzt oder einen anderen Lösungsweg für mein Problem? Vielen Dank im Voraus für Eure Hilfe! LG, Uwe. |
|
| |
|
|
UweK
PDA-Programmierer
 
24 Beiträge |
|
|
Useless user
PDA-Spezialist
  
439 Beiträge |
|
|
UweK
PDA-Programmierer
 
24 Beiträge |
Erstellt am: 29.07.2010 : 17:23:20 Uhr
|
Hallo Useless User, vielen Dank für den Tipp, funktioniert prima!!! Aber schon steht das nächste Problem an... Ich prüfe nun also via MeasureString ob der Text > als der anzeigbare Text ist. Falls dem so ist, lasse ich den Text in Laufschriftmanier gesteuert über ein Timerobjekt "laufen". Das funktioniert auch soweit, nur "lahmt" die weitere Verarbeitung bzw. wenn ich z.B. auf ein listboxelement klicke wird die Verarbeitung nur sehr träge durchgeführt. Also dachte ich mir, lasse ich den Timer und somit auch die Laufschrift in einem separaten Thread laufen... Leider bekomme ich es nicht hin :-/ Kannst Du (oder sonst jemand hier) mir bitte in einem kurzen Beispiel zeigen wie das genau funktioniert? Nachfolgend der Code wie er derzeit im HauptThread funktioniert. With tlbTmpTextBox .Width = TouchListBox.Width .Height = UeberschriftElement.Height .Text = tlbUeberschrift .Font = UeberschriftElement.TextFont Grafik = .CreateGraphics GrafikGroesse = Grafik.MeasureString(.Text, .Font) If GrafikGroesse.Width > TouchListBox.Width Then AddHandler Timer.Tick, AddressOf Aktualisieren 'in Aktualisieren wird die Laufschrift gehandelt Timer.Interval = 300 Timer.Enabled = True Else Timer.Enabled = False End If End With Vielen Dank!!! Gruß, Uwe. |
 |
|
|
Useless user
PDA-Spezialist
  
439 Beiträge |
|
|
UweK
PDA-Programmierer
 
24 Beiträge |
|
|
Useless user
PDA-Spezialist
  
439 Beiträge |
|
| |
Thema  |
|