Панель задач справа

 PUBLIC oPanel  
  oPanel=CREATEOBJECT("form1")  
  oPanel.Show(0)  
    
  DEFINE CLASS form1 AS form  
    
    
  	Top = 0  
  	Left = 0  
  	Height = 638  
  	Width = 200  
  	DoCreate = .T.  
  	Caption = "Form1"  
  	TitleBar = 0  
  	AlwaysOnTop = .T.  
  	Name = "form1"  
    
  	ADD OBJECT check1 AS checkbox WITH 	Top = 12, Left = 9, Height = 36, Width = 180, Alignment = 0, Caption = "Свернуть", Style = 1, TabIndex = 1, BackColor = RGB(255,200,200), Name = "Check1"  
  	ADD OBJECT timer2 AS timer WITH Top = 48, Left = 72, Height = 23, Width = 23, Interval = 1000,	Name = "Timer2"   
  	ADD OBJECT command1 AS commandbutton WITH Top = 72, Left = 12, Height = 72, Width = 172,   Caption = "Открыть форму", Name = "Command1"  
  	ADD OBJECT command2 AS commandbutton WITH Top = 408, Left = 12, Height = 36, Width = 168, Caption = "Выход", TabStop = .F., Name = "Command2"  
    
  	PROCEDURE do_panel_taimer  
  		LPARAMETERS lcType_Panel,oCheck_Panel  
 		*+--------------------------------------------------+  
 		*|	Обоаботчик событий для панельного таймера		|  
 		*|	lcType_Panel - тип панели R или L				|  
 		*|	oCheck_Panel - ссылка на флаг Check в панели	|  
 		*+--------------------------------------------------+  
    
  		LOCAL lnStep_Panel,lnStep_Max  
  		lnStep_Panel=1	&&Отступ для зоны реагирования  
  		lnStep_Max=5	&&Кол-во циклов ожиадания, до того как развернуть панель  
    
  		IF BETWEEN(MCOL(_screen.Name),lnStep_Panel,WCOLS(_screen.Name)-lnStep_Panel)  
    
 			*+----------------------------------+  
 			*|	Если мышка летает внутри окна	|  
 			*+----------------------------------+  
 			*_screen.Caption= STR(MCOL(_screen.Name),7,3)+" из "+STR(WCOLS(_screen.Name),7,3)  
  			This.AddProperty("Wait_Panel",0)	&&Сбросим счетчи ожиадания   
    
  		ELSE  
 			*+---------------------------------+  
 			*|	Счетчик	присутствия на границе |  
 			*+---------------------------------+	   
  			IF TYPE("This.Wait_Panel")#"N"  
  				This.AddProperty("Wait_Panel",0)  
  			ENDIF  
  			This.Wait_Panel=This.Wait_Panel+1  
    
  			&&Если долго ждал  
  			IF THIS.Wait_Panel>lnStep_Max THEN  
    
 				*+----------------------------------------------+  
 				*| Если мышка приблизилась к левому краю		|   
 				*| правая панель спрятана - то ее развернуть	|  
 				*+----------------------------------------------+  
  				IF lcType_Panel="L" AND MCOL(_screen.Name)<=lnStep_Panel  
  					MESSAGEBOX("Окно слево")  
  				ENDIF  
    
    
 				*+----------------------------------------------+  
 				*|	Если мышка зашкалила за правый край, 		|  
 				*| левая панель спрятана - то ее развернуть		|  
 				*+----------------------------------------------+  
  				IF lcType_Panel="R" AND MCOL(_screen.Name)>=WCOLS(_screen.Name)-lnStep_Panel AND !EMPTY(oCheck_Panel.Value)  
  					oCheck_Panel.Value=0  
  					oCheck_Panel.InteractiveChange()  
  				ENDIF  
    
    
  			ENDIF  
    
  		ENDIF  
    
  		_screen.Caption=STR(THIS.Wait_Panel)   
  	ENDPROC  
    
    
  	PROCEDURE do_panel_move  
  		LPARAMETERS lcType_Panel,oCheck_Panel,oTimer_Panel,oThisform  
 		*+--------------------------------------------------+  
 		*|	Обоаботчик событий для панельного таймера		|  
 		*|	lcType_Panel - тип панели R или L				|  
 		*|	oCheck_Panel - ссылка на флаг Check в панели	|  
 		*+--------------------------------------------------+  
    
  		LOCAL lnStep_Panel,lnStep_Max  
  		lnStep_Panel=INT(oThisform.Width/5)	&&Отступ для зоны реагирования  
    
    
  		DO CASE  
  		CASE lcType_Panel="R" AND !EMPTY(oCheck_Panel.Value)  
 			*+--------------------------+  
 			*|	Спрятать правую панель	|  
 			*+--------------------------+  
  			Value_Min=_screen.Width-Thisform.Width  
  			Value_Max=_screen.Width+lnStep_Panel  
  			FOR Value_Now=Value_Min TO Value_Max STEP lnStep_Panel  
  				oThisform.Move(Value_Now)  
  				INKEY(0.1)  
  			ENDFOR  
  			oTimer_Panel.Interval=100    
    
    
  		CASE lcType_Panel="R" AND EMPTY(oCheck_Panel.Value)  
 			*+--------------------------+  
 			*|	Показать правую панель	|  
 			*+--------------------------+  
  			Value_Min=_screen.Width+lnStep_Panel  
  			Value_Max=_screen.Width-Thisform.Width-lnStep_Panel  
  			FOR Value_Now=Value_Min TO Value_Max STEP -lnStep_Panel  
    
  				IF Value_Now<_screen.Width-oThisform.Width  
  				   Value_Now=_screen.Width-oThisform.Width  
  				ENDIF  
    
  				oThisform.Move(Value_Now)  
  				INKEY(0.1)  
    
  				IF Value_Now=_screen.Width-oThisform.Width  
  					EXIT  
  				ENDIF  
    
  			ENDFOR  
  			oTimer_Panel.Interval=0    
    
    
  		CASE lcType_Panel="L" AND !EMPTY(oCheck_Panel.Value)  
 			*+--------------------------+  
 			*|	Спрятать левую панель	|  
 			*+--------------------------+  
    
    
  		CASE lcType_Panel="L" AND EMPTY(oCheck_Panel.Value)  
 			*+--------------------------+  
 			*|	Показать левую панель	|  
 			*+--------------------------+  
    
    
  		ENDCASE  
  	ENDPROC  
    
    
    
  	PROCEDURE check1.Init  
  		Thisform.Top=0  
  		Thisform.Left=_screen.Width-Thisform.Width  
  		Thisform.Height=_screen.Height  
  	ENDPROC  
0

Автор публикации

не в сети 16 лет

shumik73

0
Комментарии: 0Публикации: 1Регистрация: 10-05-2006
Оставить комментарий
Авторизация
*
*
Генерация пароля