 | Код: // ************** Броя на Редовете в меню SETUP ******************* #Define MaxRows 14 // Броя на Редовете в меню SETUP #Define RowPerPage 4 // Броя на редовете на една страница
........... ..........
//Дефиниране Типа на менюто - Запис TypeDef Struct { int8 Index; Char Name[20]; Char FullName[14]; int16 value; int1 Select; }MenuRecord;
MenuRecord MenuSetup[MaxRows];
.................. ................... ..................
int MenuRowFocus, //Номер на реда който да се фокусира PrevMenuRowFocus, //Номер на реда който е бил фокусиран FirstMenuRow, //Индекса на 1-вия ред от Сетъп Менюто LastMenuRow, //Индекса на последния ред от Сетъп Менюто
int8 MenuPosX=20 ,MenuPosY=1;
// Фокусира маркера в/у позиция от менюто(1-4,1-4, "DataToMark","DataToClear") Void SetMenuRowFocus(int RowFocused,int PrevRowFocused,/*int IndexMenu ,*/char DataToMark[15],char DataToClear[15]/*MenuRecord *MenuTemp*/) { char Message[30]; if(PrevRowFocused!=0) { glcd_rect(MenuPosX+12,MenuPosY +(PrevRowFocused )*13-1,MenuPosX+90,MenuPosY+8+(PrevRowFocused)*13,On,0); sprintf ( Message ,DataToClear); glcd_text57(MenuPosX+14,MenuPosY+(PrevRowFocused)*13,Message,1,1); } //Маркиране на реда от менюто glcd_rect( MenuPosX+12,MenuPosY +(RowFocused)*13-1,MenuPosX+90,MenuPosY+8+(RowFocused)*13,On,1); sprintf ( Message , DataToMark); glcd_text57(MenuPosX+14,MenuPosY+(RowFocused)*13 ,Message,1,0); displayInt16(MenuPosX+92,MenuPosY+(RowFocused)*13,0,MenuSetup[RowFocused-1].value,1); }
// Изписва менюто на екрана по зададени координати Void DisplaySetupMenu(int8 First_Next_Clear) // First_Next_Clear - Определя как се чертае менюто - за 1 път, следващ път , или се трие { char Message[30]; int8 i,j ; int1 FillColor=1; If (First_Next_Clear==1) // Изчертаване за 1-ви път { // Изчертаване на Менюто glcd_fillScreen(off); sprintf ( Message, "- S E T U P -"); glcd_text57(MenuPosX+4,MenuPosY-1,Message,1,1); glcd_line(0,MenuPosY+9,128,MenuPosY+9,1); } If (First_Next_Clear==3 ) { FillColor=0; //За изтриване на менюто } else {FillColor=1;} //За четраене на менюто i=0; For(j =FirstMenuRow-1 ;j< LastMenuRow ;j++) { { sprintf ( Message, "%u", MenuSetup[j].Index); glcd_text57(MenuPosX-5,MenuPosY+(i+1)*13,Message,1,FillColor); sprintf ( Message , "."); glcd_text57(MenuPosX+7,MenuPosY+(i+1)*13,Message,1,FillColor); sprintf ( Message , MenuSetup[j].Name); glcd_text57(MenuPosX+14,MenuPosY+(i+1)*13,Message,1,FillColor); i++; } }
}
// ОПИТ Стартиране на менюто за настройки Void SetupMenu() { char Message[30]; //SetMenuItems() ; glcd_fillScreen(off); sprintf ( Message, "- SETUP MENU -"); glcd_text57(MenuPosX+10,MenuPosY,Message,1,1); glcd_line(0,MenuPosY+9,128,MenuPosY+9,1); PrevMenuRowFocus=1; FirstMenuRow=1; LastMenuRow=RowPerPage; DisplaySetupMenu( 1 ); // (1)-Първо Изчетраване на основното меню MenuRowFocus=1; //(1-4,1-4, "mark","Clear") SetMenuRowFocus(MenuRowFocus,0,MenuSetup[MenuRowFocus-1].Name,MenuSetup[PrevMenuRowFocus-1].Name); While( MenuSetup[MaxRows-1].Select==False) { // При отворено меню промена позицията на маркера /**************** Повишаване номера на реда DOWN ************/ if( DOWNButton==0 ) { MenuRowFocus++; if(MenuRowFocus > MaxRows) //Понижава номера на маркера { DisplaySetupMenu( 3 );// ( 3 ) Изтриване на предишното меню FirstMenuRow=1; LastMenuRow=RowPerPage; MenuRowFocus=1; DisplaySetupMenu( 2 );//( 2 ) Четраене на новото с един ред по на долу SetMenuRowFocus(MenuRowFocus, RowPerPage,MenuSetup[MenuRowFocus-1].Name,MenuSetup[LastMenuRow-1].Name); PrevMenuRowFocus=MenuRowFocus; } else { if( MenuRowFocus > LastMenuRow && LastMenuRow <= MaxRows ) //Ако фокуса премине след последния ред на страницата { DisplaySetupMenu( 3 );// ( 3 ) Изтриване на предишното меню LastMenuRow=MenuRowFocus; FirstMenuRow =(LastMenuRow-RowPerPage+1); DisplaySetupMenu( 2 );//( 2 ) Четраене на новото с един ред по на долу SetMenuRowFocus(RowPerPage,0,MenuSetup[MenuRowFocus-1].Name,MenuSetup[PrevMenuRowFocus-1].Name); PrevMenuRowFocus=MenuRowFocus; } else { SetMenuRowFocus(MenuRowFocus-FirstMenuRow+1 ,MenuRowFocus-FirstMenuRow ,MenuSetup[MenuRowFocus-1].Name,MenuSetup[PrevMenuRowFocus-1].Name); PrevMenuRowFocus = MenuRowFocus; } } } /**************** Понижаване номера на реда UP ************/ if( UPButton==0 ) { MenuRowFocus--; if(MenuRowFocus < 1 ) //Понижава номера на маркера { DisplaySetupMenu( 3 );// ( 3 ) Изтриване на предишното меню LastMenuRow=MaxRows; FirstMenuRow =(LastMenuRow-RowPerPage+1); MenuRowFocus=MaxRows; // PrevMenuRowFocus=1; DisplaySetupMenu( 2 );//( 2 ) Четраене на новото с един ред по на горе SetMenuRowFocus(RowPerPage,PrevMenuRowFocus,MenuSetup[MenuRowFocus-1].Name,MenuSetup[FirstMenuRow-1].Name); PrevMenuRowFocus = MenuRowFocus; } else if( MenuRowFocus < FirstMenuRow && MenuRowFocus >=1 ) //Ако фокуса премине преди първия ред на страницата { DisplaySetupMenu( 3 );// ( 3 ) Изтриване на предишното меню FirstMenuRow =MenuRowFocus; LastMenuRow=FirstMenuRow+RowPerPage-1; DisplaySetupMenu( 2 );//( 2 ) Четраене на новото с един ред по на горе SetMenuRowFocus(1 ,0,MenuSetup[MenuRowFocus-1].Name,MenuSetup[PrevMenuRowFocus-1].Name); PrevMenuRowFocus=MenuRowFocus; } else if( MenuRowFocus >= FirstMenuRow && MenuRowFocus <= LastMenuRow ) //Ако фокуса е м/у 1 и последен ред на страницата { SetMenuRowFocus( (MenuRowFocus-FirstMenuRow+1 ),(PrevMenuRowFocus-FirstMenuRow+1),MenuSetup[MenuRowFocus-1].Name,MenuSetup[PrevMenuRowFocus-1].Name); PrevMenuRowFocus = MenuRowFocus; } } if( MENUButton==0 )// OK Бутон за менюто - -Select { MenuSetup[MenuRowFocus-1].Select=True; //MenuRowSelected=MenuRowFocus; If(MenuSetup[MaxRows-1].Select==True ) { MenuSetup[MaxRows-1].Select=False; //Нулира EXIT-a Break; } else // Ако е избрана позиция от менюто { MenuSetup[MenuRowFocus-1].value=NewValue(Функция за промяна на стойносста ); Delay_ms(150); } } } }
|  |