wie kann man die Höhe eines EditorGadget dynamisch dem Inhalt unter Windows anpassen?
D.h. das Gadget soll nach unten wachsen bzw. schrumpfen - je nachdem wie viel Text eingegeben wird.
Danke für jeden Denkanstoß..
Code: Alles auswählen
Case #PB_Event_Gadget
Select EventGadget()
Case 1ResizeGadget(1, #PB_Ignore, #PB_Ignore, #PB_Ignore, CountGadgetItems(1)*14)

Code: Alles auswählen
EnableExplicit
Enumeration
#Wnd_Main
EndEnumeration
Enumeration
#Cnt_Window
;:Exit Button
#Btn_Exit
#Img_BtnExit
;:Minimize Button
#Btn_Minimize
#Img_BtnMinimize
;:Draw Header
#Header
#Img_Header
;:Window Title
#Titel
;:Draw Footer
#Footer
#Img_Footer
;:Font
#Fnt_SegoeUI12
#Fnt_Arial8
;: Nachricht Löschen
#Btn_Erase
#Img_BtnErase
#Cnt_Wrapper
#Str_OwnChatFenster
#Cnt_PopUp
#Str_PopUpChatFenster
#Txt_Time
#Txt_Del_Chat
#Img_Cnt_Window
EndEnumeration
;:Define Colors
#Wnd_Color = $353535 ; dark grey
#Col_Header = $5E4934 ; white
#Col_Footer = $452D18 ; mid grey
#Col_Text = $666667 ; black grey
#Col_Container = $605448 ; silver grey
#Col_Cont_Chat = $452D18 ; petrolblau
#Col_ChatTxt = $D6D6D6 ; bright grey
;:Window size
#Wnd_Width = 400 ; px
#Wnd_Height = 600 ; px
LoadFont(#Fnt_SegoeUI12, "Segoe Ui", 12, #PB_Font_HighQuality)
LoadFont(#Fnt_Arial8, "Arial", 8, #PB_Font_HighQuality)
Define Event, EventType, txt$, EventGadget, hoehe, hoehe2
Global lineheight = 24
Global ContainerMinheight = 90
Procedure.i Event_Exit() ; ExitBtn gedrückt oder Fenster bekommt Schliesssignal
End
EndProcedure
Procedure.i Event_Minimize() ; MinimizeBtn wurde geklickt
SetWindowState(#Wnd_Main, #PB_Window_Minimize)
EndProcedure
Procedure.i Event_Clear_Message() ; gesendete Nachricht löschen
SetGadgetText(#Str_PopUpChatFenster, "Nachricht wurde entfernt")
SetGadgetFont(#Str_PopUpChatFenster, FontID(#Fnt_Arial8))
Debug"x key pressed"
EndProcedure
Procedure.i WCB(hWnd, uMsg, wParam, lParam) ; #WM EVENTS NUR IN CALLBACK ABFRAGEN
Protected Result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_LBUTTONDOWN
If WindowMouseX(#Wnd_Main) >= 0 And WindowMouseX(#Wnd_Main) <= WindowWidth(#Wnd_Main)-2 And WindowMouseY(#Wnd_Main) >= 0 And WindowMouseY(#Wnd_Main) <= 61
SendMessage_(WindowID(#Wnd_Main), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
Procedure DropShadow(Window)
; (WindowsAPI) - Generiert bei einem randlosen Fenster einen Schatten
If IsWindow(Window)
SetClassLongPtr_(WindowID(Window), #GCL_STYLE, #CS_DROPSHADOW)
EndIf
EndProcedure
Procedure SystemButtons()
;EXIT BUTTON
CreateImage(#Btn_Exit, 60, 60)
StartDrawing(ImageOutput(#Btn_Exit))
FillArea(1, 1, -1, #Col_Header)
Line(3, 56, 54, -54, #White)
Line(3, 4, 54, 54, #White)
StopDrawing()
ImageGadget(#Img_BtnExit, WindowWidth(0)-61, 1, 60, 60, ImageID(#Btn_Exit))
;MINIMIZE BUTTON
CreateImage(#Btn_Minimize, 40, 20)
StartDrawing(ImageOutput(#Btn_Minimize))
FillArea(1, 1, -1, #Col_Header)
Line(0, 19, 40, 1, #White)
StopDrawing()
ImageGadget(#Img_BtnMinimize, WindowWidth(0)-110, 37, 40, 40, ImageID(#Btn_Minimize))
EndProcedure
Procedure Event_Btn_deleteMSG()
;Nachricht Löschen
CreateImage(#Btn_Erase, 20, 20)
StartDrawing(ImageOutput(#Btn_Erase))
FillArea(1, 1, -1, #Col_Cont_Chat)
Line(3, 8, 8, -8, $C6C6C6)
Line(3, 1, 8, 8, $C6C6C6)
StopDrawing()
ImageGadget(#Img_BtnErase, 325, 2, 20, 20, ImageID(#Btn_Erase))
EndProcedure
Procedure ResizeMessage()
Protected txt.s, hoehe.l
txt.s = GetGadgetText(#Str_PopUpChatFenster)
hoehe.l = CountGadgetItems(#Str_PopUpChatFenster) * lineheight
ResizeGadget(#Str_PopUpChatFenster,#PB_Ignore,#PB_Ignore,#PB_Ignore,hoehe)
EndProcedure
Procedure ResizeMsgContainer()
Protected txt2.s, hoehe2.l
txt2.s = GetGadgetText(#Str_PopUpChatFenster)
hoehe2.l = CountGadgetItems(#Str_PopUpChatFenster) * ContainerMinheight
ResizeGadget(#Cnt_PopUp,#PB_Ignore,#PB_Ignore,#PB_Ignore,hoehe2)
EndProcedure
Procedure main()
Protected txt$, hoehe
OpenWindow(#Wnd_Main, 510, 311, #Wnd_Width, #Wnd_Height, " ", #PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_Invisible)
SetWindowColor(#Wnd_Main, #Wnd_Color)
DropShadow(#Wnd_Main)
;:Entertaste abfragen
AddKeyboardShortcut(#Wnd_Main, #PB_Shortcut_Return, 15)
;HEADER
CreateImage(#Img_Header, WindowWidth(#Wnd_Main)-2, 60, 32, #Col_Header)
StartDrawing(ImageOutput(#Img_Header))
Box(0, 1, OutputWidth(), OutputHeight(), #Col_Header)
StopDrawing()
ImageGadget(#Header, 1, 1, 0, 0, ImageID(#Img_Header))
;disable to make it possible: grab with LMB Down
DisableGadget(#Header, #True)
;Set Window Title
TextGadget(#Titel, 10, 14, 160, 30, "Chat Preset", #SS_CENTER)
SetGadgetColor(#Titel, #PB_Gadget_BackColor, #Col_Header)
SetGadgetColor(#Titel, #PB_Gadget_FrontColor, #White)
SetGadgetFont(#Titel, FontID(#Fnt_SegoeUI12))
;Add all Gadgets here
CreateImage(#Img_Cnt_Window, 398, 405, 24, #Col_Container)
StartDrawing(ImageOutput(#Img_Cnt_Window))
Box(0, 1, OutputWidth(), OutputHeight(), #Col_Container)
StopDrawing()
ImageGadget(#Cnt_Window, 1, 62, 398, 405, ImageID(#Img_Cnt_Window))
DisableGadget(#Cnt_Window, #True)
;:Das eigene Chateingabe Feld
ContainerGadget(#Cnt_Wrapper, 1, 468, WindowWidth(#Wnd_Main)-2, 100, #PB_Container_BorderLess) ;{
SetGadgetColor(#Cnt_Wrapper, #PB_Gadget_BackColor, #Col_Cont_Chat)
StringGadget(#Str_OwnChatFenster, 40, 15, 318, 80, "", #PB_String_BorderLess|#ES_MULTILINE|#ESB_DISABLE_LEFT| #ES_AUTOVSCROLL|#ESB_DISABLE_RIGHT)
SetGadgetColor(#Str_OwnChatFenster, #PB_Gadget_BackColor, #Col_Cont_Chat)
SetGadgetColor(#Str_OwnChatFenster, #PB_Gadget_FrontColor, #Col_ChatTxt)
SetGadgetFont(#Str_OwnChatFenster, FontID(#Fnt_SegoeUI12))
CloseGadgetList() ;}
;:CHAT CONTAINER inkl Nachichten
ContainerGadget(#Cnt_PopUp, 30, 300, WindowWidth(#Wnd_Main)-60, ContainerMinheight, #PB_Container_BorderLess) ;{
SetGadgetColor(#Cnt_PopUp, #PB_Gadget_BackColor, #Col_Cont_Chat)
;:Chatfeld gesendeter Text
EditorGadget(#Str_PopUpChatFenster, 15, 35, 314, lineheight)
SetGadgetAttribute(#Str_PopUpChatFenster,#PB_Editor_WordWrap,#True)
SetWindowTheme_(GadgetID(#Str_PopUpChatFenster), @"", @"")
SetWindowLongPtr_(GadgetID(#Str_PopUpChatFenster), #GWL_EXSTYLE, 0)
SetWindowPos_(GadgetID(#Str_PopUpChatFenster), 0, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE | #SWP_FRAMECHANGED)
SetGadgetColor(#Str_PopUpChatFenster, #PB_Gadget_BackColor, #Col_Cont_Chat)
SetGadgetColor(#Str_PopUpChatFenster, #PB_Gadget_FrontColor, #Col_ChatTxt)
SetGadgetFont(#Str_PopUpChatFenster, FontID(#Fnt_SegoeUI12))
;:Zeige Uhrzeit der gesendeten Nachricht
txt$ = FormatDate("%hh:%ii", Date())
TextGadget(#Txt_Time, 15, 4, 50, 20, txt$)
SetGadgetColor(#Txt_Time, #PB_Gadget_BackColor, #Col_Cont_Chat)
SetGadgetFont(#Txt_Time, FontID(#Fnt_Arial8))
SetGadgetColor(#Txt_Time, #PB_Gadget_FrontColor, #Col_ChatTxt)
Event_Btn_deleteMSG()
CloseGadgetList() ;}
HideGadget(#Cnt_PopUp, #True)
;Footer
CreateImage(#Img_Footer, WindowWidth(#Wnd_Main)-2, 30, 32, #Col_Footer)
ImageGadget(#Footer, 1, WindowHeight(#Wnd_Main)-31, 0, 0, ImageID(#Img_Footer))
SystemButtons()
BindGadgetEvent(#Img_BtnMinimize, @Event_Minimize(), #PB_EventType_LeftClick)
BindGadgetEvent(#Img_BtnExit, @Event_Exit(), #PB_EventType_LeftClick)
BindGadgetEvent(#Img_BtnErase, @Event_Clear_Message(), #PB_EventType_LeftClick)
BindGadgetEvent(#Str_PopUpChatFenster,@ResizeMsgContainer(),#PB_EventType_Change)
BindGadgetEvent(#Str_PopUpChatFenster,@ResizeMessage(),#PB_EventType_Change)
SetWindowCallback(@WCB(), #Wnd_Main)
SetActiveGadget(#Str_OwnChatFenster)
HideWindow(#Wnd_Main, #False)
EndProcedure
main()
Repeat
Event = WaitWindowEvent()
Select Event()
Case #PB_Event_Menu
Select EventMenu()
Case 15
HideGadget(#Cnt_PopUp, #False)
If GetActiveGadget() = #Str_OwnChatFenster
SetGadgetText(#Str_PopUpChatFenster,GetGadgetText(#Str_OwnChatFenster))
SetGadgetFont(#Str_PopUpChatFenster, FontID(#Fnt_SegoeUI12))
SetGadgetText(#Str_OwnChatFenster, "")
Debug "Return key pressed"
EndIf
EndSelect
EndSelect
ForEver