Aber irgendwie recht praktisch.
Code: Alles auswählen
Procedure.i StringGadgetX_CB(hwnd, msg, wParam, lParam)
Protected pbnr, oldproc = GetWindowLongPtr_(hwnd, #GWL_USERDATA)
Select msg
Case #WM_CTLCOLORSTATIC
SetTextColor_(wParam, #Red)
SetBkMode_(wparam, #TRANSPARENT)
ProcedureReturn GetStockObject_(#HOLLOW_BRUSH)
Case #WM_PARENTNOTIFY
pbnr = GetDlgCtrlID_(hwnd) ;Purebasicnr. abfragen
SetGadgetText(pbnr, "")
SetActiveGadget(pbnr)
EndSelect
ProcedureReturn CallWindowProc_(oldproc, hwnd, msg, wParam, lParam)
EndProcedure
Procedure.i StringGadgetX(gadget, x, y, br, hh, inhalt$, flags = 0)
Protected gadgetnr, gadgetid, returnnr, oldproc, rect.rect
Protected textnr, textid, tbr = 16
If gadget = #PB_Any
gadgetnr = StringGadget(#PB_Any, x, y, br, hh, inhalt$, flags|#ES_MULTILINE)
gadgetid = GadgetID(gadgetnr) ;es muß #ES_MULTILINE sein, sonst Probleme
returnnr = gadgetnr
Else
gadgetnr = gadget
gadgetid = StringGadget(gadget, x, y, br, hh, inhalt$, flags|#ES_MULTILINE)
returnnr = gadgetid
EndIf
textnr = TextGadget(#PB_Any, br - tbr -2, 0, tbr, hh-3, "X", #SS_NOTIFY|#SS_CENTER|#SS_CENTERIMAGE)
textid = GadgetID(textnr)
SetParent_(textid, gadgetid)
SetGadgetFont(textnr, #PB_Default) ;Textgadgetfont für das x auf Standard setzen
oldproc = SetWindowLongPtr_(gadgetid, #GWL_WNDPROC, @StringGadgetX_CB())
SetWindowLongPtr_(gadgetid, #GWL_USERDATA, oldproc)
SendMessage_(gadgetid, #EM_GETRECT, 0, rect)
rect\right - tbr + 3
SendMessage_(gadgetid, #EM_SETRECT, 0, rect)
ProcedureReturn returnnr
EndProcedure
; Zeigt mögliche Flags des StringGadgets in Aktion...
If OpenWindow(0, 0, 0, 322, 225, "StringGadget Flags", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadgetx(0, 8, 10, 306, 20, "Normal StringGadget...")
StringGadgetx(1, 8, 35, 306, 20, "1234567", #PB_String_Numeric)
StringGadgetx(2, 8, 60, 306, 20, "Readonly StringGadget", #PB_String_ReadOnly)
StringGadgetx(3, 8, 85, 306, 20, "lowercase...", #PB_String_LowerCase)
StringGadgetx(4, 8, 110, 306, 30, "uppercase...", #PB_String_UpperCase)
StringGadgetx(5, 8, 150, 306, 30, "Borderless StringGadget", #PB_String_BorderLess)
StringGadgetx(6, 8, 190, 306, 20, "Password geht nicht mehr, ist mir aber egal", #PB_String_Password)
SetGadgetColor(0, #PB_Gadget_BackColor, #Gray)
SetGadgetColor(1, #PB_Gadget_BackColor, #Yellow)
SetGadgetColor(2, #PB_Gadget_FrontColor, #Blue)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf