Ich sehe gerade erst, daß ihr noch geantwortet habt von wegen 'FakeReturn'. Ich weiß auch nicht wie ich auf den Blödsinn gekommen bin. Ich hab mir eure Kritik zu Herzen genommen und die Sache etwas umgebaut, damit es mehr 'Windows konform' ist. Und dann gings immer noch nicht. Erst als ich das dämliche FakeReturn rausgeschmissen hatte gings auf einmal. Mich wundert daß sich das ausgewirkt hat obwohl es hinter einem If stand. Der Compiler könnte eigentlich auch einen Fehler melden bei sowas. Jedenfalls hab ich den ersten Code gelöscht und bring hier die geänderte Fassung.
Code: Alles auswählen
;
; Versuch das Mainwin von LibertyBasic nachzubauen
; noch ganz am Anfang, wird vielleicht nich besser
;
#LB_MainWin = 999
#LB_Editor = 999
#LB_InputBox = 1000
LB_Run.l = 1
Declare LB_MainWin(breite.l,hoehe.l,titel$)
; Funktionen die von Basic aus aufgerufen werden können
Declare LB_Scan()
Declare.s LB_Input(text$)
Declare LB_Cls()
Declare LB_Pause(ms.l)
Declare LB_Print(text$)
If LB_MainWin(660,450,"Liberty Sim") = 0 : End: EndIf ; anfängliche Fenstergröße und Titel
; können hier angegeben werden
Procedure LB_Proc()
;####################################################### Basic Code kommt hier rein
For a=32 To 96
LB_Print(Str(a)+ " " + Chr(a))
Next a
LB_Pause(3000)
LB_Cls()
i$ = LB_Input("gib mal was ein :")
LB_Print("du hast "+i$+ " eingegeben")
i$ = LB_Input("gib nochmal was ein :")
LB_Print("du hast "+i$+ " eingegeben")
LB_Print("fertig")
;####################################################### Ende Basic Code
EndProcedure
MainEventHandler:
Repeat
EventID = WindowEvent()
Select LB_Run
Case 1
LB_Run = 0
LB_Proc()
Case 0
LB_Run = -1
title$ = GetWindowTitle(#LB_MainWin)
title$ = " beendet " + title$
SetWindowTitle(#LB_MainWin, title$)
ResizeGadget(#LB_Editor, 0, 0, WindowWidth(), WindowHeight())
EndSelect
If EventID = #PB_Event_SizeWindow
; editor an fenstergröße anpassen
ResizeGadget(#LB_Editor, 0, 0, WindowWidth(), WindowHeight())
EndIf
Delay(10)
Until EventID = #PB_Event_CloseWindow
End
;############################################################ Prozeduren
Procedure.l LB_MainWin(breite.l,hoehe.l,titel$)
;###################################################
result.l = 1
FontID.l = LoadFont(#PB_Any, "Courier New", 10 )
If OpenWindow(#LB_MainWin, 0, 0, breite, hoehe, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar ,titel$)
If CreateGadgetList(WindowID())
SetGadgetFont(#PB_Any,UseFont(FontID))
StringGadget(#LB_InputBox, 0, WindowHeight()-20, WindowWidth(), 20, "",#PB_String_MultiLine|#ES_AUTOVSCROLL)
EditorGadget(#LB_Editor, 0, 0, WindowWidth(), WindowHeight())
SendMessage_(GadgetID(#LB_Editor),#EM_SETREADONLY,1,0)
Else
result = 0
EndIf
Else
result = 0
EndIf
CallDebugger
ProcedureReturn result
EndProcedure
Procedure.s LB_Input(text$)
;###############################
CallDebugger
txtLen.l = Len(text$)
selstart.l = txtLen
selend.l = 0
ResizeGadget(#LB_Editor, 0, 0, WindowWidth(), WindowHeight()-20)
For n = 1 To 3
SendMessage_(GadgetID(#LB_Editor), #EM_SCROLL, #SB_LINEDOWN, 0)
Next n
SetGadgetText(#LB_InputBox, text$)
a$ = text$
ActivateGadget(#LB_InputBox)
SendMessage_(GadgetID(#LB_InputBox), #EM_SETSEL, txtLen, txtLen) ; Set cursor Position
Repeat
EventID = WindowEvent()
Select EventID
Case #PB_EventGadget
Select EventGadgetID()
Case #LB_InputBox
DisableGadget(#LB_InputBox, 0 )
EventTyp = EventType()
Select EventTyp
Case #PB_EventType_LostFocus
ActivateGadget(#LB_InputBox)
a$=GetGadgetText(#LB_InputBox)
SendMessage_(GadgetID(#LB_InputBox), #EM_SETSEL, Len(a$), Len(a$))
Case #PB_EventType_Change
SendMessage_(GadgetID(#LB_InputBox), #EM_GETSEL, @selstart, @selend)
If selstart <= txtLen
SetGadgetText(#LB_InputBox, a$)
SendMessage_(GadgetID(#LB_InputBox), #EM_SETSEL, Len(a$), Len(a$))
EndIf
a$=GetGadgetText(#LB_InputBox)
If Left(a$,txtLen) <> text$
SetGadgetText(#LB_InputBox,text$+b$)
SendMessage_(GadgetID(#LB_InputBox), #EM_SETSEL, Len(a$), Len(a$))
Else
b$ = Mid(a$, txtLen + 1, $FFFF)
pos=FindString(b$,Chr(13)+Chr(10),1)
If pos<>0 ; Was Enter pressed on the StringGadget?
b$ = ReplaceString(b$,Chr(13)+Chr(10),"")
ClearGadgetItemList(#LB_InputBox)
DisableGadget(#LB_InputBox, 1 )
SendMessage_(GadgetID(#LB_Editor), #EM_SCROLL, #SB_LINEDOWN, 0)
ResizeGadget(#LB_Editor, 0, 0, WindowWidth(), WindowHeight())
ProcedureReturn b$
EndIf
EndIf
EndSelect
EndSelect
Case #PB_Event_SizeWindow
; editor an fenstergröße anpassen
ResizeGadget(#LB_Editor, 0, 0, WindowWidth(), WindowHeight()-20)
ResizeGadget(#LB_InputBox, 0, WindowHeight()-20, WindowWidth(), -1)
Case #PB_Event_CloseWindow
; User will Fenster schliessen
result = MessageRequester("X","Wollen Sie das Programm abbrechen ?",#PB_MessageRequester_YesNo)
If result = 6 ; Ja-Schalter wurde gedrückt (Result = 6)
ResizeGadget(#LB_Editor, 0, 0, WindowWidth(), WindowHeight())
Goto MainEventHandler
Else
ActivateGadget(#LB_InputBox)
EndIf
EndSelect
Delay(1)
ForEver
EndProcedure
Procedure LB_Pause(ms.l)
;#######################
pause.l = 10
iter.l = Int(ms / pause)
lc.l
ResizeGadget(#LB_Editor, 0, 0, WindowWidth(), WindowHeight())
For lc = 1 To iter
Repeat
Event = WindowEvent()
If Event = #PB_Event_CloseWindow
result = MessageRequester("X","Wollen Sie das Programm abbrechen ?",#PB_MessageRequester_YesNo)
If result = 6 ; Ja-Schalter wurde gedrückt (Result = 6)
Goto MainEventHandler
EndIf
EndIf
Until Event = 0
Delay(pause)
Next lc
EndProcedure
Procedure LB_Cls()
;######################
ClearGadgetItemList(#LB_Editor)
EndProcedure
Procedure LB_Scan()
;#######################
CallDebugger
Repeat
Event = WindowEvent()
If Event = #PB_Event_CloseWindow
result = MessageRequester("X","Wollen Sie das Programm abbrechen ?",#PB_MessageRequester_YesNo)
If result = 6 ; Ja-Schalter wurde gedrückt (Result = 6)
Goto MainEventHandler
EndIf
EndIf
Until Event = 0
EndProcedure
Procedure LB_Print(text$)
;#######################
AddGadgetItem(#LB_Editor,-1,text$)
SendMessage_(GadgetID(#LB_Editor), #EM_SCROLL, #SB_LINEDOWN, 0)
EndProcedure