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;
}

[Ответить]