Seite 1 von 1

Text bei der Eingabe ersetzen

Verfasst: 25.01.2006 16:29
von John Doe
Hallo,
wie kann ich in einem Editorgadget den Text direkt bei der Eingabe ersetzen.
Ich möchte, daß bei der direkten Texteingabe der Text in einer Zeile solange in Großbuchstaben umgewandelt wird, bis das Zeichen ";" eingegeben wird.
Ist dies mit den normalen Purebasic-Libraries möglich ?

Verfasst: 25.01.2006 16:32
von Macros
Auslesen, überarbeiten, einschreiben.

Verfasst: 25.01.2006 16:43
von John Doe
Dies erscheint mir etwas umständlich und wie teile ich dem Programm nach jedem Tastenschlag mit das der Text geändert wurde und das Programm darauf ggf. mit Textänderung reagieren soll.

Verfasst: 25.01.2006 16:45
von Macros

Code: Alles auswählen

new$=getgadgettext(x)
if new$<>old$
;Changecode
endif
old$=getgadgettext(x)

Verfasst: 25.01.2006 17:20
von Kiffi
mal so auf die schnelle mit im Board zusammengeklauten Code:

Code: Alles auswählen

Global oldProc

#frmMain = 0
#txtInput = 1

Procedure WatchStringGadget(hWnd,Msg,wParam,lParam) 
  
  If Msg = #WM_KEYUP
    
    myString$ = GetGadgetText(#txtInput)
    
    If myString$
      
      SemikolonPos = FindString(myString$, ";", 1)
      
      If SemikolonPos
        
        LinkerTeil$  = UCase(Left(myString$, SemikolonPos-1))
        RechterTeil$ = Mid(myString$, SemikolonPos + 1, Len(myString$))
        
        SendMessage_(GadgetID(#txtInput), #EM_GETSEL, @startpos.l, @endpos.l) 
        SetGadgetText(#txtInput, LinkerTeil$ + ";" + RechterTeil$)
        SendMessage_(GadgetID(#txtInput), #EM_SETSEL, startpos, endpos)
        
      EndIf
      
    EndIf
    
  EndIf
  
  ProcedureReturn CallWindowProc_(oldProc,hWnd,Msg,wParam,lParam) 
  
EndProcedure


OpenWindow(#frmMain, 0, 0, 200, 30, #PB_Window_ScreenCentered | #PB_Window_SystemMenu , "")
CreateGadgetList(WindowID(#frmMain))
StringGadget(#txtInput, 5, 5, 190, 20, "")
ActivateGadget(#txtInput)

oldProc = SetWindowLong_(GadgetID(#txtInput),#GWL_WNDPROC,@WatchStringGadget()) 

Repeat
  
Until WaitWindowEvent()=#PB_Event_CloseWindow

Verfasst: 25.01.2006 17:53
von John Doe
Hallo Macros, Hallo Kiffi
funktioniert beides einwandfrei, jedoch nur in einem normalen Fenster innerhalb eines Windows.
In meinem Programm befindet sich im Window ein Panelgadget, welches auf jedem Panel ein EditorGadget besitzt.
Wenn ich nun versuche mittels

Code: Alles auswählen

SendMessage_(GadgetID(GadgetID) , #EM_GETMODIFY , 0 , 0)
eine Textänderung im Editirgadget zu erfassen, erhalte ich als Resultat nur -1, egal ob ich eine Änderung mache oder nicht.
Solange ich keine Textänderung erfassen kann, klappt's auch nicht mit der weiteren Verarbeitung des Textes
Kann mir dabei vielleicht jemand helfen ???