Seite 1 von 1

Input Requester

Verfasst: 14.11.2011 21:29
von scoty
Hallo Forum,
ich spiele gerade mit dem Gedanken, einen eigenen Input-Requester zu bauen.
Grund ist, dass ich nicht den kompletten Defaulttext markiert haben möchte, sondern nur einen definierten Bereich daraus.
Kann mir hier die API helfen oder ist es einfacher was eigenes zu bauen?

Gruß Scoty

Re: Input Requester

Verfasst: 14.11.2011 22:04
von RSBasic
@scoty
Kommt drauf an. Wenn du eine plattformunabhängige Lösung haben möchtest, dann ist es sinnvoller, ein eigenes Fenster zu basteln.
Wenn nicht, dann:

Code: Alles auswählen

EnableExplicit

Define EventID
Define Text$

Procedure RequesterCallBack(hWnd, uMsg, wParam, lParam)
  hWnd = FindWindow_("InputRequester",#Null)
  If hWnd
    hWnd = FindWindowEx_(hWnd,#Null,"Edit",#Null)
    If hWnd
      SendMessage_(hWnd,#EM_SETSEL,5,15)
    EndIf
  EndIf

  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(1,10,10,100,20,"InputReq.",0)
  
  SetWindowCallback(@RequesterCallBack())
  
  Repeat
    EventID=WaitWindowEvent()
    If EventID=#PB_Event_Gadget
      Select EventGadget()
        Case 1
          Text$ = InputRequester("Text eingeben","Geben Sie einen Text ein:","Vordefinierter Text")
          If Text$
            Debug Text$
          EndIf
      EndSelect
    EndIf
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Das wolltest du doch oder?

(Das ist nur ein Beispiel, soll nur zeigen, dass man über FindWindow_() und SendMessage_() die Möglichkeit hat, ein paar Zeichen zu markieren. Um es richtig nutzen zu können, musst du das halt rauskopieren bzw. umändern, so dass es nicht "dauerhaft" markiert ist. Habs einfach mal testweise so geschrieben.)

Re: Input Requester

Verfasst: 14.11.2011 23:43
von shadow
Ich weiß nicht, ob es dir weiterhilft. Aber ich hatte mir vor paar Jahren nen eigenen Input-Requester gebastelt weil ich Passwort-Sternchen gebraucht habe.

Hier mal der Code:

Code: Alles auswählen

;********************************************************************************************
; Dieser Dialog nimmt eine Benutzereingabe entgegen und gibt diese zurück.
;
; Autor: A. R. 
; Erstellt: 16.06.2010
;********************************************************************************************

EnableExplicit

Procedure.s InputDlg(title$, msg$, flags.l, parent.l = 0, def$ = "", width.l = 300, height.l = 90)
	Protected.l Window = 0, Text_Message = 0, String_Content = 0, Button_OK = 0
	Protected quit.b = #False, event.l
	#Menu_Return = $10
	
	Window = OpenWindow(#PB_Any, 0, 0, width, height, title$, #PB_Window_ScreenCentered, parent)
	If Not Window
		ProcedureReturn ""
	EndIf
	
	;- create gadgets
	Text_Message = TextGadget(#PB_Any, 10, 10, width - 20, 20, msg$)
	String_Content = StringGadget(#PB_Any, 10, 30, width- 20, 20, def$, flags)
	Button_OK = ButtonGadget(#PB_Any, width/2 - 50, 60, 100, 25, "OK")
	AddKeyboardShortcut(Window, #PB_Shortcut_Return, #Menu_Return)
	
	SetActiveGadget(String_Content)
	
	Repeat
		event = WaitWindowEvent()
		Select event
			Case #PB_Event_Menu
				Select EventMenu()
					Case #Menu_Return
						quit = #True
				EndSelect
			Case #PB_Event_Gadget
				Select EventGadget()
					Case Button_OK
						quit = #True
				EndSelect
			Case #PB_Event_CloseWindow
				quit = #True
		EndSelect 
	Until quit = #True
	
	def$ = GetGadgetText(String_Content)
	CloseWindow(Window)
	
	ProcedureReturn def$
EndProcedure
Naja, ist recht simpler Code. Da ist keine weitere Erklärung wohl nötig...

Re: Input Requester

Verfasst: 15.11.2011 11:55
von scoty
Hallo,
danke für die schnellen Antworten. Es wird sicherlich auf den eigenen Requester hinauslaufen, in dem ich dann gleich per Parameter mit Defaultwerten meine zusatzinformationen übergeben kann.

Gruß Scoty