Text bei der Eingabe ersetzen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
John Doe
Beiträge: 57
Registriert: 02.01.2006 18:08

Text bei der Eingabe ersetzen

Beitrag 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 ?
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Auslesen, überarbeiten, einschreiben.
Benutzeravatar
John Doe
Beiträge: 57
Registriert: 02.01.2006 18:08

Beitrag 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.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Code: Alles auswählen

new$=getgadgettext(x)
if new$<>old$
;Changecode
endif
old$=getgadgettext(x)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
John Doe
Beiträge: 57
Registriert: 02.01.2006 18:08

Beitrag 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 ???
Antworten