HPC.ru lite - Все форумы
Форум: Программирование для КПК
Тема: Проблема с меню под PalmOS
[Ответить]
PDev [26.04.2004 17:42] Проблема с меню под PalmOS:
Коллеги, подскажите, что деласть с кривыми меню с русскими бувками под PalmOS (уплывание размеров): отловить menuOpenEvent и пробежаться по всему MenuBarType и пересчитать размеры в соответствии со шрифтом, или сделать свой механизм меню?
В Cobalt/Garnet так же все плохо?
GuinPin [29.04.2004 13:30] :
На самом деле дело не в кривых меню 
Лучше было бы, если бы ты указал среду разработки.
Например, при использовании компилятора ресурсов PilRc можно указать используемый набор символов и менюшки будут рассчитываться нормально.
PDev [29.04.2004 14:19] :
А тут среда разработки тоже непричем, т.к. нельзя размеры шрифтов указать сразу под все русификаторы (или font-хаки) !
Сейчас работает такой код по "пересчету менюшек":
bool TMenuFixComponent::handleEvent(void* event_)
{
EventPtr event=(EventPtr)event_;
if(event->eType==menuOpenEvent) {
MenuBarType *menu=MenuGetActiveMenu();
FontID saveFont=FntSetFont(boldFont); // menu font
int x=4, // menuTitleXOffset
width,maxWidth,maxCmdCharWidth;
char *text;
for(int i=0;i<menu->numMenus;i++) {
MenuPullDownPtr pullDownMenu=menu->menus+i;
text=pullDownMenu->title;
width=FntCharsWidth(text,StrLen(text))+8; // 8 = 2*menuTitleXOffset
pullDownMenu->titleBounds.topLeft.x=x;
pullDownMenu->titleBounds.extent.x=width;
pullDownMenu->bounds.topLeft.x=x+1;
x+=width;
maxWidth=0; maxCmdCharWidth=0;
for(int j=0;j<pullDownMenu->numItems;j++) {
MenuItemType *menuItem=pullDownMenu->items+j;
text=menuItem->itemStr;
if(*text==MenuSeparatorChar) continue;
width=FntCharsWidth(text,StrLen(text));
if(width>maxWidth) maxWidth=width;
if(menuItem->command) {
width=FntCharWidth(menuItem->command);
if(width>maxCmdCharWidth) maxCmdCharWidth=width;
}
}
if(maxCmdCharWidth) maxCmdCharWidth+=3+3+3+3+ /* spaceInsidePullDownFrame */
FntCharWidth(chrCommandStroke);
pullDownMenu->bounds.extent.x=maxWidth+maxCmdCharWidth;
if(pullDownMenu->bounds.topLeft.x+pullDownMenu->bounds.extent.x>=160)
pullDownMenu->bounds.topLeft.x=159-1-pullDownMenu->bounds.extent.x;
}
FntSetFont(saveFont);
}
return false;
}
[Ответить]