wenn noch akkut, ich hatte mal angefangen einen Chat machen zu wollen aber bin daran gescheitert, dass ein höheres Nachrichtenfeld nicht nach oben verschoben wird im Nachrichtenfeld wenn man Enter drückt.
Gibt man also eine Zeile ein und drückt enter, erscheint die Nachricht wie bei Skype oben.
Ist nun aber die Nachricht mehrzeilig, passt sich zwar die Größe (Höhe) an aber das ganze Feld müsste natürlich auch nach oben rutschen.
Schwer zu erklären aber evtl hilft der Ansatz und oder jemand bekommt es sogar hin, den Code so zu modden das er das macht wie es eigtl funzen soll
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