Text input auto size height [Windows only]

Share your advanced PureBasic knowledge/code with the community.
User avatar
minimy
Enthusiast
Enthusiast
Posts: 613
Joined: Mon Jul 08, 2013 8:43 pm
Location: off world

Text input auto size height [Windows only]

Post by minimy »

Hello, this is a window and editor gadget for input text with autoresize height.
Greetings!!

Code: Select all

win= OpenWindow(#PB_Any,0,0,400,400,"test",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
tex= TextGadget(#PB_Any,0,0,400,30,"Test autoresize EditorGadget and window",#PB_Text_Center | #SS_CENTERIMAGE)
edi= EditorGadget(#PB_Any,0,30,WindowWidth(win),WindowHeight(win)-30,#PB_Editor_WordWrap)

txt.s= "Lorem ipsum dolor sit amet consectetur adipiscing elit duis cum class dictum, quis semper tincidunt magna sociosqu feugiat natoque parturient enim augue, accumsan urna nibh auctor hendrerit magnis felis arcu aptent laoreet. Facilisis vehicula dui gravida penatibus hendrerit habitasse donec lobortis eget, elementum taciti nunc potenti sem nullam class vestibulum volutpat hac, in faucibus tempor urna porttitor orci malesuada maecenas. Ante aliquet rhoncus vestibulum platea iaculis eleifend nullam consequat, scelerisque ridiculus sociosqu habitant torquent id imperdiet."
SetGadgetText(edi,txt)

l= CountGadgetItems(edi):oldl=l
hdc = GetDC_(GadgetID(edi)):tm.TEXTMETRIC:GetTextMetrics_(hdc, @tm)
slh= tm\tmHeight + tm\tmExternalLeading
ResizeWindow(win,#PB_Ignore,#PB_Ignore,#PB_Ignore,30 + slh * l):ResizeGadget(edi,#PB_Ignore,#PB_Ignore,#PB_Ignore,slh * l)

Repeat
  event= WindowEvent()
  
  Select event
    Case #PB_Event_Gadget
      eg=  EventGadget()
      et=    EventType()
      Select eg
        Case edi
          If et=#PB_EventType_Change
            l= CountGadgetItems(edi)
            If oldl<>l
              ResizeWindow(win,#PB_Ignore,#PB_Ignore,#PB_Ignore,30 + slh * l):ResizeGadget(edi,#PB_Ignore,#PB_Ignore,#PB_Ignore,slh * l)
              oldl=l
            EndIf
          EndIf
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      Break
      
  EndSelect
  
ForEver
If translation=Error: reply="Sorry, Im Spanish": Endif