;==============================================================================================================
; ESCAPE build 5.14 (03.05.2005, 22:00:00)
;==============================================================================================================
; Diese Software unterliegt der GNU General Public License

; (c)'2005 by East-Power-Soft

; Updates und nähere Informationen findest du hier: http://escape.east-power-soft.de
;==============================================================================================================



Function eg_pressed_window(eg_win.eg_window)
;===================================================================================================================
; Fenster verschieben
;===================================================================================================================
	eg_win\x = (eg_mouse_x - eg_window_drag_x) / eg_grid_width * eg_grid_width
	eg_win\y = (eg_mouse_y - eg_window_drag_y) / eg_grid_height * eg_grid_height
	eg_mouse_frame = 2
	
	If (eg_mouse_x_temp <> eg_mouse_x) Or (eg_mouse_y_temp <> eg_mouse_y) Then
		eg_mouse_x_temp = eg_mouse_x
		eg_mouse_y_temp = eg_mouse_y
		eg_event_windowmove = eg_win
	End If
	
	If MouseDown(1) = False Then eg_click_window = Null: eg_event_windowmove = eg_win
End Function



Function eg_pressed_button(eg_but.eg_button)
;===================================================================================================================
; gedrückten Button behandeln
;===================================================================================================================
	If eg_but\state=False Then
		eg_but\state = True
		eg_draw_button(eg_but)
	End If
	If MouseDown(1) = False Then
		;--> setze X und Y Offset wenn Titel Leiste eingeschaltet
		If (eg_but\hwnd\style And 4) = 4 Then eg_offsetx=0: eg_offsety=17 Else eg_offsetx=0: eg_offsety=0
					
		;--> setze Y Offset wenn Menü vorhanden
		If (eg_but\hwnd\style And 8) = 8 Then eg_offsety = eg_offsety + 17

		;--> Event nur zurück geben, wenn nach dem loslassen der Maustaste der Zeiger noch über dem Button ist.
		If RectsOverlap(eg_mouse_x,eg_mouse_y,1,1,eg_but\hwnd\x+eg_but\x+eg_offsetx,eg_but\hwnd\y+eg_but\y+eg_offsety,eg_but\w,eg_but\h) Then eg_event_button = eg_but
		eg_click_button = Null
		eg_but\state = False
		eg_draw_button(eg_but)
	End If
End Function



Function eg_pressed_label(eg_lbl.eg_label)
;===================================================================================================================
; gedrücktes Label behandeln
;===================================================================================================================
	;--> Maus noch gedrückt?
	If MouseDown(1) = False Then eg_click_label = Null
End Function



Function eg_pressed_image(eg_img.eg_image)
;===================================================================================================================
; gedrücktes Image behandeln
;===================================================================================================================
	;--> Maus noch gedrückt?
	If MouseDown(1) = False Then eg_click_image = Null
End Function



Function eg_pressed_input(eg_inp.eg_input,eg_state=True)
;===================================================================================================================
; gedrücktes Inputfeld behandeln
;===================================================================================================================

	SetBuffer ImageBuffer(eg_inp\img)

	;--> Textfeld behandeln? und wenn ja, Mausprüfung
	If eg_state Then
	
		;--> Erstaufruf? Initialisiere Variablen für 'Alles Markieren'
		If eg_input_firstentry Then
			eg_input_einfg = True
			eg_mouse_hit = 0
			eg_markstate = 0
			eg_curs_pos = Len(eg_inp\caption$)
			eg_inp\oldcaption$ = eg_inp\caption$
			eg_input_firstentry = False
		End If
	
		;--> prüfe auf Mausklick
		If eg_mouse_hit Then
		
			;--> Titelleiste?
			If (eg_inp\hwnd\style And 4) = 4 Then eg_offsetx=0: eg_offsety=17 Else eg_offsetx=0: eg_offsety=0
			
			;--> setze Y Offset wenn Menü vorhanden
			If (eg_inp\hwnd\style And 8) = 8 Then eg_offsety = eg_offsety + 17
	
			;--> ging Klick in das Textfeld?
			If RectsOverlap(eg_mouse_x,eg_mouse_y,1,1,eg_inp\hwnd\x+eg_inp\x+eg_offsetx,eg_inp\hwnd\y+eg_inp\y+eg_offsety+1,eg_inp\w,13) Then
				;--> merke Cursorposition
				eg_pos = eg_curs_pos
				;--> Berechne Position der Maus im Feld
				eg_searchpos = eg_mouse_x - (eg_inp\hwnd\x+eg_inp\x+eg_offsetx)
				eg_comparepos = eg_view_offset + 1
				;--> setze maximum falls bei der Suche nix herauskommt
				eg_curs_pos = Len(eg_inp\caption$)
				For eg_i = 1 To Len(eg_inp\caption$)
					;--> Im Passwortmodus '*' als Suchstring verwenden
					If eg_inp\password Then
						If eg_stringwidth(String$(Chr$(149),Len(Left$(eg_inp\caption$,eg_i)))) + eg_comparepos > eg_searchpos Then
							eg_curs_pos = eg_i
							Exit
						End If
					Else
						If eg_stringwidth(Left$(eg_inp\caption$,eg_i)) + eg_comparepos > eg_searchpos Then
							eg_curs_pos = eg_i
							Exit
						End If
					End If
				Next
				;--> War Mausklick ein Doppelklick? Dann suche das Wort auf das geklickt wurde.
				If eg_mouse_hit_double Then
					;--> wenn Passwortmodus ist alles "ein Wort"
					If eg_inp\password Then
						eg_markstate = 0
						eg_curs_pos = Len(eg_inp\caption$)
					Else
						eg_lft$ = Left$(eg_inp\caption$, eg_curs_pos): eg_markstate = eg_instr(eg_lft$,0)
						eg_rgt$ = Right$(eg_inp\caption$, Len(eg_inp\caption$) - eg_curs_pos): eg_curs_pos = eg_curs_pos + eg_instr(eg_rgt$,1)
					End If
				Else
					;--> wurde beim Mausklick Shift gehalten?
					If KeyDown(42)=False And KeyDown(54)=False Then
						eg_markstate = -1
					Else
						;--> wenn ja, nimm alte Cursorposition als Markierungsstart
						If eg_markstate=-1 Then eg_markstate = eg_pos
					End If
				End If
			Else
				;--> wenn nicht verlasse wie bei einem Return
				eg_curs_blinkstate = False
				eg_markstate = -1
				eg_curs_pos = 0
				eg_view_offset = 0
				eg_click_input = Null
				eg_event_input = eg_inp
				;--> zusätzlich eg_state aussetzen, damit nachfolgende Prüfungen übergangen werden
				eg_state = False
			End If
		Else
			;--> prüfe ob Maus gehalten wird
			If eg_mouse_down Then
				;--> wurde markieren schon begonnen?
				If eg_markstate = -1 Then
					eg_markstate = eg_curs_pos
				Else
					;--> suche jetztige Mausposition und markiere bis dahin
					If (eg_inp\hwnd\style And 4) = 4 Then eg_offsetx=0: eg_offsety=17 Else eg_offsetx=0: eg_offsety=0

					;--> setze Y Offset wenn Menü vorhanden
					If (eg_inp\hwnd\style And 8) = 8 Then eg_offsety = eg_offsety + 17
	
					;--> Berechne Position der Maus im Feld
					eg_searchpos = eg_mouse_x - (eg_inp\hwnd\x+eg_inp\x+eg_offsetx)
					eg_comparepos = eg_view_offset + 1
					;--> setze maximum falls bei der Suche nix herauskommt
					eg_curs_pos = Len(eg_inp\caption$)
					For eg_i = 0 To Len(eg_inp\caption$)
						;--> Im Passwortmodus '*' als Suchstring verwenden
						If eg_inp\password Then
							If eg_stringwidth(String$(Chr$(149),Len(Left$(eg_inp\caption$,eg_i)))) + eg_comparepos > eg_searchpos Then
								eg_curs_pos = eg_i
								Exit
							End If
						Else
							If eg_stringwidth(Left$(eg_inp\caption$,eg_i)) + eg_comparepos > eg_searchpos Then
								eg_curs_pos = eg_i
								Exit
							End If
						End If
					Next
					If eg_curs_pos<0 Then eg_curs_pos=0
				End If
			End If
		End If
	End If
	
	;--> Textfeld behandeln oder nur "ein Bild" machen?
	If eg_state Then
		eg_code$ = eg_getkey()
		eg_ascii = Asc(eg_code$)
		;--> sobald Steuertaste gedrückt ist, verhindere das Blinken des Cursors
		If eg_ascii < 32 And eg_ascii>0 Then eg_curs_blinkstate = True
		eg_length = Len(eg_inp\caption$)
		If eg_length = 0 Then eg_markstate = -1
		;--> Steuercodeauswertung
		Select eg_ascii
			;--> Beenden durch: Return und ESC
			Case 13, 31
				;--> Event übergeben bzw. bei ESC alten String widerherstellen
				If eg_ascii = 31 Then
					eg_inp\caption$ = eg_inp\oldcaption$
				Else
					eg_event_input = eg_inp
				End If
				;--> Selbstaufruf zum Zeichnen
				eg_pressed_input(eg_inp,False)
				;--> Status abschalten
				eg_state = False
				;--> Funktionsaufruf zurücknehmen
				eg_click_input = Null
				;--> Tastaturpuffer lehren und zurück
				FlushKeys()
				eg_dummy = KeyHit(1)
				eg_dummy = KeyHit(1)
				Return
			;--> Beenden durch TAB
			Case 15
				;--> Event übergeben
				eg_event_input = eg_inp
				;--> Selbstaufruf zum Zeichnen
				eg_pressed_input(eg_inp,False)
				;--> Status abschalten
				eg_state = False
				;--> Funktionsaufruf zurücknehmen
				eg_click_input = Null
				;--> Tastaturpuffer lehren
				FlushKeys()
				;--> nächstes Input Feld in diesem Fenster suchen (wenn nur 1, dann bleibe in diesem)
				If eg_inp = Last EG_Input Then eg_finp.EG_Input = First EG_Input Else eg_finp.EG_Input = After eg_inp
				eg_round = 0
				Repeat
					If eg_round = 2 Then Exit
					If eg_finp\hwnd = eg_inp\hwnd Then
						eg_inp.eg_input = eg_finp
						Exit
					End If
					eg_finp.eg_input = After eg_inp
					If eg_finp = After Last EG_Input Then eg_finp = First EG_Input: eg_round = eg_round + 1
				Forever
				;--> Werte für nächstes Input initialisieren und Funktion sofort verlassen
				eg_input_firstentry = True
				eg_click_input = eg_inp
				Return
			;--> beenden durch Shift+TAB
			Case 16
				;--> Event übergeben
				eg_event_input = eg_inp
				;--> Selbstaufruf zum Zeichnen
				eg_pressed_input(eg_inp,False)
				;--> Status abschalten
				eg_state = False
				;--> Funktionsaufruf zurücknehmen
				eg_click_input = Null
				;--> Tastaturpuffer lehren
				FlushKeys()
				;--> vorheriges Input Feld in diesem Fenster suchen (wenn nur 1, dann bleibe in diesem)
				If eg_inp = First eg_input Then eg_finp.eg_input = Last eg_input Else eg_finp.eg_input = Before eg_inp
				Repeat
					If eg_finp\hwnd = eg_inp\hwnd Then
						eg_inp.eg_input = eg_finp
						Exit
					End If
					eg_finp.eg_input = Before eg_inp
					If eg_finp = Before First eg_input Then eg_finp = Last eg_input
				Forever
				;--> Werte für nächstes Input initialisieren und Funktion sofort verlassen
				eg_input_firstentry = True
				eg_click_input = eg_inp
				Return
			;--> nothing
			Case 00
			;--> Pos1
			Case 01
				eg_curs_pos = 0
				eg_markstate = -1
			;--> Ende
			Case 02
				eg_curs_pos = eg_length
				eg_markstate = -1
			;--> Shift + Pos1
			Case 03
				If eg_markstate=-1 Then eg_markstate = eg_curs_pos
				eg_curs_pos = 0
			;--> Shift + Ende
			Case 04
				If eg_markstate=-1 Then eg_markstate = eg_curs_pos
				eg_curs_pos = eg_length
			;--> nach Links
			Case 05
				If eg_curs_pos > 0 Then eg_curs_pos = eg_curs_pos - 1
				eg_markstate = -1
			;--> nach Rechts
			Case 06
				If eg_curs_pos < eg_length Then eg_curs_pos = eg_curs_pos + 1
				eg_markstate = -1
			;--> Shift + Links
			Case 07
				If eg_markstate = -1 Then eg_markstate = eg_curs_pos
				If eg_curs_pos > 0 Then eg_curs_pos = eg_curs_pos - 1
			;--> Shift + Rechts
			Case 08
				If eg_markstate = -1 Then eg_markstate = eg_curs_pos
				If eg_curs_pos < eg_length Then eg_curs_pos = eg_curs_pos + 1
			;--> Strg + Links
			Case 09
				If eg_inp\password Then
					eg_curs_pos = 0
				Else
					If eg_curs_pos>1 Then eg_lft$ = Left$(eg_inp\caption$, eg_curs_pos): eg_curs_pos = eg_instr(eg_lft$,0)
				End If
				eg_markstate = -1
			;--> Strg + Rechts
			Case 10
				If eg_inp\password Then
					eg_curs_pos = eg_length
				Else
					eg_rgt$ = Right$(eg_inp\caption$, eg_length - eg_curs_pos): eg_curs_pos = eg_curs_pos + eg_instr(eg_rgt$,1)
				End If
				eg_markstate = -1
			;--> Shift + Strg + Links
			Case 11
				If eg_markstate = -1 Then eg_markstate = eg_curs_pos
				If eg_inp\password Then
					eg_curs_pos = 0
				Else	
					If eg_curs_pos>1 Then eg_lft$ = Left$(eg_inp\caption$, eg_curs_pos): eg_curs_pos = eg_instr(eg_lft$,0)
				End If
			;--> Shift + Strg + Rechts
			Case 12
				If eg_markstate = -1 Then eg_markstate = eg_curs_pos
				If eg_inp\password Then
					eg_curs_pos = eg_length
				Else
					eg_rgt$ = Right$(eg_inp\caption$, eg_length - eg_curs_pos): eg_curs_pos = eg_curs_pos + eg_instr(eg_rgt$,1)
				End If
			;--> Entfernen
			Case 14
				If eg_markstate = -1 Then
					If eg_curs_pos<eg_length Then
						eg_lft$ = Left$(eg_inp\caption$, eg_curs_pos)
						eg_rgt$ = Right$(eg_inp\caption$, eg_length - eg_curs_pos - 1)
						eg_inp\caption$ = eg_lft$ + eg_rgt$
					End If
				Else
					If eg_curs_pos<eg_markstate Then eg_start = eg_curs_pos: eg_ende = eg_markstate Else eg_start = eg_markstate: eg_ende = eg_curs_pos
					eg_lft$ = Left$(eg_inp\caption$,eg_start)
					eg_rgt$ = Right$(eg_inp\caption$,eg_length - eg_ende)
					eg_inp\caption$ = eg_lft$ + eg_rgt$
					eg_curs_pos = eg_start
				End If
				eg_markstate = -1
			;--> DEL
			Case 17
				If eg_markstate = -1 Then
					If eg_curs_pos>0 Then
						eg_lft$ = Left$(eg_inp\caption$, eg_curs_pos - 1)
						eg_rgt$ = Right$(eg_inp\caption$, eg_length - eg_curs_pos)
						eg_inp\caption$ = eg_lft$ + eg_rgt$
						eg_curs_pos = eg_curs_pos - 1
					End If
				Else
					If eg_curs_pos<eg_markstate Then eg_start = eg_curs_pos: eg_ende = eg_markstate Else eg_start = eg_markstate: eg_ende = eg_curs_pos
					eg_lft$ = Left$(eg_inp\caption$,eg_start)
					eg_rgt$ = Right$(eg_inp\caption$,eg_length - eg_ende)
					eg_inp\caption$ = eg_lft$ + eg_rgt$
					eg_curs_pos = eg_start
				End If
				eg_markstate = -1
			;--> Strg+C und Strg+Einfg (kopieren)
			Case 18
				If eg_markstate>-1 Then
					If eg_curs_pos<eg_markstate Then eg_start = eg_curs_pos: eg_ende = eg_markstate Else eg_start = eg_markstate: eg_ende = eg_curs_pos
					eg_lft$ = Left$(eg_inp\caption$,eg_start)
					eg_rgt$ = Right$(eg_inp\caption$,eg_length - eg_ende)
					eg_clipboard$ = Mid$(eg_inp\caption$,eg_start+1,Len(eg_inp\caption$) - (Len(eg_lft$)+Len(eg_rgt$)))
				End If
			;--> Strg+V und Shift+Einfg (einfügen)
			Case 19
				If eg_markstate>-1 Then
					If eg_curs_pos<eg_markstate Then eg_start = eg_curs_pos: eg_ende = eg_markstate Else eg_start = eg_markstate: eg_ende = eg_curs_pos
					eg_lft$ = Left$(eg_inp\caption$,eg_start)
					eg_rgt$ = Right$(eg_inp\caption$,eg_length - eg_ende)
					eg_inp\caption$ = eg_lft$ + eg_clipboard$ + eg_rgt$
					eg_markstate=-1
					eg_curs_pos=Len(eg_lft$+eg_clipboard$)
				Else
					eg_inp\caption$ = Left$(eg_inp\caption$,eg_curs_pos) + eg_clipboard$ + Right$(eg_inp\caption$,eg_length-eg_curs_pos)
					eg_curs_pos = eg_curs_pos+Len(eg_clipboard$)
				End If
			;--> Strg+X (ausschneiden)
			Case 20
				If eg_markstate>-1 Then
					If eg_curs_pos<eg_markstate Then eg_start = eg_curs_pos: eg_ende = eg_markstate Else eg_start = eg_markstate: eg_ende = eg_curs_pos
					eg_lft$ = Left$(eg_inp\caption$,eg_start)
					eg_rgt$ = Right$(eg_inp\caption$,eg_length - eg_ende)
					eg_curs_pos = eg_start
					eg_clipboard$ = Mid$(eg_inp\caption$,eg_start+1,Len(eg_inp\caption$) - (Len(eg_lft$)+Len(eg_rgt$)))
					eg_inp\caption$ = eg_lft$ + eg_rgt$
					eg_markstate=-1
				End If
			;--> Einfügen an/aus
			Case 21
				If eg_input_einfg Then eg_input_einfg = False Else eg_input_einfg = True
			;--> 'normale Tasten'
			Default
				;--> markiert?
				If eg_markstate = -1 Then
					If eg_length < eg_inp\signmax Then
						If eg_input_einfg Then
							eg_lft$ = Left$(eg_inp\caption$, eg_curs_pos)
							eg_rgt$ = Right$(eg_inp\caption$, eg_length - eg_curs_pos)
							eg_inp\caption$ = eg_lft$ + eg_code$ + eg_rgt$
							eg_curs_pos = eg_curs_pos + 1
						Else
							eg_lft$ = Left$(eg_inp\caption$, eg_curs_pos)
							If eg_length - eg_curs_pos - 1 > 0 Then
								eg_rgt$ = Right$(eg_inp\caption$, eg_length - eg_curs_pos - 1)
							Else
								eg_rgt$ = ""
							End If
							eg_inp\caption$ = eg_lft$ + eg_code$ + eg_rgt$
							eg_curs_pos = eg_curs_pos + 1
						End If
					End If
				Else
					;--> wenn ja...
					If eg_curs_pos<eg_markstate Then eg_start = eg_curs_pos: eg_ende = eg_markstate Else eg_start = eg_markstate: eg_ende = eg_curs_pos
					eg_lft$ = Left$(eg_inp\caption$,eg_start)
					eg_rgt$ = Right$(eg_inp\caption$,eg_length - eg_ende)
					eg_inp\caption$ = eg_lft$ + eg_code$ + eg_rgt$
					eg_curs_pos = eg_start + 1
				End If
				eg_markstate = -1
		End Select
	
		;--> überlangen Text korrigieren
		If Len(eg_inp\caption$)>eg_inp\signmax Then
			eg_inp\caption$ = Left$(eg_inp\caption$,eg_inp\signmax)
		End If
		
		;--> Cursorposition falls nötig korrigieren (Knockout Schutz)
		If eg_curs_pos > Len(eg_inp\caption$) Then eg_curs_pos = Len(eg_inp\caption$)
		If eg_curs_pos < 0 Then eg_curs_pos = 0
	
		;--> Verschiebung des Textes im Feld berechnen
		If eg_inp\password Then
			eg_cpos = eg_view_offset + eg_inp\x + eg_stringwidth(String$(Chr$(149),Len(Left$(eg_inp\caption$, eg_curs_pos))))
		Else		
			eg_cpos = eg_view_offset + eg_inp\x + eg_stringwidth(Left$(eg_inp\caption$, eg_curs_pos))
		End If
		If eg_inp\w>100 Then xshiftstep = 50 Else xshiftstep = eg_inp\w/10
		If eg_cpos > eg_inp\x + eg_inp\w - 3 Then eg_view_offset = eg_view_offset - xshiftstep
		If eg_cpos < eg_inp\x + 3 Then eg_view_offset = eg_view_offset + xshiftstep
		If eg_view_offset > 0 Or eg_curs_pos = 0 Then eg_view_offset = 0
	
		;--> CursorBlinkgeschwindigkeit 
		If eg_curs_timer < MilliSecs() Then
			eg_curs_timer = MilliSecs() + eg_curs_blinkspeed
			eg_curs_blinkstate = eg_curs_blinkstate Xor 1
		End If
		
	Else
		;--> wenn eg_state = False
		eg_curs_blinkstate = False
		eg_markstate = -1
		eg_curs_pos = 0
		eg_view_offset = 0
	End If

	;--> Feld ausgeben
	Color 0,0,eg_color_bg_input: Rect 0, 0, eg_inp\w+2, 15, 1
	
	;--> Rahmen ausgeben
	If eg_inp\border Then Color 0,0,eg_color_darklight: Rect 0, 0, eg_inp\w+2, 15, 0: eg_offset = 1

	;--> Text ausgeben, bei Rahmen Viewport setzen
	If eg_inp\border Then Viewport 1,1,eg_inp\w,13
	If eg_inp\password Then
		eg_text(1+eg_view_offset+eg_offset,eg_offset, String$(Chr$(149),Len(eg_inp\caption$)))
	Else
		eg_text(1+eg_view_offset+eg_offset,eg_offset, eg_inp\caption$)
	End If
	
	;--> Cursor darstellen
	If eg_curs_blinkstate Then
		If eg_inp\password Then
			eg_curs_pospix = 1+eg_view_offset+eg_stringwidth(String$(Chr$(149),Len(Left$(eg_inp\caption$, eg_curs_pos))))
		Else
			eg_curs_pospix = 1+eg_view_offset+eg_stringwidth(Left$(eg_inp\caption$, eg_curs_pos))
		End If
		Color 0,0,eg_color_text_input: Line eg_curs_pospix+eg_offset, eg_offset, eg_curs_pospix, eg_inp\y + 13
	End If
	
	SetBuffer BackBuffer()
End Function



Function eg_pressed_slider(eg_sld.eg_slider)
;===================================================================================================================
; gedrückten Slider behandeln
;===================================================================================================================
	eg_event_slider = eg_sld
	eg_maxtemp# = eg_sld\max# - eg_sld\page#

	;--> Maus noch gedrückt?
	If MouseDown(1) = False Then eg_click_slider = Null: eg_slider_drag = False

	;--> Vorberechnung
	eg_sw# = Int(eg_sld\size / Float(100) * (eg_sld\page# * 100 / (eg_sld\max# - eg_sld\min#)))
	If eg_sw# < 19 Then eg_sw# = 19
	eg_onepix# = (eg_maxtemp# - eg_sld\min#) / Float(eg_sld\size - eg_sw#)

	;--> setze X und Y Offset wenn Titel Leiste eingeschaltet
	If (eg_sld\hwnd\style And 4) = 4 Then eg_offsetx=0: eg_offsety=17 Else eg_offsetx=0: eg_offsety=0
	
	;--> setze Y Offset wenn Menü vorhanden
	If (eg_sld\hwnd\style And 8) = 8 Then eg_offsety = eg_offsety + 17
	
	;--> berechne X und Y Position des Sliders auf dem Bildschirm
	eg_x = eg_sld\hwnd\x + eg_sld\x + eg_offsetx
	eg_y = eg_sld\hwnd\y + eg_sld\y + eg_offsety
	
	;--> dir = True -> horizontal
	If eg_sld\dir Then
		;--> Mausklick direkt auf Slider
		If eg_slider_drag Then
			eg_sld\value# = eg_sld\value# - (eg_slider_lastpos - eg_mouse_x) * eg_onepix#
			eg_slider_lastpos = eg_mouse_x
		Else
			;--> links vom Slider geklickt?
			If eg_mouse_x < eg_x+eg_sld\pixoffset# Then
				eg_sld\value# = eg_sld\value# - eg_sld\page#
			Else
				;--> rechts vom Slider geklickt?
				If eg_mouse_x > eg_x+eg_sld\pixoffset#+ImageWidth(eg_sld\img) Then
					eg_sld\value# = eg_sld\value# + eg_sld\page#
				Else
					eg_slider_drag = True
				End If
			End If
		End If
	Else
		;--> Mausklick direkt auf Slider
		If eg_slider_drag Then
			eg_sld\value# = eg_sld\value# - (eg_slider_lastpos - eg_mouse_y) * eg_onepix#
			eg_slider_lastpos = eg_mouse_y
		Else
			;--> über Slider geklickt?
			If eg_mouse_y < eg_y+eg_sld\pixoffset# Then
				eg_sld\value# = eg_sld\value# - eg_sld\page#
			Else
				;--> unter Slider geklickt?
				If eg_mouse_y > eg_y+eg_sld\pixoffset#+ImageHeight(eg_sld\img) Then
					eg_sld\value# = eg_sld\value# + eg_sld\page#
				Else
					eg_slider_drag = True
				End If
			End If
		End If
	End If
	
	;--> Werte korrigieren
	If eg_sld\value# < eg_sld\min# Then eg_sld\value# = eg_sld\min#
	If eg_sld\value# > eg_maxtemp# Then eg_sld\value# = eg_maxtemp#
	
	;--> neuen Pixeloffset errechnen
	eg_rv# = 100 - (eg_maxtemp# - eg_sld\value#) * 100 / (eg_maxtemp# - eg_sld\min#)
	eg_sld\pixoffset# = (eg_sld\size - eg_sw#) * eg_rv# / Float(100)
	
End Function



Function eg_pressed_spinner(eg_spn.eg_spinner)
;===================================================================================================================
; gedrückten Spinner behandeln
;===================================================================================================================
	;--> setze X und Y Offset wenn Titel Leiste eingeschaltet
	If (eg_spn\hwnd\style And 4) = 4 Then eg_offsetx=0: eg_offsety=17 Else eg_offsetx=0: eg_offsety=0
	
	;--> setze Y Offset wenn Menü vorhanden
	If (eg_spn\hwnd\style And 8) = 8 Then eg_offsety = eg_offsety + 17
	
	;--> berechne X und Y Position des Sliders auf dem Bildschirm
	eg_x = eg_spn\hwnd\x + eg_spn\x + eg_offsetx
	eg_y = eg_spn\hwnd\y + eg_spn\y + eg_offsety
	
	;--> Spinner Slider aktiv?
	If eg_spn\state Then
		;--> Slider bearbeiten oder fertig?
		If MouseDown(1) = False Then
			eg_spn\state = False
			eg_spn\press = 0
			eg_draw_spinner(eg_spn)
			eg_click_spinner = Null
		Else
			If eg_spn\press <> eg_mouse_x Or eg_spn\press = -1 Then
				;--> wenn erster Durchlauf
				If eg_spn\press = -1 Then eg_spn\press = eg_mouse_x
				;--> Vorberechnung
				eg_onepix# = (eg_spn\max# - eg_spn\min#) / 55
				;--> Slider bearbeiten
				eg_spn\value# = eg_spn\value# - (eg_spn\press - eg_mouse_x) * eg_onepix#
				eg_spn\press = eg_mouse_x
				;--> Werte korrigieren
				If eg_spn\value# < eg_spn\min# Then eg_spn\value# = eg_spn\min#
				If eg_spn\value# > eg_spn\max# Then eg_spn\value# = eg_spn\max#
				;--> neuen Pixeloffset errechnen
				eg_rv# = 100 - (eg_spn\max# - eg_spn\value#) * 100 / (eg_spn\max# - eg_spn\min#)
				eg_spn\pixoffset# = 55 * eg_rv# / Float(100)
				eg_event_spinner = eg_spn
			End If
		End If
	Else
		;--> Button schon einmal ausgewertet?
		If eg_spn\press = 0 Then
			;--> wenn nicht, prüfe auf welchen Button der Klick ging
			eg_mx = eg_mouse_x - eg_x
			If eg_mx > 19 Then
				;--> Slider aktivieren (eg_spinner_press ist hier Positionsspeicher für Maus)
				;--> -1 beim ersten Durchlauf
				eg_spn\press = - 1
				eg_spn\state = True
				eg_draw_spinner(eg_spn)
				;--> ohne Event zurück kehren für nächsten Durchlauf mit Slider
				Return
			Else
				eg_spinner_timer = MilliSecs() + eg_spinner_timetorepeat
				;--> linker oder rechter Button?
				If eg_mx < 10 Then
					eg_spn\press = 1
					eg_spn\value# = eg_spn\value# - eg_spn\page#
				Else
					eg_spn\press = 2
					eg_spn\value# = eg_spn\value# + eg_spn\page#
				End If
				;--> Werte korrigieren
				If eg_spn\value# < eg_spn\min# Then eg_spn\value# = eg_spn\min#
				If eg_spn\value# > eg_spn\max# Then eg_spn\value# = eg_spn\max#
				eg_event_spinner = eg_spn
				eg_draw_spinner(eg_spn)
			End If
		Else
			;--> Maus noch gedrückt?
			If MouseDown(1) = False Then
				eg_spn\press = 0
				eg_draw_spinner(eg_spn)
				eg_click_spinner = Null
			Else
				If eg_spinner_timer < MilliSecs() Then
					eg_spinner_timer = MilliSecs() + eg_spinner_repeattime
					;--> Repetiere Buttons
					If eg_spn\press = 1 Then
						eg_spn\value# = eg_spn\value# - eg_spn\page#
					Else
						eg_spn\value# = eg_spn\value# + eg_spn\page#
					End If
					;--> Werte korrigieren
					If eg_spn\value# < eg_spn\min# Then eg_spn\value# = eg_spn\min#
					If eg_spn\value# > eg_spn\max# Then eg_spn\value# = eg_spn\max#
					eg_event_spinner = eg_spn
				End If
			End If
		End If
	End If
End Function



Function eg_pressed_imgbutton(eg_ibut.eg_imgbutton)
;===================================================================================================================
; gedrückten ImageButton behandeln
;===================================================================================================================
	;--> wenn keine oder nur 1 Frame(s), dann gib sofort Event zurück
	If eg_ibut\frames <= 1 Then
		eg_click_imgbutton = Null
		eg_event_imgbutton = eg_ibut
		Return
	Else
		;--> wenn 2 Frames oder mehr stell Frame ein
		eg_ibut\frame = 1
	End If
	
	If MouseDown(1) = False Then
		eg_click_imgbutton = Null
		eg_event_imgbutton = eg_ibut
		If eg_ibut\push Then
			If eg_ibut\state Then
				eg_ibut\frame = 1
			Else
				eg_ibut\frame = 0
			End If
		Else
			eg_ibut\frame = 0
			eg_ibut\state = False
		End If
	End If
	
End Function



Function eg_pressed_option(eg_opt.eg_option)
;===================================================================================================================
; gedrückten OptionButton behandeln
;===================================================================================================================
	;--> Maus noch gedrückt?
	If MouseDown(1) = False Then eg_click_option = Null
End Function



Function eg_pressed_checkbox(eg_chk.eg_checkbox)
;===================================================================================================================
; gedrückte CheckBox behandeln
;===================================================================================================================
	;--> Maus noch gedrückt?
	If MouseDown(1) = False Then eg_click_checkbox = Null
End Function



Function eg_pressed_listbox(eg_lst.eg_listbox)
;===================================================================================================================
; gedrückte Listbox behandeln
;===================================================================================================================
	
	;--> prüfe MouseZ
	eg_listbox_mousez(eg_lst)

	;--> Tastendruck?
	eg_temp = Asc(eg_getkey$())
	
	Select eg_temp
		;--> wenn keine Taste
		Case 0
		;--> Pos1
		Case 1
			eg_lst\number = 1
			If eg_lst\slider<>Null Then
				eg_lst\slider\value = eg_lst\number
				eg_draw_slider(eg_lst\slider)
			End If
			eg_draw_listbox(eg_lst)
		;--> Ende
		Case 2
			eg_lst\number = eg_lst\count
			If eg_lst\slider<>Null Then
				eg_lst\slider\value = eg_lst\number
				eg_draw_slider(eg_lst\slider)
			End If
			eg_draw_listbox(eg_lst)
		;--> hoch
		Case 23
			If eg_lst\number>1 Then eg_lst\number = eg_lst\number-1
			If eg_lst\slider<>Null Then
				If eg_lst\slider\value > eg_lst\number Then
					eg_lst\slider\value = eg_lst\number
					eg_draw_slider(eg_lst\slider)
				End If
			End If
			eg_draw_listbox(eg_lst)
		;--> runter
		Case 24
			If eg_lst\number<eg_lst\count Then eg_lst\number = eg_lst\number+1
			If eg_lst\slider<>Null Then
				If eg_lst\slider\value + eg_lst\slider\page - 1 < eg_lst\number Then
					eg_lst\slider\value = eg_lst\number - eg_lst\slider\page + 1
					eg_draw_slider(eg_lst\slider)
				End If
			End If
			eg_draw_listbox(eg_lst)
		;--> Bild hoch
		Case 25
			eg_lst\number = eg_lst\number - eg_lst\h / 16
			If eg_lst\number<1 Then eg_lst\number = 1
			If eg_lst\slider<>Null Then
				eg_lst\slider\value = eg_lst\slider\value - eg_lst\h / 16
				eg_draw_slider(eg_lst\slider)
			End If
			eg_draw_listbox(eg_lst)
		;--> Bild runter
		Case 26
			eg_lst\number = eg_lst\number + eg_lst\h / 16
			If eg_lst\number>eg_lst\count Then eg_lst\number = eg_lst\count
			If eg_lst\slider<>Null Then
				eg_lst\slider\value = eg_lst\slider\value + eg_lst\h / 16
				eg_draw_slider(eg_lst\slider)
			End If
			eg_draw_listbox(eg_lst)
		Case 31
		;--> alle anderen geben Event
		Default
			;--> finde Eintrag
			eg_i = 0: eg_lst\item$ = ""
			For eg_lstentry.eg_listboxentry = Each eg_listboxentry
				If eg_lstentry\listbox = eg_lst Then
					eg_i = eg_i + 1
					If eg_i = eg_lst\number Then
						eg_event_item$ = eg_lstentry\item$
						eg_event_number = eg_lst\number
						eg_lst\item$ = eg_lstentry\item$
						eg_lst\imgitem = eg_lstentry\img
						eg_lst\frame = eg_lstentry\frame
						Exit
					End If	
				End If
			Next
			;--> Eventrückgabe
			eg_event_listbox = eg_lst
			eg_click_listbox = Null
			eg_draw_listbox(eg_lst)
			Return
	End Select
	
	;--> setze X und Y Offset wenn Titel Leiste eingeschaltet
	If (eg_lst\hwnd\style And 4) = 4 Then eg_offsetx=0: eg_offsety=17 Else eg_offsetx=0: eg_offsety=0
	
	;--> setze Y Offset wenn Menü vorhanden
	If (eg_lst\hwnd\style And 8) = 8 Then eg_offsety = eg_offsety + 17
	
	;--> berechne X und Y Position der Listbox auf dem Bildschirm
	eg_x = eg_lst\hwnd\x + eg_lst\x + eg_offsetx
	eg_y = eg_lst\hwnd\y + eg_lst\y + eg_offsety

	;--> Sliderbewegung im Gange?
	If eg_listbox_drag And MouseDown(1) = False Then eg_listbox_drag = False

	;--> oder soll begonnen werden?
	If eg_mouse_hit Then
		If RectsOverlap(eg_mouse_x,eg_mouse_y,1,1,eg_x+eg_lst\w-12,eg_y,12,eg_lst\h) Then
			If eg_lst\slider<>Null Then
				eg_listbox_drag = True
				eg_slider_lastpos = eg_mouse_y
			End If
		End If		
	End If

	;--> bewege Slider
	If eg_listbox_drag Then
		;--> frage Slider ab
		eg_pressed_slider(eg_lst\slider)
		;--> erneuere Listbox
		If eg_mouse_x_temp<>eg_mouse_x Or eg_mouse_y_temp<>eg_mouse_y Then eg_draw_listbox(eg_lst)
		eg_mouse_x_temp = eg_mouse_x
		eg_mouse_y_temp = eg_mouse_y
		Return
	End If		
	
	;--> Mausklick ?
	If eg_mouse_hit Then
		;--> ging Klick in Listbox?
		If RectsOverlap(eg_mouse_x,eg_mouse_y,1,1,eg_x,eg_y,eg_lst\w,eg_lst\h) Then
			;--> Ist Slider in dieser Listbox aktiv?
			If eg_lst\slider.eg_slider = Null Then
				;--> berechne Eintrag auf den der Mausklick ging
				eg_lst\number = (eg_mouse_y - eg_y - 1) / 16 + 1
				If eg_lst\number > eg_lst\count Then eg_lst\number = eg_lst\count
				;--> finde Eintrag
				eg_i = 0: eg_lst\item$ = ""
				For eg_lstentry.eg_listboxentry = Each eg_listboxentry
					If eg_lstentry\listbox = eg_lst Then
						eg_i = eg_i + 1
						If eg_i = eg_lst\number Then
							eg_event_item$ = eg_lstentry\item$
							eg_event_number = eg_lst\number
							eg_lst\item$ = eg_lstentry\item$
							eg_lst\imgitem = eg_lstentry\img
							eg_lst\frame = eg_lstentry\frame
							Exit
						End If	
					End If
				Next
			Else
				;--> berechne Eintrag auf den der Mausklick ging
				eg_lst\number = (eg_mouse_y - eg_y - 1) / 16 + eg_lst\slider\value
				;--> finde Eintrag
				eg_i = 0
				For eg_lstentry.eg_listboxentry = Each eg_listboxentry
					If eg_lstentry\listbox = eg_lst Then
						eg_i = eg_i + 1
						If eg_i = eg_lst\number Then
							eg_event_item$ = eg_lstentry\item$
							eg_event_number = eg_lst\number
							eg_lst\item$ = eg_lstentry\item$
							eg_lst\imgitem = eg_lstentry\img
							eg_lst\frame = eg_lstentry\frame
							Exit
						End If	
					End If
				Next
			End If
		Else
			eg_click_listbox = Null
			;--> finde Eintrag
			eg_i = 0
			For eg_lstentry.eg_listboxentry = Each eg_listboxentry
				If eg_lstentry\listbox = eg_lst Then
					eg_i = eg_i + 1
					If eg_i = eg_lst\number Then
						eg_event_item$ = eg_lstentry\item$
						eg_event_number = eg_lst\number
						eg_lst\item$ = eg_lstentry\item$
						eg_lst\imgitem = eg_lstentry\img
						eg_lst\frame = eg_lstentry\frame
						Exit
					End If	
				End If
			Next
		End If
		;--> Eventrückgabe
		eg_event_listbox = eg_lst
		;--> erneuere Listbox
		eg_draw_listbox(eg_lst)
	End If
End Function



Function eg_pressed_combobox(eg_cmb.eg_combobox)
;===================================================================================================================
; gedrückte Combobox behandeln
;===================================================================================================================
	;--> Esc?
	If KeyDown(1) Then
		eg_cmb\listbox\visible = False
		If eg_cmb\listbox\slider<>Null Then eg_cmb\listbox\slider\visible = False
		eg_click_combobox = Null
		eg_draw_combobox(eg_cmb)
		Return
	End If

	;--> setze X und Y Offset wenn Titel Leiste eingeschaltet
	If (eg_cmb\hwnd\style And 4) = 4 Then eg_offsetx=0: eg_offsety=17 Else eg_offsetx=0: eg_offsety=0
	
	;--> setze Y Offset wenn Menü vorhanden
	If (eg_cmb\hwnd\style And 8) = 8 Then eg_offsety = eg_offsety + 17
	
	;--> prüfe Position der Listbox (über oder unter ComboBox)
	If eg_cmb\hwnd\y + eg_cmb\listbox\h + eg_cmb\y + 14 + eg_offsety => eg_screen_height Then
		eg_cmb\listbox\y = eg_cmb\y - eg_cmb\listbox\h + 1
		If eg_cmb\listbox\slider<>Null Then eg_cmb\listbox\slider\y =  eg_cmb\y - eg_cmb\listbox\h + 2
	Else
		eg_cmb\listbox\y = eg_cmb\y + 14
		If eg_cmb\listbox\slider<>Null Then eg_cmb\listbox\slider\y =  eg_cmb\y + 15
	End If 
	
	;--> berechne X und Y Position der Listbox auf dem Bildschirm
	eg_x = eg_cmb\hwnd\x + eg_cmb\listbox\x + eg_offsetx
	eg_y = eg_cmb\hwnd\y + eg_cmb\listbox\y + eg_offsety
	
	;--> Maus über ListBox? Ermittle Eintrag über dem die Maus sich befindet
	If eg_mouse_x_temp<>eg_mouse_x Or eg_mouse_y_temp<>eg_mouse_y Then
		eg_cmb\listbox\number = 0
		If RectsOverlap(eg_mouse_x,eg_mouse_y,1,1,eg_x,eg_y,eg_cmb\listbox\w,eg_cmb\listbox\h) And eg_listbox_drag = 0 Then
			;--> Ist Slider in dieser Listbox aktiv?
			If eg_cmb\listbox\slider.eg_slider = Null Then
				;--> berechne Eintrag
				eg_cmb\listbox\number = (eg_mouse_y - eg_y - 1) / 16 + 1
				If eg_cmb\listbox\number > eg_cmb\listbox\count Then eg_cmb\listbox\number = eg_cmb\listbox\count
			Else
				;--> Maus über Slider?
				If eg_mouse_x < eg_x + eg_cmb\listbox\w - 12 Then
					;--> berechne Eintrag
					eg_cmb\listbox\number = (eg_mouse_y - eg_y - 1) / 16 + eg_cmb\listbox\slider\value
				End If
			End If
		End If	
		eg_draw_listbox(eg_cmb\listbox)
		eg_mouse_x_temp = eg_mouse_x
		eg_mouse_y_temp = eg_mouse_y
	End If

	;--> frage Listbox ab (schalte Fokus aus)
	eg_click_listbox = Null
	eg_pressed_listbox(eg_cmb\listbox)
	eg_click_listbox = Null
	
	;--> Maustaste gedrückt?
	If eg_mouse_hit Then
		;--> ging Mausklick in Listbox?
		If RectsOverlap(eg_mouse_x,eg_mouse_y,1,1,eg_cmb\hwnd\x+eg_offsetx+eg_cmb\listbox\x,eg_cmb\hwnd\y+eg_offsety+eg_cmb\listbox\y,eg_cmb\listbox\w,eg_cmb\listbox\h) Then
			eg_pressed_listbox(eg_cmb\listbox)
		Else
			eg_cmb\listbox\visible = False
			If eg_cmb\listbox\slider<>Null Then eg_cmb\listbox\slider\visible = False
			eg_click_combobox = Null
			eg_draw_combobox(eg_cmb)
		End If
	End If
	
	;--> Listbox Auswahl fertig?
	If eg_event_listbox = eg_cmb\listbox Then	
		eg_cmb\listbox\visible = False
		If eg_cmb\listbox\slider<>Null Then eg_cmb\listbox\slider\visible = False
		eg_click_combobox = Null
		;--> wurde ein Wert von der Listbox zurückgegeben?
		If eg_cmb\listbox\number > 0 Then
			eg_event_combobox = eg_cmb
			eg_number = eg_cmb\listbox\number
			If eg_number > eg_cmb\listbox\count Then eg_number = eg_cmb\listbox\count
			If eg_number < 1 Then eg_number = 1
			eg_cmb\listbox\number = eg_number
			eg_cmb\number = eg_number
			eg_cmb\imgitem = eg_cmb\listbox\imgitem
			eg_cmb\frame = eg_cmb\listbox\frame
			eg_event_number = eg_number
			eg_event_item$ = eg_cmb\listbox\item$
		End If
		eg_draw_combobox(eg_cmb)
	End If
End Function



	
Function eg_pressed_treeview(eg_tv.eg_treeview)
;===================================================================================================================
; gedrückte Treeview behandeln
;===================================================================================================================
	;--> prüfe MouseZ
	eg_treeview_mousez(eg_tv)

	;--> Tastendruck?
	eg_temp = Asc(eg_getkey$())
	
	;--> wenn noch kein Zweig angewählt, dann ignoriere Tastendruck
	If eg_tv\number = 0 Then eg_temp = 0
	
	Select eg_temp
		;--> wenn keine Taste
		Case 0
		;--> Pos1
		Case 1
			;--> suche Root
			For eg_find.eg_treenode = Each eg_treenode
				If eg_find\id = eg_tv\id And eg_find\visible And eg_find\parent=0 Then
					If eg_tv\sliderv<>Null Then eg_tv\sliderv\value = 0
					If eg_tv\sliderh<>Null Then eg_tv\sliderh\value = 0
					eg_tv\number = eg_find\node
					eg_tv\lastnode = eg_find
					eg_event_treeview = eg_find
					eg_event_treenode = eg_find
					eg_event_item$ = eg_find\caption$
					eg_event_number = eg_find\node
					eg_draw_treeview(eg_find)
					Exit
				End If
			Next
		;--> Ende
		Case 2
			;--> suche letzten sichtbaren Eintrag
			For eg_find.eg_treenode = Each eg_treenode
				If eg_find\id = eg_tv\id And eg_find\visible Then
					If eg_tv\sliderv<>Null Then eg_tv\sliderv\value = eg_tv\sliderv\max
					If eg_tv\sliderh<>Null Then eg_tv\sliderh\value = eg_find\depth * 3 - 2
					eg_tv\number = eg_find\node
					eg_tv\lastnode = eg_find
					If eg_find\parent = 0 Then
						eg_event_treeview = eg_find
						eg_event_treenode = eg_find
					End If
					eg_event_item$ = eg_find\caption$
					eg_event_number = eg_find\node
				End If
			Next
			eg_draw_treeview(eg_tv\lastnode)
		;--> hoch
		Case 23
			;--> suche Eintrag vor aktuellem
			eg_find.eg_treenode = Before eg_tv\lastnode
			If eg_find<>Null Then
				Repeat
					If eg_find\id = eg_tv\id And eg_find\visible Then
						;--> Slider aktiv?
						If eg_tv\sliderv<>Null Then
							;--> zähle die darüberliegenden, geöffneten Nodes
							For eg_cnt.eg_treenode = Each eg_treenode
								If eg_cnt\node = eg_find\node Then Exit
								If eg_cnt\id = eg_tv\id And eg_cnt\visible Then eg_c = eg_c + 1
							Next
							If eg_c * 16 < eg_tv\sliderv\value Then eg_tv\sliderv\value = eg_c * 16
						End If
						eg_tv\number = eg_find\node
						eg_tv\lastnode = eg_find
						eg_event_item$ = eg_find\caption$
						eg_event_number = eg_find\node
						eg_event_treenode = eg_find
						Exit
					End If
					If eg_find = First eg_treenode Then Exit
					eg_find = Before eg_find
				Forever
				;--> suche Root von diesem Eintrag für Event Rückgabe
				For eg_find.eg_treenode = Each eg_treenode
					If eg_find\id = eg_tv\id And eg_find\visible And eg_find\parent = 0 Then eg_event_treeview = eg_find: Exit
				Next
				eg_draw_treeview(eg_tv\lastnode)
			End If
		;--> runter
		Case 24
			;--> suche Eintrag nach aktuellem
			eg_find.eg_treenode = After eg_tv\lastnode
			If eg_find<>Null Then
				Repeat
					If eg_find\id = eg_tv\id And eg_find\visible Then
						;--> Slider aktiv?
						If eg_tv\sliderv<>Null Then
							;--> zähle die darüberliegenden, geöffneten Nodes einschließlich sich selbst
							For eg_cnt.eg_treenode = Each eg_treenode
								If eg_cnt\id = eg_tv\id And eg_cnt\visible Then eg_c = eg_c + 1
								If eg_cnt\node = eg_find\node Then Exit
							Next
							eg_c = eg_c + 1
							If eg_c * 16 - eg_tv\sliderv\value > eg_tv\h Then eg_tv\sliderv\value = eg_c * 16 - eg_tv\h
						End If
						eg_tv\number = eg_find\node
						eg_tv\lastnode = eg_find
						eg_event_item$ = eg_find\caption$
						eg_event_number = eg_find\node
						eg_event_treenode = eg_find
						Exit
					End If
					If eg_find = Last eg_treenode Then Exit
					eg_find = After eg_find
				Forever
				;--> suche Root von diesem Eintrag für Event Rückgabe
				For eg_find.eg_treenode = Each eg_treenode
					If eg_find\id = eg_tv\id And eg_find\visible And eg_find\parent = 0 Then eg_event_treeview = eg_find: Exit
				Next
				eg_draw_treeview(eg_tv\lastnode)
			End If
		;--> rechts
		Case 6
			;--> öffne Zweig wenn es ein Zweig ist und er noch geschlossen ist
			eg_find.eg_treenode = eg_tv\lastnode
			eg_check.eg_treenode = After eg_find
			If eg_check<>Null Then
				;--> ist aktueller Punkt ein Zweig?
				If eg_check\parent = eg_find\node Then
					;--> ist er geschlossen?
					If eg_find\state = False Then
						eg_find\state = True
						;--> stelle Rest des Zweigs um
						eg_check.eg_treenode = After eg_find
						If eg_check<>Null Then
							Repeat
								If eg_check\parent < eg_find\node Then Exit
								;--> suche Parent zu diesem node
								For eg_try.eg_treenode = Each eg_treenode
									If eg_try\id = eg_check\id And eg_try\node = eg_check\parent Then Exit
								Next
								;--> werte Parent aus und setze entsprechend den node
								If eg_try\visible And eg_try\state Then eg_check\visible = True
								If eg_check = Last eg_treenode Then Exit
								eg_check = After eg_check
							Forever
						End If
						;--> sammle Parameter für Eventrückgabe
						eg_tv\number = eg_find\node
						eg_tv\lastnode = eg_find
						eg_event_item$ = eg_find\caption$
						eg_event_number = eg_find\node
						eg_event_treenode = eg_find
						For eg_find.eg_treenode = Each eg_treenode
							;--> suche Root von diesem Eintrag für Event Rückgabe
							If eg_find\id = eg_tv\id And eg_find\visible And eg_find\parent = 0 Then eg_event_treeview = eg_find: Exit
						Next
						eg_draw_treeview(eg_find)
						Return
					Else
						;--> wenn nicht geschlossen, aber ein Zweig gehe zum nächsten Child
						If eg_tv\sliderv<>Null Then eg_tv\sliderv\value = eg_tv\sliderv\value + 16
						eg_tv\number = eg_check\node
						eg_tv\lastnode = eg_check
						eg_event_item$ = eg_check\caption$
						eg_event_number = eg_check\node
						eg_event_treenode = eg_check
						For eg_find.eg_treenode = Each eg_treenode
							;--> suche Root von diesem Eintrag für Event Rückgabe
							If eg_find\id = eg_tv\id And eg_find\visible And eg_find\parent = 0 Then eg_event_treeview = eg_find: Exit
						Next
						eg_draw_treeview(eg_find)
						Return
					End If
				End If
			End If
		;--> links
		Case 5
			;--> schließe Zweig wenn es ein Zweig ist und er geöffnet ist
			eg_find.eg_treenode = eg_tv\lastnode
			eg_check.eg_treenode = After eg_find
			If eg_check<>Null Then
				;--> ist aktueller Punkt ein Zweig?
				If eg_check\parent = eg_find\node Then
					;--> ist er geöffnet?
					If eg_find\state Then
						;--> wenn Zweig offen, schließe ihn
						eg_find\state = False
						;--> stelle Rest des Zweigs um
						eg_check.eg_treenode = After eg_find
						If eg_check<>Null Then
							Repeat
								If eg_check\parent < eg_find\node Then Exit
								eg_check\visible = False
								If eg_check = Last eg_treenode Then Exit
								eg_check = After eg_check
							Forever
						End If
						;--> sammle Parameter für Eventrückgabe
						eg_tv\number = eg_find\node
						eg_tv\lastnode = eg_find
						eg_event_item$ = eg_find\caption$
						eg_event_number = eg_find\node
						eg_event_treenode = eg_find
						For eg_find.eg_treenode = Each eg_treenode
							;--> suche Root von diesem Eintrag für Event Rückgabe
							If eg_find\id = eg_tv\id And eg_find\visible And eg_find\parent = 0 Then eg_event_treeview = eg_find: Exit
						Next
						eg_draw_treeview(eg_find)
						Return
					End If
				End If
			End If
			;--> wenn nicht geöffnet, oder kein Zweig suche nächsten Parent
			For eg_try.eg_treenode = Each eg_treenode
				If eg_try\id = eg_tv\id And eg_try\visible And eg_find\parent = eg_try\node Then
					eg_tv\number = eg_try\node
					eg_tv\lastnode = eg_try
					Exit
				End If
			Next
			;--> sammle Parameter für Eventrückgabe
			If eg_try<>Null Then
				;--> Slider aktiv?
				If eg_tv\sliderv<>Null Then
					;--> zähle die darüberliegenden, geöffneten Nodes
					For eg_cnt.eg_treenode = Each eg_treenode
						If eg_cnt\node = eg_try\node Then Exit
						If eg_cnt\id = eg_tv\id And eg_cnt\visible Then eg_c = eg_c + 1
					Next
					If eg_c * 16 < eg_tv\sliderv\value Then eg_tv\sliderv\value = eg_c * 16
				End If
				eg_tv\number = eg_try\node
				eg_tv\lastnode = eg_try
				eg_event_item$ = eg_try\caption$
				eg_event_number = eg_try\node
				eg_event_treenode = eg_try
				For eg_find.eg_treenode = Each eg_treenode
					;--> suche Root von diesem Eintrag für Event Rückgabe
					If eg_find\id = eg_tv\id And eg_find\visible And eg_find\parent = 0 Then eg_event_treeview = eg_find: Exit
				Next
			End If
			eg_draw_treeview(eg_find)
	End Select

	;--> setze X und Y Offset wenn Titel Leiste eingeschaltet
	If (eg_tv\hwnd\style And 4) = 4 Then eg_offsetx=0: eg_offsety=17 Else eg_offsetx=0: eg_offsety=0
	
	;--> setze Y Offset wenn Menü vorhanden
	If (eg_tv\hwnd\style And 8) = 8 Then eg_offsety = eg_offsety + 17
	
	;--> berechne X und Y Position der Listbox auf dem Bildschirm
	eg_x = eg_tv\hwnd\x + eg_tv\x + eg_offsetx
	eg_y = eg_tv\hwnd\y + eg_tv\y + eg_offsety
	
	;--> Sliderbewegung im Gange?
	If eg_treeview_drag>0 And MouseDown(1) = False Then eg_treeview_drag = 0: eg_slider_drag = False

	;--> oder soll begonnen werden?
	If eg_mouse_hit Then
		;--> ging Klick auf Slider vertikal?
		If eg_tv\sliderv<>Null And eg_treeview_drag = 0 Then
			If RectsOverlap(eg_mouse_x,eg_mouse_y,1,1,eg_x+eg_tv\w-12,eg_y,12,eg_tv\h) Then
				eg_treeview_lastpos_y = eg_mouse_y
				eg_treeview_drag = 1
				eg_mouse_hit = False
			End If
		End If
		;--> ging Klick auf Slider horizontal?
		If eg_tv\sliderh<>Null And eg_treeview_drag = 0 Then
			If RectsOverlap(eg_mouse_x,eg_mouse_y,1,1,eg_x,eg_y+eg_tv\h-12,eg_tv\w,12) Then
				eg_treeview_lastpos_x = eg_mouse_x
				eg_treeview_drag = 2
				eg_mouse_hit = False
			End If
		End If
	End If

	;--> bewege Slider vertikal
	If eg_treeview_drag = 1 Then
		;--> übernimm erste Mausposition für Slider
		eg_slider_lastpos = eg_treeview_lastpos_y
		;--> frage Slider ab
		eg_pressed_slider(eg_tv\sliderv)
		;--> Ist Slider bewegt worden?
		If eg_treeview_change<>Int(eg_tv\sliderv\value) Then
			;--> übernimm Wert
			eg_treeview_change = Int(eg_tv\sliderv\value)
			;--> erneuere TreeView, suche dazu einen Node für Parameterübergabe
			For eg_node.eg_treenode = Each eg_treenode
				If eg_node\id = eg_tv\id Then Exit
			Next
			eg_draw_treeview(eg_node)
			;--> schreibe Sliderposition zurück für nächsten Durchlauf
			eg_treeview_lastpos_y = eg_slider_lastpos
		End If
		Return
	End If
	
	;--> bewege Slider horizontal
	If eg_treeview_drag = 2 Then
		;--> übernimm erste Mausposition für Slider
		eg_slider_lastpos = eg_treeview_lastpos_x
		;--> frage Slider ab
		eg_pressed_slider(eg_tv\sliderh)
		;--> Ist Slider bewegt worden?
		If eg_treeview_change<>Int(eg_tv\sliderh\value) Then
			;--> übernimm Wert
			eg_treeview_change = Int(eg_tv\sliderh\value)
			;--> erneuere TreeView, suche dazu einen Node für Parameterübergabe
			For eg_node.eg_treenode = Each eg_treenode
				If eg_node\id = eg_tv\id Then Exit
			Next
			eg_draw_treeview(eg_node)
			;--> schreibe Sliderposition zurück für nächsten Durchlauf
			eg_treeview_lastpos_x = eg_slider_lastpos
		End If
		Return
	End If
	
	;--> Mausklick ?
	If eg_mouse_hit Then
		;--> ging Klick in TreeView?
		If RectsOverlap(eg_mouse_x,eg_mouse_y,1,1,eg_x,eg_y,eg_tv\w,eg_tv\h) Then
			eg_mouse_hit = False
			
			;--> suche Eintrag auf den der Klick ging
			If eg_tv\sliderh<>Null Then eg_sx = eg_tv\sliderh\value
			If eg_tv\sliderv<>Null Then eg_sy = eg_tv\sliderv\value
			eg_sx = 2 - eg_sx
			eg_sy = 2 - eg_sy
			For eg_find.eg_treenode = Each eg_treenode
				If eg_find\id = eg_tv\id And eg_find\visible Then
					;--> ging Klick direkt auf Eintrag?
					If eg_find\img<>0 Then eg_offimg = 23 Else eg_offimg = 0
					If RectsOverlap(eg_mouse_x,eg_mouse_y,1,1,eg_x+eg_sx+eg_find\depth*19,eg_y+eg_sy,eg_textwidth(eg_find\caption$)+eg_offimg,16) Then
						eg_tv\number = eg_find\node
						eg_tv\lastnode = eg_find
						eg_draw_treeview(eg_find)
						;--> suche Root des Eintrags für Rückgabe des eg_event_treeview
						For eg_back.eg_treenode = Each eg_treenode
							If eg_back\parent = 0 And eg_back\id = eg_find\id Then eg_event_treeview = eg_back: Exit
						Next
						eg_event_item$ = eg_find\caption$
						eg_event_number = eg_find\node
						eg_event_treenode = eg_find
						Exit
					Else
						;--> ist Node ein Knoten, also hat + und -, wenn ja stelle Status um
						eg_check.eg_treenode = After eg_find
						If eg_check<>Null Then
							If eg_check\parent = eg_find\node Then
								If RectsOverlap(eg_mouse_x,eg_mouse_y,1,1,eg_x+eg_sx+eg_find\depth*19-16,eg_y+eg_sy,16,16) Then
									If eg_find\state Then
										eg_treenodecollapse(eg_find)
									Else 
										eg_find\state = True
										;--> stelle Rest des Zweigs um
										eg_check.eg_treenode = After eg_find
										If eg_check<>Null Then
											Repeat
												If eg_check\parent < eg_find\node Then Exit
												;--> suche Parent zu diesem node
												For eg_try.eg_treenode = Each eg_treenode
													If eg_try\id = eg_check\id And eg_try\node = eg_check\parent Then Exit
												Next
												;--> werte Parent aus und setze entsprechend den node
												If eg_try\visible And eg_try\state Then eg_check\visible = True
												If eg_check = Last eg_treenode Then Exit
												eg_check = After eg_check
											Forever
										End If
									End If
									eg_draw_treeview(eg_find)
									Exit
								End If
							End If
						End If
					End If			
					eg_y = eg_y + 16
				End If
			Next
		Else
			eg_click_treeview = Null
		End If
	End If
End Function



Function eg_pressed_percentbar(eg_pct.eg_percentbar)
;===================================================================================================================
; gedrückte Percentbar behandeln
;===================================================================================================================

	;--> Maus noch gedrückt?
	If MouseDown(1) = False Then eg_click_percentbar = Null

	;--> setze X und Y Offset wenn Titel Leiste eingeschaltet
	If (eg_pct\hwnd\style And 4) = 4 Then eg_offsetx=0: eg_offsety=17 Else eg_offsetx=0: eg_offsety=0
	
	;--> setze Y Offset wenn Menü vorhanden
	If (eg_pct\hwnd\style And 8) = 8 Then eg_offsety = eg_offsety + 17
	
	;--> berechne X und Y Position der Percentbar auf dem Bildschirm
	eg_x = eg_pct\hwnd\x + eg_pct\x + eg_offsetx

	;--> berechne neuen Wert
	eg_v = Float(100) / eg_pct\w * (eg_mouse_x - eg_x)

	;--> Neuer Wert durch Mausbewegung?
	If eg_pct\value <> eg_v Then
		eg_pct\value = eg_v
		;--> korrigiere Wert (zur Sicherheit)
		If eg_pct\value < 0 Then eg_pct\value = 0
		If eg_pct\value > 100 Then eg_pct\value = 100
		eg_draw_percentbar(eg_pct)
		eg_event_percentbar = eg_pct
	End If
End Function



Function eg_pressed_menu()
;===================================================================================================================
; Menü wurde angeklickt
;===================================================================================================================
	eg_mnu.eg_menu = eg_mover_menu
	
	eg_event_menu = eg_mnu\item[0]					;--> gibt das Menü zurück in welchem ein Menüpunkt angeklickt wurde
	eg_event_menuitem = eg_mover_menuitem 		;--> gibt den Menüpunktes zurück der angeklickt wurde
	eg_event_item$ = eg_mover_menuitem\caption$	;--> gibt den Text des Menüpunktes zurück
	eg_event_number = 0								;--> wird nicht verwendet

	;--> stelle aktives Fenster ein
	eg_win.eg_window = First eg_window

	;--> Wenn angeklickter Menüpunkt im Fenstermenü ist, mache SUB-Menü sichtbar (wenn vorhanden)
	If eg_mnu\hwnd<>Null Then
		If eg_mover_menuitem\parent > 0 Then
			;--> suche entsprechendes Menü
			For eg_mnu.eg_menu = Each eg_menu
				If eg_mnu\id = eg_mover_menuitem\parent Then
					eg_mnu\visible = True
					;--> korrigiere Menüposition falls ausserhalb des Bildschirms
					eg_mnu\x = eg_mover_menuitem\x
					If eg_win\x + eg_mnu\x < 0 Then eg_mnu\x = Abs(eg_win\x)
					Exit
				End If
			Next
		Else
			;--> wenn kein SUB-Menü vorhanden, lösche Flags
			eg_mover_menuitem = Null
			eg_click_menu = False
			eg_click_menuitem = Null
		End If
	End If
End Function



Function eg_control_menu()
;===================================================================================================================
; geöffnetes Menü bearbeiten
;===================================================================================================================
	;--> suche im aktiven Fenster
	For eg_win.EG_Window = Each EG_Window
		If eg_win\state Then Exit
	Next
	
	;--> setze X und Y Offset wenn Titel Leiste eingeschaltet
	If (eg_win\style And 4) = 4 Then eg_offsetx=0: eg_offsety=17 Else eg_offsetx=0: eg_offsety=0

	;--> speichere altes geöffnetes Menü
	eg_mover_menuitem_temp.eg_menuitem = eg_mover_menuitem

	;--> suche aktive Menüs im aktiven Fenster nach Mouseover Ereignissen ab
	;--> suche von hinten nach vorne
	eg_mnu.eg_menu = Last eg_menu
	Repeat
		;--> Menü vorhanden?
		If eg_mnu = Null Then Exit
		;--> SUBmenü und sichtbar?
		If eg_mnu\hwnd = Null And eg_mnu\visible Then
			;--> suche Menüeintrag
			If eg_find_menuitem(eg_mnu,eg_win) Then
				;--> wenn gefundener Menüpunkt ein Break, dann verlasse Prüfung und speichere falls Mousehit
				If eg_mover_menuitem\caption$ = Chr$(27) Then eg_brk = True: eg_mover_menuitem = Null: Exit
				;--> wenn gefundener Menüpunkt ein Parent ist, mache dessen Child sichtbar
				If eg_mover_menuitem\parent > 0 Then
					;--> schließe vorher eventuell sichtbare Menüs
					For eg_pmnu.EG_Menu = Each EG_Menu
						If eg_mnu\depth < eg_pmnu\depth And eg_pmnu\visible Then
							eg_pmnu\visible = False
						End If
					Next
					;--> speichere Position des Parent Menüs für Wertübergabe
					eg_tx = eg_mnu\x + eg_mnu\w
					;--> suche das entsprechende Menü
					For eg_mnu.eg_menu = Each eg_menu
						If eg_mnu\id = eg_mover_menuitem\parent Then
							;--> berechne die Position dieses Menüs und stelle sie ein
							eg_mnu\x = eg_tx - 4
							;--> korrigiere Position falls ausserhalb des Bildschirms
							If eg_win\x + eg_mnu\x + eg_mnu\w > eg_screen_width Then eg_mnu\x = eg_screen_width - eg_win\x - eg_mnu\w - 4
							eg_mnu\visible = True
							eg_ex = True
							Exit
						End If
					Next
				Else
					;--> wenn kein Parent, prüfe ob andere Parents noch geöffnet sind und schließe diese
					For eg_pmnu.eg_menu = Each eg_menu
						If eg_mnu\depth < eg_pmnu\depth And eg_pmnu\visible Then
							eg_pmnu\visible = False
						End If
					Next
					Exit
				End If
			End If
		Else
			;--> Fenstermenü im aktiven Fenster?
			If eg_mnu\hwnd = eg_win Then
				;--> suche Menüeintrag
				If eg_find_menuitem(eg_mnu,eg_win) Then Exit
			End If
		End If
		If eg_mnu = First eg_menu Or eg_ex Then Exit
		eg_mnu = Before eg_mnu
	Forever
	
	;--> prüfe ob User zwischen Fenstermenüs gewechselt hat
	If eg_mover_menuitem_temp <> eg_mover_menuitem Then
		If eg_mover_menuitem <> Null Then
			If eg_mover_menu\hwnd <> Null Then
				;--> schließe alle SUB-Menüs
				For eg_mnu = Each eg_menu
					If eg_mnu\hwnd = Null Then eg_mnu\visible = False
				Next
				;--> mache dieses Fenstermenüitem aktiv
				eg_click_menuitem = eg_mover_menuitem
				;--> mache nun aktives Fenstermenü sichtbar
				If eg_mover_menuitem\parent > 0 Then
					;--> suche entsprechendes Menü
					For eg_mnu.eg_menu = Each eg_menu
						If eg_mnu\id = eg_mover_menuitem\parent Then
							eg_mnu\visible = True
							;--> korrigiere Menüposition falls ausserhalb des Bildschirms
							eg_mnu\x = eg_mover_menuitem\x
							If eg_win\x + eg_mnu\x < 0 Then eg_mnu\x = Abs(eg_win\x)
							Exit
						End If
					Next
				End If
			End If
		End If 
	End If
	
	;--> bei ESC schließe alle SUB-Menüs
	If KeyHit(1) Then
		FlushKeys()
		For eg_mnu.eg_menu = Each eg_menu
			If eg_mnu\hwnd = Null Then
				eg_mnu\visible = False
			End If
		Next
		;--> lösche Mouseover und -click Ereignisse
		eg_mover_menuitem = Null
		eg_click_menu = False
		eg_click_menuitem = Null
	End If
	
	;--> wenn aktueller Eintrag kein Break, bei Mouseclick alle SUB-Menüs schließen und wenn nötig, Events übergeben
	If eg_mouse_hit Then
		FlushKeys()
		If eg_mover_menuitem<>Null Then
			;--> Events übergeben
			If eg_mover_menu\hwnd = Null Then
				;--> eg_event_menu gibt das Menü zurück in welchem ein Menüpunkt angeklickt wurde
				eg_event_menu = eg_mover_menu\item[0]
				;--> eg_event_menuitem gibt den Menüpunktes zurück der angeklickt wurde
				eg_event_menuitem = eg_mover_menuitem
				eg_event_item$ = eg_mover_menuitem\caption$
				eg_event_number = 0
			End If
		End If
		;--> wenn kein Break
		If eg_brk = False Then
			;--> schließe Menüs
			For eg_mnu.eg_menu = Each eg_menu
				If eg_mnu\hwnd = Null Then
					eg_mnu\visible = False
				End If
			Next
			;--> lösche Mouseover und -click Ereignisse
			eg_mover_menuitem = Null
			eg_click_menu = False
			eg_click_menuitem = Null
		End If
	End If
	
End Function



Function eg_find_menuitem(eg_mnu.EG_Menu,eg_win.EG_Window)
;==============================================================================================================
; Sucht nach einem MouseOver im angegebenen Menü
; Es muß sicher gestellt sein das sich das Menü im aktiven Fenster befindet.
;==============================================================================================================
   ;--> setze Mouseover Flags zurück
   eg_mover_menu = Null
   eg_mover_menuitem = Null

   ;--> Rückgabewert
   eg_ex = False
   
   ;--> setze X und Y Offset wenn Titel Leiste eingeschaltet
   If (eg_win\style And 4) = 4 Then eg_offsetx=0: eg_offsety=17 Else eg_offsetx=0: eg_offsety=0

   ;--> suche Items des Menüs ab
   eg_hcount = 2
   For eg_count = 1 To eg_mnu\itemcount
      ;--> Eintrag ein Break?
      If eg_mnu\item.EG_MenuItem[eg_count]\caption$=Chr$(27) Then eg_hcount = eg_hcount + 9 Else eg_hcount = eg_hcount + 17
      ;--> SUB- oder Fenstermenü?
      If eg_mnu\hwnd = Null Then
         eg_x = eg_win\x + eg_mnu\x
         eg_y = eg_win\y + eg_mnu\y + eg_hcount + eg_offsety - 17
         eg_w = eg_mnu\w
         eg_h = 17
      Else
         eg_x = eg_win\x + eg_mnu\item.EG_MenuItem[eg_count]\x
         eg_y = eg_win\y + eg_offsety
         eg_w = eg_mnu\item.EG_MenuItem[eg_count]\w
         eg_h = 17
      End If
      ;--> wenn Eintrag gefunden, stelle MouseOver Flags ein      
      If RectsOverlap(eg_mouse_x,eg_mouse_y,1,1,eg_x,eg_y,eg_w,eg_h) Then
         eg_mover_menu = eg_mnu
         eg_mover_menuitem = eg_mnu\item[eg_count]
         eg_ex = True
         Exit
      End If
   Next
   
      ;--> Menüpunkte gefunden?
	Return eg_ex
End Function


Function eg_getmenuheight(eg_mnu.eg_menu)
;===================================================================================================================
; Berechnet die exakte Höhe eines SUB-Menüs
;===================================================================================================================
	eg_h = 0
	For eg_i=1 To eg_mnu\itemcount
		If eg_mnu\item[eg_i]\caption$ = Chr$(27) Then
			eg_h = eg_h + 9
		Else
			eg_h = eg_h + 17
		End If
	Next
	eg_h = eg_h + 4
	Return eg_h
End Function



Function eg_window_reset()
;===================================================================================================================
; Ändert den Status aller Fenster auf inaktiv
;===================================================================================================================
	For eg_win.eg_window = Each eg_window
		If eg_win\state Then 
			eg_win\state = False
			eg_draw_window(eg_win)
		End If
	Next
End Function



Function eg_window_sort()
;===================================================================================================================
; sortiert Fenster
;===================================================================================================================

	;--> Sortiere Aktives Fenster vor allen anderen an.
	For eg_win.eg_window = Each eg_window
		If eg_win\state Then
			Insert eg_win Before First eg_window
			Exit
		End If
	Next
	
	;--> sortiere nun (wenn vorhanden und sichtbar) die "always on top" Fenster nach vorne
	For eg_win.eg_window = Each eg_window
		If (eg_win\style And 32) = 32 And eg_win\visible Then
			Insert eg_win Before First eg_window
			Exit
		End If
	Next
End Function



Function eg_screen_render()
;===================================================================================================================
; Bildschirm aufbauen
;===================================================================================================================
	SetBuffer BackBuffer()
	
	;--> Schutzabfrage für den Fall das kein Fenster da ist
	eg_win.eg_window = First eg_window
	If eg_win <> Null Then
	
		;--> Fenster nacheinander anzeigen, aktives Fenster zuletzt
		;--> zunächst nur die Fenster die nicht im Vordergrund sein sollen.
		eg_win.eg_window = Last eg_window
		Repeat
			;--> Wenn Fenster sichtbar
			If eg_win\visible And (eg_win\style And 32) = 0 Then
				;--> Zeichne Fenster
				DrawImage eg_win\img,eg_win\x,eg_win\y
				;--> wenn Fenster maximiert, zeichne die Elemente in diesem Fenster
				If Not(eg_win\minimized) Then eg_show_elements(eg_win)
			End If
			If eg_win = First eg_window Then Exit
			eg_win.eg_window = Before eg_win
		Forever
		
		;--> Fenster Schleife nochmals durchlaufen. Diesmal nur die Fenster zeichnen die unbedingt
		;--> im Vordergrund sein sollen.
		eg_win.eg_window = Last eg_window
		Repeat
			;--> Wenn Fenster sichtbar
			If eg_win\visible And (eg_win\style And 32) = 32 Then
				;--> Zeichne Fenster
				DrawImage eg_win\img,eg_win\x,eg_win\y
				;--> wenn Fenster maximiert, zeichne die Elemente in diesem Fenster
				If Not(eg_win\minimized) Then eg_show_elements(eg_win)
			End If
			If eg_win = First eg_window Then Exit
			eg_win.eg_window = Before eg_win
		Forever

		;--> wenn gerade ein Fenster verschoben wird, zeige Koordinaten
		If eg_click_window<>Null And eg_show_windowpos Then
			SetFont eg_font_bold
			x = eg_click_window\x
			y = eg_click_window\y
			Color 0,0,eg_color_bg_tooltip
			Rect eg_screen_width/2 - 30, eg_screen_height/2 - 1, 60, 16,1
			Color 0,0,eg_color_text_tooltip
			Text eg_screen_width/2, eg_screen_height/2,Str$(x)+" : "+Str$(y),1
			Color 0,0,eg_color_darklight
			Rect eg_screen_width/2 - 30, eg_screen_height/2 - 1, 60, 16,0
		End If
	
	;--> Ende Schutzabfrage
	End If
	
	eg_show_mouse()

	;--> Debuginfo anzeigen?
	If eg_ShowInfo Then 
		;--> FPS Counter
		eg_fpscount = eg_fpscount + 1
		If eg_fpstimer < MilliSecs() Then
			eg_fpstimer = MilliSecs() + 1000
			eg_fpsshow = eg_fpscount
			eg_fpscount = -1
		End If
		Color 0,0,$8080B0: Rect eg_screen_width-60,eg_screen_height-33,100,33,1
		SetFont eg_font_bold
		Color 0,0,$FFFFFF: Text eg_screen_width-55,eg_screen_height-23,"FPS: " + eg_fpsshow
	End If
End Function



Function eg_show_mouse()
;===================================================================================================================
; Mauszeiger anzeigen
;===================================================================================================================
	;--> Mauszeiger darstellen wenn gewünscht
	If eg_mouse_user_frame = 0 Then
		Select eg_mouse_frame
			Case 2: eg_offset_x = 11: eg_offset_y = 5
			Case 3: eg_offset_x = 7:  eg_offset_y = 0
		End Select
		If eg_mouse Then 	DrawImage eg_mouse_tile,eg_mouse_x - eg_offset_x,eg_mouse_y - eg_offset_y,eg_mouse_frame
	Else
		If eg_mouse_user_frame < 0 Then eg_mouse_user_frame = 0
		If eg_mouse_user_frame > 9 Then eg_mouse_user_frame = 0
		Select eg_mouse_user_frame
			Case 2: eg_offset_x = 11: eg_offset_y = 5
			Case 3: eg_offset_x = 7:  eg_offset_y = 0
			Case 4: eg_offset_x = 0:  eg_offset_y = 21
			Case 5: eg_offset_x = 11:  eg_offset_y = 0
			Case 6: eg_offset_x = 0:  eg_offset_y = 11
			Case 7: eg_offset_x = 6:  eg_offset_y = 6
			Case 8: eg_offset_x = 6:  eg_offset_y = 6
		End Select
		If eg_mouse Then 	DrawImage eg_mouse_tile,eg_mouse_x - eg_offset_x,eg_mouse_y - eg_offset_y,eg_mouse_user_frame
	End If
End Function



Function eg_show_elements(eg_win.eg_window)
;===================================================================================================================
; Zeichnet alle Elemente im Fenster
;===================================================================================================================
	;--> setze Viewport auf Fenster Größe:
	Viewport eg_win\x,eg_win\y,eg_win\w,eg_win\h
	
	;--> setze X und Y Offset wenn Titel Leiste eingeschaltet
	If (eg_win\style And 4) = 4 Then eg_offsetx=0: eg_offsety=17 Else eg_offsetx=0: eg_offsety=0

	;--> setze Y Offset wenn Menü vorhanden
	If (eg_win\style And 8) = 8 Then eg_offsety = eg_offsety + 17

	eg_offsetx = eg_win\x + eg_offsetx
	eg_offsety = eg_win\y + eg_offsety
	
	;--> Frames
	For eg_frm.eg_frame = Each eg_frame
		If eg_frm\hwnd = eg_win And eg_frm\visible Then
			DrawImage eg_frm\img,eg_frm\x+eg_offsetx,eg_frm\y+eg_offsety
		End If
	Next

	;--> Percentbar
	For eg_pct.eg_percentbar = Each eg_percentbar
		If eg_pct\hwnd = eg_win And eg_pct\visible Then
			DrawImage eg_pct\img,eg_pct\x+eg_offsetx,eg_pct\y+eg_offsety
		End If
	Next
	
	;--> Label
	For eg_lbl.eg_label = Each eg_label
		If eg_lbl\hwnd = eg_win And eg_lbl\visible Then
			DrawImage eg_lbl\img,eg_lbl\x+eg_offsetx,eg_lbl\y+eg_offsety
		End If
	Next
	
	;--> Optionbutton
	For eg_opt.eg_option = Each eg_option
		If eg_opt\hwnd = eg_win And eg_opt\visible Then
			DrawImage eg_opt\img,eg_opt\x+eg_offsetx,eg_opt\y+eg_offsety
		End If
	Next

	;--> CheckBox
	For eg_chk.eg_checkbox = Each eg_checkbox
		If eg_chk\hwnd = eg_win And eg_chk\visible Then
			DrawImage eg_chk\img,eg_chk\x+eg_offsetx,eg_chk\y+eg_offsety
		End If
	Next

	;--> Button
	For eg_but.eg_button = Each eg_button
		If eg_but\hwnd = eg_win And eg_but\visible Then
			DrawImage eg_but\img,eg_but\x+eg_offsetx,eg_but\y+eg_offsety
		End If
	Next

	;--> Input
	For eg_inp.eg_input = Each eg_input
		If eg_inp\hwnd = eg_win And eg_inp\visible Then
			DrawBlock eg_inp\img,eg_inp\x+eg_offsetx,eg_inp\y+eg_offsety
		End If
	Next

	;--> Image
	For eg_img.eg_image = Each eg_image
		If eg_img\hwnd = eg_win And eg_img\visible Then
			If eg_img\trans Then
				DrawImage eg_img\img,eg_img\x+eg_offsetx,eg_img\y+eg_offsety,eg_img\frame
			Else
				DrawBlock eg_img\img,eg_img\x+eg_offsetx,eg_img\y+eg_offsety,eg_img\frame
			End If
		End If
	Next

	;--> ImageButton
	For eg_ibut.eg_imgbutton = Each eg_imgbutton
		If eg_ibut\hwnd = eg_win And eg_ibut\visible Then
			DrawImage eg_ibut\img,eg_ibut\x+eg_offsetx,eg_ibut\y+eg_offsety,eg_ibut\frame
		End If
	Next

	;--> Slider werden vor Combo und ListBox gezeichnet. Slider die sich in einer Listbox oder einem TreeView
	;--> befinden werden noch einmal vom jeweiligen Element gezeichnet. Dies verhindert einen Z-Order AnzeigeBug
	;--> mit den Slidern. (Sonst kann es vor kommen, das ein Slider über einer aufgeklappten ComboBox dargestellt 
	;--> wird.)
	For eg_sld.eg_slider = Each eg_slider
		If eg_sld\hwnd = eg_win And eg_sld\visible Then
			If eg_sld\dir Then
				DrawImage eg_sld\img1,eg_sld\x+eg_offsetx,eg_sld\y+eg_offsety
				DrawImage eg_sld\img,eg_sld\x+eg_offsetx+eg_sld\pixoffset#,eg_sld\y+eg_offsety
			Else
				DrawImage eg_sld\img1,eg_sld\x+eg_offsetx,eg_sld\y+eg_offsety
				DrawImage eg_sld\img,eg_sld\x+eg_offsetx,eg_sld\y+eg_offsety+eg_sld\pixoffset#
			End If
		End If
	Next
	
	;--> Combobox
	For eg_cmb.eg_combobox = Each eg_combobox
		If eg_cmb\hwnd = eg_win And eg_cmb\visible Then
			DrawBlock eg_cmb\img,eg_cmb\x+eg_offsetx,eg_cmb\y+eg_offsety
		End If
	Next

	;--> Treeview
	For eg_tv.eg_treeview = Each eg_treeview
		If eg_tv\hwnd = eg_win And eg_tv\visible Then
			DrawBlock eg_tv\img,eg_tv\x+eg_offsetx,eg_tv\y+eg_offsety
			;--> wenn ein Slider in diesem TreeView zeichne ihn
			If eg_tv\sliderv<>Null Then
				DrawImage eg_tv\sliderv\img1,eg_tv\sliderv\x+eg_offsetx,eg_tv\sliderv\y+eg_offsety
				DrawImage eg_tv\sliderv\img,eg_tv\sliderv\x+eg_offsetx,eg_tv\sliderv\y+eg_offsety+eg_tv\sliderv\pixoffset#
			End If
			If eg_tv\sliderh<>Null Then
				DrawImage eg_tv\sliderh\img1,eg_tv\sliderh\x+eg_offsetx,eg_tv\sliderh\y+eg_offsety
				DrawImage eg_tv\sliderh\img,eg_tv\sliderh\x+eg_offsetx+eg_tv\sliderh\pixoffset#,eg_tv\sliderh\y+eg_offsety
			End If
		End If
	Next

	;--> Spinner (die nicht aufgeklappten Spinner hier zeichnen, damit ComboBoxlisten diese überlagern können)
	For eg_spn.eg_spinner = Each eg_spinner
		If eg_spn\hwnd = eg_win And eg_spn\visible Then
			If eg_spn\state = False Then
				DrawImage eg_spn\img,eg_spn\x+eg_offsetx,eg_spn\y+eg_offsety
			End If
		End If
	Next
		
	;--> Viewport zurücksetzen
	;--> die nachfolgenden Elemente können im Ausgeklappten Zustand auch über die Fenstergrenzen hinaus angezeigt 
	;--> werden. (Listbox z.B. als ausgeklappte ComboBox)
	;--> Ein kleiner "Bug" entsteht hierbei, normale ListBoxen können das dann nämlich auch, aber dafür ist der
	;--> Programmierer und sein "Design" verantwortlich. :-)
	Viewport 0,0,eg_screen_width,eg_screen_height

	;--> Listbox
	For eg_lst.eg_listbox = Each eg_listbox
		If eg_lst\hwnd = eg_win And eg_lst\visible Then
			DrawBlock eg_lst\img,eg_lst\x+eg_offsetx,eg_lst\y+eg_offsety
			;--> wenn ein Slider in dieser Listbox zeichne ihn
			If eg_lst\slider<>Null Then
				DrawImage eg_lst\slider\img1,eg_lst\slider\x+eg_offsetx,eg_lst\slider\y+eg_offsety
				DrawImage eg_lst\slider\img,eg_lst\slider\x+eg_offsetx,eg_lst\slider\y+eg_offsety+eg_lst\slider\pixoffset#
			End If
		End If
	Next

	;--> Spinner (die aufgeklappten Spinner hier zeichnen, damit diese auch über Listboxen sichtbar werden)
	For eg_spn.eg_spinner = Each eg_spinner
		If eg_spn\hwnd = eg_win And eg_spn\visible Then
			If eg_spn\state Then
				DrawImage eg_spn\img,eg_spn\x+eg_offsetx,eg_spn\y+eg_offsety
				DrawImage eg_spn\img1,eg_spn\x+eg_offsetx+eg_spn\pixoffset#,eg_spn\y+eg_offsety
			End If
		End If
	Next
		
	;--> Menüanzeige
	For eg_mnu.eg_menu = Each eg_menu
		;--> Menü sichtbar?
		If eg_mnu\visible Then
			;--> Wenn Menü ein Fenstermenü, zeichne auf jeden Fall
			If eg_mnu\hwnd = eg_win Then DrawImage eg_mnu\img, eg_mnu\x + eg_offsetx, eg_mnu\y + eg_offsety - 17
			;--> wird gerade das aktive Fenster gezeigt?
;			If eg_win = First EG_Window Then
			If eg_win\state Then
				;--> dann zeichne auch geöffnete SUB Menüs
				If eg_mnu\hwnd = Null Then DrawImage eg_mnu\img, eg_mnu\x + eg_offsetx, eg_mnu\y + eg_offsety - 17
				;--> zeichne markierten Menüeintrag wenn vorhanden
				If eg_mover_menuitem <> Null And eg_mover_menu = eg_mnu Then
					;--> Menü ein SUB- oder Fenstermenü?
					If eg_mover_menu\hwnd = Null Then
						eg_x = eg_offsetx + eg_mover_menu\x
						eg_y = eg_offsety + eg_mover_menuitem\y + eg_mover_menu\y - 17
						DrawImage eg_mover_menuitem\img1, eg_x, eg_y
					Else
						eg_x = eg_offsetx + eg_mover_menuitem\x
						eg_y = eg_offsety - 17
						DrawImage eg_mover_menuitem\img1, eg_x, eg_y
					End If
				End If
				;--> zeichne angeklicktes Fenstermenüitem
				If eg_click_menuitem <> Null Then
					eg_x = eg_offsetx + eg_click_menuitem\x
					eg_y = eg_offsety - 17
					DrawImage eg_click_menuitem\img2, eg_x, eg_y
				End If
			End If
		End If
	Next
	
	;--> Tooltip
	If eg_tooltip<>"" Then
		If eg_tooltip_effect_timer = 0 Then
			eg_tooltip_effect_timer = MilliSecs() + eg_tooltip_effect_delay
		Else
			If eg_tooltip_effect_timer < MilliSecs() Then
				eg_offsetx = 0
				eg_offsety = 20
			
				SetFont eg_font_bold
				eg_s = StringWidth(eg_tooltip)
				
				If eg_mouse_x + eg_s + 4 > eg_screen_width Then eg_offsetx = -eg_s
				If eg_mouse_y + eg_offsety + 15 > eg_screen_height Then eg_offsety = -21
				
				If eg_tooltip_effect_fps < MilliSecs() Then
					eg_tooltip_effect_fps = MilliSecs() + 5
					If eg_tooltip_effect_count < eg_s+4 Then eg_tooltip_effect_count = eg_tooltip_effect_count + 10
				End If
				
				Viewport eg_mouse_x+eg_offsetx,eg_mouse_y + eg_offsety,eg_tooltip_effect_count, 15
				Color 0,0,eg_color_bg_tooltip
				Rect eg_mouse_x+eg_offsetx,eg_mouse_y + eg_offsety,eg_s + 4, 15,1
				Color 0,0,eg_color_darklight
				Rect eg_mouse_x+eg_offsetx,eg_mouse_y + eg_offsety,eg_s + 4, 15,0
				Color 0,0,eg_color_text_tooltip
				Text eg_mouse_x+eg_offsetx+2,eg_mouse_y+eg_offsety+1,eg_tooltip
				Viewport 0,0,eg_screen_width,eg_screen_height
			End If
		End If
	Else
		eg_tooltip_effect_fps = 0
		eg_tooltip_effect_timer = 0
		eg_tooltip_effect_count = 0
	End If
	
End Function



Function eg_wordwrap(eg_txt$,eg_img,eg_halign,eg_valign,eg_offsetx=0,eg_offsety=0,eg_nowrap=False)
;===================================================================================================================
;    eg_txt$ = Text der ausgegeben wird.
;     eg_img = Image in welches die Ausgabe des Textes erfolgen soll.
;  eg_halign = horizontale Ausrichtung des Textes: eg_left, eg_center oder eg_right
;  eg_valign = vertikale Ausrichtung des Textes: eg_top, eg_middle oder eg_bottom
; eg_offsetx = Optional: zusätzlicher horizontaler Versatz
; eg_offsety = Optional: zusätzlicher vertikaler Versatz
;
; Die eg_wordwrap Funktion gibt einen beliebigen Text innerhalb einer Begrenzung aus, wobei der Text automatisch an
; bestimmten Trennzeichen umgebrochen wird wenn er die Begrenzung überschreitet. Die Ausrichtung des Textes kann 
; angegeben werden. Ebenso können durch die Angabe von Steuerzeichen im Text verschiedene Schrifttypen und -farben 
; aktiviert sowie Zeilenumbrüche erzwungen werden.
;
; Die Liste der Trennzeichen befindet sich in der Variablen eg_trenn$ und kann erweitert werden.
;
; Folgende ASCII Steuercodes stehen zur Verfügung:
;
; CHR$(0)  - normale Schrift (Standard)
; CHR$(1)  - kursive Schrift
; CHR$(2)  - unterstrichene Schrift
; CHR$(3)  - kursiv und unterstrichene Schrift
; CHR$(4)  - fette Schrift
; CHR$(5)  - fette und kursive Schrift
; CHR$(6)  - fette und unterstrichene Schrift
; CHR$(7)  - fette, kursive und unterstrichene Schrift
; CHR$(8)  - Schriftfarbe     Bsp: CHR$(8) + "FFFFFF" + "weißer Text"            (setzt weiße Farbe)
; CHR$(9)  - Hintergrundfarbe Bsp: CHR$(9) + "FF0000" + "roter Hintergrund"      (setzt rote Farbe)
;                             Bsp: CHR$(9) + "TTTTTT" + "kein Hintergrund"       (Standard)
; CHR$(10) - erzwingt einen Zeilenumbruch.
;===================================================================================================================

	;--> hier können weitere Trennzeichen angefügt werden. (siehe Beschreibung)
	eg_trenn$ = " .:-,;?!¦|/\_"

	;--> wenn nix dann weg
	If eg_txt$="" Or eg_img=0 Then Return
	
	;--> leeren der Felder
	Dim eg_word$(200)
	Dim eg_wordwidth(200)
	
	;--> TrennString korrigieren (dient nur dazu das beim Editieren des oberen eg_trenn$ der CHR$(10) nicht verschütt geht)
	eg_trenn$ = Chr$(10) + eg_trenn$
	
	;--> Standard's einstellen
	SetFont eg_font_normal
	eg_wrapline = 0
	eg_bgcolor = -1
	eg_vgcolor = $000000

	;--> An den Text einen Zeilenumbruch anfügen, damit bei kurzen Sätzen kein Umbruch stattfindet.
	eg_txt$ = eg_txt$ + Chr$(10)
	
	;--> Buffer und Variablen setzen	
	SetBuffer ImageBuffer(eg_img)
	eg_x = 0
	eg_y = 0
	eg_w = ImageWidth(eg_img)
	eg_h = ImageHeight(eg_img)
	
	;Schritt 1:
	;==========
	; Zuerst wird der Text solange gescannt bis entweder ein gewollter Zeilenumbruch kommt, oder der Text die
	; maximale Breite erreicht hat. Wenn dies geschieht wird die Schleife verlassen. Dabei ist es nötig schon
	; die richtigen Schriftarten einzustellen, damit auch die korrekte Breite ermittelt wird.
	; An dieser Stelle wird eine UmbruchsMÖGLICHKEIT noch nicht untersucht.
	
	;--> Texterkennung (parsing)
	Repeat
		eg_teil$ = ""
		eg_pointer = 1
		eg_textwidth = 0
		Repeat
			eg_t$ = Mid$(eg_txt$,eg_pointer,1): eg_l = Asc(eg_t$)
			eg_pointer = eg_pointer + 1
			;--> Steuerzeichen?
			If eg_l < 32 Then
				eg_teil$ = eg_teil$ + eg_t$
				Select eg_l
					Case 0: SetFont eg_font_normal
					Case 1: SetFont eg_font_kursiv
					Case 2: SetFont eg_font_underline
					Case 3: SetFont eg_font_kursivunderline
					Case 4: SetFont eg_font_bold
					Case 5: SetFont eg_font_boldkursiv
					Case 6: SetFont eg_font_boldunderline
					Case 7: SetFont eg_font_boldkursivunderline
					Case 8,9
						eg_teil$ = eg_teil$ + Mid$(eg_txt$,eg_pointer,6)
						eg_pointer = eg_pointer + 6			 		;--> wenn Farbe, überspring die nächsten 6 Zeichen
					Case 10: eg_pointer = Len(eg_txt$) + 1		;--> Zeilenumbruch, erzwinge Exit
				End Select
			Else
				;--> Stringlänge schon erreicht?
				eg_teil$ = eg_teil$ + eg_t$
				eg_textwidth = eg_textwidth + StringWidth(eg_t$)
				If eg_textwidth + StringWidth(eg_t$) > eg_w Then eg_pointer = Len(eg_txt$) + 1 ;--> ja, Exit
			End If
		Until eg_pointer > Len(eg_txt$) ;--> noch Text da? Dann nochmal
		
		;Schritt 2:
		;==========
		; Nun wird der gebildete Teilstring auf eine Trennmöglichkeit untersucht. Dies geschieht von hinten
		; nach vorne. Verglichen werden hierbei nacheinander alle Trennzeichen die in eg_trenn$ stehen.
		
		If eg_nowrap = False Then
		
			;--> suche erste Umbruchmöglichkeit im Teilstring
			eg_wrappoint = 0
			For eg_i = Len(eg_teil$) To 1 Step -1
				If Instr(eg_trenn$,Mid$(eg_teil$,eg_i,1)) Then eg_wrappoint = eg_i: Exit
			Next
			
			;--> wenn keine Trennmöglichkeit gefunden wurde, dann übernimm Gesamtlänge
			If eg_wrappoint = 0 Then eg_wrappoint = Len(eg_teil$)
	
			;--> Übertrage den ermittelten Teilstring in die Ausgabe
			eg_word(eg_wrapline) = Left$(eg_txt$,eg_wrappoint)
			
			;--> Neuberechnung der Stringbreite wenn Text umgebrochen wurde.
			If Len(eg_teil$)<>Len(eg_word(eg_wrapline)) Then
				eg_textwidth = eg_textwidth - StringWidth(Right$(eg_teil$,Len(eg_teil$)-Len(eg_word(eg_wrapline))))
			End If		
	
			;--> Übertrage den ermittelten Teilstring in die Ausgabe
			eg_word(eg_wrapline) = Left$(eg_txt$,eg_wrappoint)
			
			;--> Abschneiden des eg_teil$ vom txt$
			eg_txt$ = Right$(eg_txt$,Len(eg_txt$)-eg_wrappoint)
			
			;--> übernimm Länge
			eg_wordwidth(eg_wrapline) = eg_textwidth
	
			;--> nächste Zeile
			eg_wrapline = eg_wrapline + 1
		Else
			eg_wrapline = 1
			eg_wordwidth(0) = eg_textwidth
			eg_word(0) = eg_txt$
			eg_txt$ = ""
		End If	

	Until Len(eg_txt$) = 0

	;Schritt 3:
	;==========
	; Nun werden die Y-Startkoordinaten in Abhängigkeit von eg_valign errechnet und die Ausgabe der Zeilen beginnt.
	; Die Positionsbestimmung für eg_halign findet in der Schleife für jede Zeile einzeln statt.

	;--> bestimme Positionswerte
	Select eg_valign
		Case eg_top: eg_y = 0
		Case eg_middle: eg_y = eg_y + (eg_h - eg_wrapline * 13) / 2
		Case eg_bottom: eg_y = eg_y + (eg_h - eg_wrapline * 13)
	End Select
	eg_y=eg_y+eg_offsety

	SetFont eg_font_normal

	;--> Textausgabe (parsing)
	eg_j=0 
	For eg_j=0 To eg_wrapline-1
		eg_xp = 0
		
		;--> bestimme Positionswerte
		Select eg_halign
			Case eg_left: eg_cx = eg_x
			Case eg_center: eg_cx = eg_x + (eg_w - eg_wordwidth(eg_j)) / 2
			Case eg_right: eg_cx = (eg_x + eg_w) - eg_wordwidth(eg_j)
		End Select
		eg_cx=eg_cx+eg_offsetx
				
		;--> gib Zeile aus
		eg_i=1
		Repeat
			eg_t$ = Mid$(eg_word(eg_j),eg_i,1): eg_l = Asc(eg_t$)
			Select eg_l
				Case 0: SetFont eg_font_normal
				Case 1: SetFont eg_font_kursiv
				Case 2: SetFont eg_font_underline
				Case 3: SetFont eg_font_kursivunderline
				Case 4: SetFont eg_font_bold
				Case 5: SetFont eg_font_boldkursiv
				Case 6: SetFont eg_font_boldunderline
				Case 7: SetFont eg_font_boldkursivunderline
				Case 8,9
					;--> gefundenen Farbstring in einen Farbwert umrechnen
					eg_col=0
					For eg_h=0 To 5
						eg_c=Asc(Mid$(eg_word(eg_j),eg_i+1+eg_h,1))
						If eg_c=84 Then eg_col=-1: Exit
						If eg_c>64 Then eg_c=eg_c-55 Else eg_c=eg_c-48
						eg_col = eg_col + (eg_c * 16^(5-eg_h))
					Next					
					eg_i = eg_i + 6
					If eg_L=8 Then eg_vgcolor=eg_col
					If eg_L=9 Then eg_bgcolor=eg_col
				Case 10: ;--> Dummy für Textumbruch
				Default
					eg_sw=StringWidth(eg_t$)
					If eg_bgcolor>-1 Then
						Color 0,0,eg_bgcolor
						Rect eg_cx+eg_xp-1,eg_y+eg_j*13,eg_sw+1,13,1
					End If
					Color 0,0,eg_vgcolor
					Text eg_cx+eg_xp,eg_y+eg_j*13,eg_T$
					eg_xp = eg_xp + eg_sw
			End Select
			eg_i=eg_i+1
		Until eg_i>Len(eg_word(eg_j))
	Next
End Function



Function eg_instr(eg_search$,eg_dir)
;==============================================================================================================
; Diese Funktion arbeitet ähnlich wie die INSTR Funktion. Allerdings durchsucht sie eine String nicht nur nach
; einem Zeichen, sondern nach einer ganzen Reihe von Zeichen, im weiteren als Suchzeichen bezeichnet.
; Wenn eg_dir = 0 ist, wird von rechts nach links, ansonsten von links nach rechts durchsucht. Weitere
; Besonderheiten sind:
;
; Linksrichtung:
; ~~~~~~~~~~~~~~
; Ist die erste Position in Suchrichtung bereits ein Suchzeichen, dann muß erst ein anderes Zeichen
; kommen bis mit der Suche nach einem weiteren Suchzeichen begonnen wird. 
;
; Rechtsrichtung:
; ~~~~~~~~~~~~~~~
; Wird ein Suchzeichen gefunden, wird weiter nach Suchzeichen gesucht, bis ein anderes Zeichen gefunden wird.
;==============================================================================================================

	eg_p = 0
	eg_check$=Chr$(34)+" '/\;:,_-|.!?"
	
	If eg_dir=0 Then
		eg_start=Len(eg_search$)
		If Instr(eg_check$,Right$(eg_search$,1)) > 0 Then
			For eg_start=Len(eg_search$) To 1 Step -1
				If Instr(eg_check$,Mid$(eg_search$,eg_start,1)) = 0 Then Exit
			Next
		End If
		For eg_i = eg_start To 1 Step -1
			If Instr(eg_check$,Mid$(eg_search$,eg_i,1)) > 0 Then eg_p = eg_i: Exit
		Next
	Else
		For eg_start = 1 To Len(eg_search$)
			If Instr(eg_check$,Mid$(eg_search$,eg_start,1)) = 0 Then Exit
		Next
		For eg_i=eg_start To Len(eg_search$)
			If Instr(eg_check$,Mid$(eg_search$,eg_i,1)) > 0 Then eg_p = eg_i - 1: Exit
		Next
		If eg_p = 0 Then eg_p = Len(eg_search$)
	End If
	
	Return eg_p
End Function



Function eg_getkey$()
;==============================================================================================================
; ...liefert CHR$(0) wenn keine Taste gedrückt wurde. Ansonsten wird das ASCII Zeichen zurückgeliefert.
;
; Die Routine ersetzt im Prinzip die GetKey() Funktion. Allerdings ermittelt diese Funktion den Tastenstatus.
; Somit kann eine repetierende Abfrage erzeugt werden. Neben den 'normalen' Tasten wie A,B,C usw. werden auch
; einige Steuertasten (links, rechts usw.) abgefragt. Ebenso werden die Kombinationen mit Shift, Strg oder Alt
; ausgewertet und ein entsprechendes ASCII Zeichen zurückgegeben.
;
; Die Steuertasten geben folgende ASCII Werte zurück:
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 01 - Pos1
; 02 - Ende
; 03 - Shift + Pos1
; 04 - Shift + Ende
; 05 - Links
; 06 - Rechts
; 07 - Shift + Links
; 08 - Shift + Rechts
; 09 - Strg + Links
; 10 - Strg + Rechts
; 11 - Strg + Shift + Links
; 12 - Strg + Shift + Rechts
; 13 - Return
; 14 - Entfernen
; 15 - TAB
; 16 - Shift + TAB
; 17 - BackSpace (DEL)
; 18 - Strg + C und Strg + Einfg (kopieren)
; 19 - Strg + V und Shift + Einfg (einfügen)
; 20 - Strg + X (ausschneiden)
; 21 - Einfg

; 23 - hoch
; 24 - runter
; 25 - Bild hoch
; 26 - Bild runter
; 31 - ESC
;==============================================================================================================

	If KeyDown(42) Or KeyDown(54) Then eg_shift=1 Else eg_shift=0
	If KeyDown(29) Or KeyDown(157) Then eg_ctrl=1 Else eg_ctrl=0
	If KeyDown(56) Or KeyDown(184) Then eg_alt=1 Else eg_alt=0

	;--> erfasse den ersten Tastendruck über GetKey() bzw. über KeyHit() beim Ziffernblock
	eg_key$ = Chr$(GetKey())
	;--> konvertiere Ziffernblock
	If KeyHit(82)  Then eg_key$="0"
	If KeyHit(79)  Then eg_key$="1"
	If KeyHit(80)  Then eg_key$="2"
	If KeyHit(81)  Then eg_key$="3"
	If KeyHit(75)  Then eg_key$="4"
	If KeyHit(76)  Then eg_key$="5"
	If KeyHit(77)  Then eg_key$="6"
	If KeyHit(71)  Then eg_key$="7"
	If KeyHit(72)  Then eg_key$="8"
	If KeyHit(73)  Then eg_key$="9"
	If KeyHit(181) Then eg_key$="/"
	If KeyHit(55)  Then eg_key$="*"
	If KeyHit(74)  Then eg_key$="-"
	If KeyHit(78)  Then eg_key$="+"
	If KeyHit(83)  Then eg_key$=","
	
	;--> Steuertasten
	If eg_shift Then
		If KeyHit(203) Then eg_key$=Chr$(07)    ;links
		If KeyHit(205) Then eg_key$=Chr$(08)    ;rechts
		If KeyHit(199) Then eg_key$=Chr$(03)    ;Pos1
		If KeyHit(207) Then eg_key$=Chr$(04)    ;Ende
		If KeyHit(015) Then eg_key$=Chr$(16)    ;TAB
		If KeyHit(210) Then eg_key$=Chr$(19)    ;Einfg
		If eg_ctrl Then
			If eg_key$=Chr$(07) Then eg_key$=Chr$(11)	;links
			If eg_key$=Chr$(08) Then eg_key$=Chr$(12)	;rechts
		End If
	Else
		If KeyHit(203) Then eg_key$=Chr$(05)    ;links
		If KeyHit(205) Then eg_key$=Chr$(06)    ;rechts
		If KeyHit(200) Then eg_key$=Chr$(23)    ;hoch
		If KeyHit(208) Then eg_key$=Chr$(24)    ;runter
		If KeyHit(201) Then eg_key$=Chr$(25)    ;Bild hoch
		If KeyHit(209) Then eg_key$=Chr$(26)    ;Bild runter
		If KeyHit(199) Then eg_key$=Chr$(01)    ;Pos1
		If KeyHit(207) Then eg_key$=Chr$(02)    ;Ende
		If KeyHit(015) Then eg_key$=Chr$(15)    ;TAB
		If KeyHit(210) Then eg_key$=Chr$(21)    ;Einfg
		If eg_ctrl Then
			If eg_key$=Chr$(05) Then eg_key$=Chr$(09)	;links
			If eg_key$=Chr$(06) Then eg_key$=Chr$(10)	;rechts
			If KeyHit(46) Then eg_key$=Chr$(18)      ;Strg+C
			If KeyHit(47) Then eg_key$=Chr$(19)      ;Strg+V
			If KeyHit(45) Then eg_key$=Chr$(20)      ;Strg+X
			If eg_key$=Chr$(21) Then eg_key$=Chr$(18);Strg+Einfg
		End If
		If KeyHit(001) Then eg_key$=Chr$(31)    ;ESC
		If KeyHit(211) Then eg_key$=Chr$(14)    ;Entf
		If KeyHit(14)  Then eg_key$=Chr$(17)    ;Del
		If KeyHit(028) Then eg_key$=Chr$(13)    ;Return
		If KeyHit(156) Then eg_key$=Chr$(13)    ;Return
	End If
	
	;--> wenn GetKey bzw. KeyHit() nichts ergeben haben, dann hält der User womöglich eine Taste fest
	;--> ermittle die Taste und frage sie ab. Der Timer dient der Repetiergeschwindigkeit.
	If eg_key$=Chr$(0) Then
		If eg_keyb_timer<MilliSecs() Then
			eg_keyb_timer=MilliSecs() + eg_keyb_repeattime
			
			;--> Steuertasten
			If eg_shift Then
				If KeyDown(203) Then eg_key$=Chr$(07)    ;links
				If KeyDown(205) Then eg_key$=Chr$(08)    ;rechts
				If eg_ctrl Then
					If KeyDown(203) Then eg_key$=Chr$(11)	;links
					If KeyDown(205) Then eg_key$=Chr$(12)	;rechts
				End If
			Else
				If KeyDown(203) Then eg_key$=Chr$(05)    ;links
				If KeyDown(205) Then eg_key$=Chr$(06)    ;rechts
				If KeyDown(200) Then eg_key$=Chr$(23)    ;hoch
				If KeyDown(208) Then eg_key$=Chr$(24)    ;runter
				If KeyDown(201) Then eg_key$=Chr$(25)    ;Bild hoch
				If KeyDown(209) Then eg_key$=Chr$(26)    ;Bild runter
				If eg_ctrl Then
					If KeyDown(203) Then eg_key$=Chr$(09)	;links
					If KeyDown(205) Then eg_key$=Chr$(10)	;rechts
				End If
				If KeyDown(211) Then eg_key$=Chr$(14)    ;Entf
				If KeyDown(14)  Then eg_key$=Chr$(17)    ;Del
				If KeyDown(57)  Then eg_key$=Chr$(32)    ;Leertaste
			End If
			
			;--> 0...9
			If eg_shift Then
				If KeyDown(11)  Then eg_key$="="      ;=
				If KeyDown(2)   Then eg_key$="!"      ;!
				If KeyDown(3)   Then eg_key$=Chr$(34) ;"
				If KeyDown(4)   Then eg_key$="§"      ;§
				If KeyDown(5)   Then eg_key$="$"      ;$
				If KeyDown(6)   Then eg_key$="%"      ;%
				If KeyDown(7)   Then eg_key$="&"      ;&
				If KeyDown(8)   Then eg_key$="/"      ;/
				If KeyDown(9)   Then eg_key$="("      ;(
				If KeyDown(10)  Then eg_key$=")"      ;)
			Else
				If KeyDown(11)  Then eg_key$="0"      ;0
				If KeyDown(2)   Then eg_key$="1"      ;1
				If KeyDown(3)   Then eg_key$="2"      ;2
				If KeyDown(4)   Then eg_key$="3"      ;3
				If KeyDown(5)   Then eg_key$="4"      ;4
				If KeyDown(6)   Then eg_key$="5"      ;5
				If KeyDown(7)   Then eg_key$="6"      ;6
				If KeyDown(8)   Then eg_key$="7"      ;7
				If KeyDown(9)   Then eg_key$="8"      ;8
				If KeyDown(10)  Then eg_key$="9"      ;9
			End If
			
			;--> Ziffernblock
			If KeyDown(82)  Then eg_key$="0"         ;0
			If KeyDown(79)  Then eg_key$="1"         ;1
			If KeyDown(80)  Then eg_key$="2"         ;2
			If KeyDown(81)  Then eg_key$="3"         ;3
			If KeyDown(75)  Then eg_key$="4"         ;4
			If KeyDown(76)  Then eg_key$="5"         ;5
			If KeyDown(77)  Then eg_key$="6"         ;6
			If KeyDown(71)  Then eg_key$="7"         ;7
			If KeyDown(72)  Then eg_key$="8"         ;8
			If KeyDown(73)  Then eg_key$="9"         ;9
			If KeyDown(181) Then eg_key$="/"         ;/
			If KeyDown(55)  Then eg_key$="*"         ;*
			If KeyDown(74)  Then eg_key$="-"         ;-
			If KeyDown(78)  Then eg_key$="+"         ;+
			If KeyDown(83)  Then eg_key$=","         ;,
			
			;--> a...z,äöüß
			If eg_shift Then
				If KeyDown(30)  Then eg_key$="A"      ;A
				If KeyDown(48)  Then eg_key$="B"      ;B
				If KeyDown(46)  Then eg_key$="C"      ;C
				If KeyDown(32)  Then eg_key$="D"      ;D
				If KeyDown(18)  Then eg_key$="E"      ;E
				If KeyDown(33)  Then eg_key$="F"      ;F
				If KeyDown(34)  Then eg_key$="G"      ;G
				If KeyDown(35)  Then eg_key$="H"      ;H
				If KeyDown(23)  Then eg_key$="I"      ;I
				If KeyDown(36)  Then eg_key$="J"      ;J
				If KeyDown(37)  Then eg_key$="K"      ;K
				If KeyDown(38)  Then eg_key$="L"      ;L
				If KeyDown(50)  Then eg_key$="M"      ;M
				If KeyDown(49)  Then eg_key$="N"      ;N
				If KeyDown(24)  Then eg_key$="O"      ;O
				If KeyDown(25)  Then eg_key$="P"      ;P
				If KeyDown(16)  Then eg_key$="Q"      ;Q
				If KeyDown(19)  Then eg_key$="R"      ;R
				If KeyDown(31)  Then eg_key$="S"      ;S
				If KeyDown(20)  Then eg_key$="T"      ;T
				If KeyDown(22)  Then eg_key$="U"      ;U
				If KeyDown(47)  Then eg_key$="V"      ;V
				If KeyDown(17)  Then eg_key$="W"      ;W
				If KeyDown(45)  Then eg_key$="X"      ;X
				If KeyDown(44)  Then eg_key$="Y"      ;Y
				If KeyDown(21)  Then eg_key$="Z"      ;Z
				If KeyDown(40)  Then eg_key$="Ä"      ;Ä
				If KeyDown(39)  Then eg_key$="Ö"      ;Ö
				If KeyDown(26)  Then eg_key$="Ü"      ;Ü
				If KeyDown(12)  Then eg_key$="?"      ;?
			Else
				If KeyDown(30)  Then eg_key$="a"      ;a
				If KeyDown(48)  Then eg_key$="b"      ;b
				If KeyDown(46)  Then eg_key$="c"      ;c
				If KeyDown(32)  Then eg_key$="d"      ;d
				If KeyDown(18)  Then eg_key$="e"      ;e
				If KeyDown(33)  Then eg_key$="f"      ;f
				If KeyDown(34)  Then eg_key$="g"      ;g
				If KeyDown(35)  Then eg_key$="h"      ;h
				If KeyDown(23)  Then eg_key$="i"      ;i
				If KeyDown(36)  Then eg_key$="j"      ;j
				If KeyDown(37)  Then eg_key$="k"      ;k
				If KeyDown(38)  Then eg_key$="l"      ;l
				If KeyDown(50)  Then eg_key$="m"      ;m
				If KeyDown(49)  Then eg_key$="n"      ;n
				If KeyDown(24)  Then eg_key$="o"      ;o
				If KeyDown(25)  Then eg_key$="p"      ;p
				If KeyDown(16)  Then eg_key$="q"      ;q
				If KeyDown(19)  Then eg_key$="r"      ;r
				If KeyDown(31)  Then eg_key$="s"      ;s
				If KeyDown(20)  Then eg_key$="t"      ;t
				If KeyDown(22)  Then eg_key$="u"      ;u
				If KeyDown(47)  Then eg_key$="v"      ;v
				If KeyDown(17)  Then eg_key$="w"      ;w
				If KeyDown(45)  Then eg_key$="x"      ;x
				If KeyDown(44)  Then eg_key$="y"      ;y
				If KeyDown(21)  Then eg_key$="z"      ;z
				If KeyDown(40)  Then eg_key$="ä"      ;ä
				If KeyDown(39)  Then eg_key$="ö"      ;ö
				If KeyDown(26)  Then eg_key$="ü"      ;ü
				If KeyDown(12)  Then eg_key$="ß"      ;ß
			End If
			
			;--> Sonderzeichen
			If eg_shift Then
				If KeyDown(13)  Then eg_key$="`"      ;`
				If KeyDown(86)  Then eg_key$=">"      ;>
				If KeyDown(51)  Then eg_key$=";"      ;;
				If KeyDown(52)  Then eg_key$=":"      ;:
				If KeyDown(53)  Then eg_key$="_"      ;_
				If KeyDown(43)  Then eg_key$="'"      ;'
				If KeyDown(41)  Then eg_key$="°"      ;°
				If KeyDown(27)  Then eg_key$="*"      ;*
			Else
				If KeyDown(13)  Then eg_key$="´"      ;´
				If KeyDown(86)  Then eg_key$="<"      ;<
				If KeyDown(51)  Then eg_key$=","      ;,
				If KeyDown(52)  Then eg_key$="."      ;.
				If KeyDown(53)  Then eg_key$="-"      ;-
				If KeyDown(43)  Then eg_key$="#"      ;#
				If KeyDown(41)  Then eg_key$="^"      ;^
				If KeyDown(27)  Then eg_key$="+"      ;+
			End If
			
			;--> Tasten die mit ALT-erreicht werden
			If eg_alt Then
				If KeyDown(11)  Then eg_key$="}"      ;}
				If KeyDown(3)   Then eg_key$="²"      ;²
				If KeyDown(4)   Then eg_key$="³"      ;³
				If KeyDown(8)   Then eg_key$="{"      ;{
				If KeyDown(9)   Then eg_key$="["      ;[
				If KeyDown(10)  Then eg_key$="]"      ;]
				If KeyDown(12)  Then eg_key$="\"      ;\
				If KeyDown(16)  Then eg_key$="@"      ;@
				If KeyDown(27)  Then eg_key$="~"      ;~
				If KeyDown(86)  Then eg_key$="|"      ;|
				If KeyDown(18)  Then eg_key$="€"      ;Euro
				If KeyDown(50)  Then eg_key$="µ"      ;µ
			End If
			
		End If
	Else
		;--> Verzögerungszeit bis zum Einsetzen des Tastaur-Repeat
		eg_keyb_timer=MilliSecs()+eg_keyb_timetorepeat
	End If
	
 	Return eg_key$
End Function



Function eg_stringwidth(eg_word$)
;==============================================================================================================
; ersetzt die StringWidth Funktion für das Inputfeld
;==============================================================================================================
	eg_length=0
	For eg_i=1 To Len(eg_word$)
		eg_sign=Asc(Mid$(eg_word$,eg_i,1))
		eg_length = eg_length + (eg_font_width(eg_sign) - eg_font_width(eg_sign-1))
	Next
	Return eg_length
End Function



Function eg_text(eg_x,eg_y,eg_word$)
;==============================================================================================================
; ersetzt die "Text" Funktion für das Inputfeld
;==============================================================================================================
	eg_countx=eg_x

	;--> Berechnungen für markierten Text
	If eg_markstate>-1 Then
		If eg_curs_pos<eg_markstate Then eg_start = eg_curs_pos: eg_ende = eg_markstate Else eg_start = eg_markstate: eg_ende = eg_curs_pos
	End If
	
	eg_buffer = ImageBuffer(eg_font_tile)
	
	For eg_i=1 To Len(eg_word$)
		If eg_markstate>-1 And eg_i>eg_start And eg_i<=eg_ende Then eg_offset = 13 Else eg_offset = 0
		eg_sign=Asc(Mid$(eg_word$,eg_i,1))
		eg_sign_p=(eg_sign-32) * 10
		eg_sign_w=eg_font_width(eg_sign) - eg_font_width(eg_sign-1)
		CopyRect eg_sign_p,eg_offset,eg_sign_w,13,eg_countx,eg_y,eg_buffer
		eg_countx=eg_countx+eg_sign_w
	Next
End Function



Function eg_listbox_mousez(eg_lst.eg_listbox)
;==============================================================================================================
; Erkennung einer Scrollradbewegung für die Listbox
;==============================================================================================================
	eg_mouse_z_temp = MouseZSpeed()
	If eg_lst\visible Then
		If eg_mouse_z_temp <> eg_mouse_z Then
			;--> Slider in Listbox? Dann scrolle Einträge
			If eg_lst\slider<>Null Then
				;--> wenn MouseZ, dann kein Scrollen
				eg_listbox_drag = False
				eg_lst\slider\value = eg_lst\slider\value - eg_mouse_z_temp
				If eg_lst\slider\value < eg_lst\slider\min Then eg_lst\slider\value = eg_lst\slider\min
				If eg_lst\slider\value > eg_lst\slider\max-eg_lst\slider\page Then eg_lst\slider\value = eg_lst\slider\max-eg_lst\slider\page
				eg_mouse_z = MouseZSpeed()
				eg_draw_listbox(eg_lst)
				eg_draw_slider(eg_lst\slider)
			End If
		End If
		Return True
	End If
	Return False
End Function



Function eg_treeview_mousez(eg_tv.eg_treeview)
;==============================================================================================================
; Erkennung einer Scrollradbewegung für den TreeView
;==============================================================================================================
	eg_mouse_z_temp = MouseZSpeed()
	If eg_tv\visible Then
		If eg_mouse_z_temp <> eg_mouse_z Then
			;--> SliderV in TreeView? Dann scrolle Einträge
			If eg_tv\sliderv<>Null Then
				;--> wenn MouseZ, dann kein Scrollen
				eg_treeview_drag = False
				eg_tv\sliderv\value = eg_tv\sliderv\value - (eg_mouse_z_temp * 16)
				If eg_tv\sliderv\value < eg_tv\sliderv\min Then eg_tv\sliderv\value = eg_tv\sliderv\min
				If eg_tv\sliderv\value > eg_tv\sliderv\max-eg_tv\sliderv\page Then eg_tv\sliderv\value = eg_tv\sliderv\max-eg_tv\sliderv\page
				;--> erneuere TreeView, suche dazu einen Node für Parameterübergabe
				For eg_node.eg_treenode = Each eg_treenode
					If eg_node\id = eg_tv\id Then Exit
				Next
				eg_mouse_z = MouseZSpeed()
				eg_draw_treeview(eg_node)
			End If
		End If
		Return True
	End If
	Return False
End Function



Function eg_grab_background()
;==============================================================================================================
; Zeichnet alle sichtbaren Fenster inaktiv und grabbt dann diese als Bildschirmhintergrund
;==============================================================================================================
	;--> alle sichtbaren Fenster inaktiv machen und neu zeichnen
	eg_window_reset()
	eg_draw_all()
	
	;--> schalte Maus und Tooltip aus und erstelle Bildschirm neu
	eg_mstate = eg_mouse: eg_mouse = False
	eg_ttip$ = eg_tooltip$: eg_tooltip$ = ""
	eg_screen_render()
	eg_mouse = eg_mstate
	eg_tooltip$ = eg_ttip$

	;--> Rette Bildschirmhintergrund
	eg_temp = CreateImage(eg_screen_width,eg_screen_height)
	SetBuffer BackBuffer()
	GrabImage eg_temp,0,0
	Return eg_temp
End Function



Function eg_resizeimage(eg_img,eg_nw,eg_nh,eg_f=0)
;==============================================================================================================
; Funktioniert wie die normale ResizeImage Funktion, jedoch ohne den "Rahmen" Bug und wesentlich schneller
;==============================================================================================================

	If eg_img=0 Or eg_nw=0 Or eg_nh=0 Then Return

	eg_obuffer = GraphicsBuffer()

	eg_ow = ImageWidth(eg_img)
	eg_oh = ImageHeight(eg_img)

	eg_nimg = CreateImage(eg_nw,eg_oh)
	eg_dest = CreateImage(eg_nw,eg_nh)
	
	SetBuffer ImageBuffer(eg_nimg)
	For eg_x = 0 To eg_nw
		eg_lr = Floor((eg_ow*eg_x)/eg_nw)
		DrawBlockRect eg_img,eg_x,0,eg_lr,0,1,eg_oh,eg_f
	Next
	
	SetBuffer ImageBuffer(eg_dest)
	For eg_y = 0 To eg_nh
		eg_lr = Floor((eg_oh*eg_y)/eg_nh)
		DrawBlockRect eg_nimg,0,eg_y,0,eg_lr,eg_nw,1
	Next 
	
	FreeImage eg_nimg

	SetBuffer eg_obuffer

	Return eg_dest
End Function



;--> Zeichenbreite für Schriftart Tahoma_13...ASCII 32-255
.eg_fontdata
	Data 4,6,10,18,24,35,43,45,49,53,59,67,70,74,76,80,86,90,96,102,108,114,120,126,132,138,140
	Data 143,150,158,165,170,180,187,193,200,207,213,219,226,233,237,242,248,253,261,268,276,282
	Data 290,297,303,309,316,322,332,338,344,350,354,358,362,370,377,380,386,392,397,403,409,413
	Data 419,425,427,430,436,438,446,452,458,464,470,474,479,483,489,495,503,509,515,520,525,527
	Data 532,540,549,555,564,567,574,579,587,593,599,604,615,621,625,636,645,654,663,672,675,678
	Data 683,688,693,700,711,716,726,731,735,745,754,763,769,778,780,786,792,798,804,806,812,816
	Data 826,831,837,844,848,858,865,870,878,882,886,889,895,901,903,907,911,916,922,932,942,952
	Data 957,964,971,978,985,992,999,1009,1016,1022,1028,1034,1040,1044,1048,1053,1057,1065,1072
	Data 1080,1088,1096,1104,1112,1118,1126,1133,1140,1147,1154,1160,1166,1172,1178,1184,1190,1196
	Data 1202,1208,1218,1223,1229,1235,1241,1247,1249,1252,1255,1258,1264,1270,1276,1282,1288,1294
	Data 1300,1308,1314,1320,1326,1332,1338,1344,1350,1356