forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Меню... (http://forum.boolean.name/showthread.php?t=6100)

KeipL 11.07.2008 18:24

Меню...
 
Доброго время суток, друзья.
Я являюсь хорошим кодером паскаля, но в МП новичек.
Я Использовал пример граф меню из исходников выложенных гдето на этом форуме. Естествено изменил(вроде бы улучшил))) ) и начал затачивать под свой проэкт.
НО в результате проверки рабочими оказались только 4 пункта меню !!
Я облазил этот несчасный кусочек кода, но в упор не вижу ограничения...
ткните носом плиз.
код:
Код:

Program Menu3;
Var        mc, wi, hh, hi, key, i,azs: integer;
                arrow: image;
                m: array [0..10] of string;
                img: array [0..10] of image;

Procedure MenuColor(n: integer);
begin
        if n=mc        then begin SetFont(FONT_FACE_SYSTEM, FONT_STYLE_BOLD, FONT_SIZE_MEDIUM); SetColor(255,255,255); end
                                else begin SetFont(FONT_FACE_SYSTEM, FONT_STYLE_PLAIN, FONT_SIZE_MEDIUM); SetColor(255,255,255); end;
end;

Procedure ShowMenu;
var        pt: integer;
begin
 azs:=20;
 wi:=GetWidth; hi:=GetHeight;
 m[0]:='Старт'; m[1]:='Поиск'; m[2]:='Помощь'; m[3]:='О программе'; m[4]:='Рекорды';  m[5]:='Выход';
 img[0]:=LoadImage('/search.png'); img[1]:=LoadImage('/search.png'); img[2]:=LoadImage('/help.png'); img[3]:=LoadImage('/about.png'); img[4]:=LoadImage('/search.png');  img[5]:=LoadImage('/quit.png');
 mc:=0;
 arrow:=LoadImage('/arrow.png');
        repeat
                pt:=hi/2-60;
                SetFont(FONT_FACE_SYSTEM, FONT_STYLE_PLAIN, FONT_SIZE_MEDIUM);
                SetColor(50,51,61); FillRect(0,0,wi,hi);
                SetColor(64,64,64); FillRect(0,mc*azs+pt,wi,azs);
                SetColor(30,64,129); hh:=GetStringHeight('W')/2;
               
                for i:=0 to 5 do begin        MenuColor(i); DrawText(m[i],32,15+azs*i-hh+pt); DrawImage(img[i],3,3+azs*i+pt);end;
                DrawImage(arrow, wi-20, mc*azs+pt+15);
                Repaint; Delay(20);
                key:=GetKeyClicked;
                if (key=50) or (key=-59) or (key=-1) then mc:=(mc+3) mod 4;
                if (key=56) or (key=-60) or (key=-2) or (key=-6) then mc:=(mc+1) mod 4;
                if (key=53) or (key=-26) or (key=-5) or (key=20) then
                                                                                                                                                                        begin
                                                                                                                                                                                //if mc=0 then Search;
                                                                                                                                                                                //if mc=1 then Help;
                                                                                                                                                                                //if mc=2 then About;
                                                                                                                                                                                if mc=3 then break;
                                                                                                                                                                        end;
        until false;
end;

Begin
       
        ShowMenu;
End.


ViNT 11.07.2008 19:14

Ответ: Меню...
 
Похоже, ограничение зарылось здесь:
Код:

key:=GetKeyClicked;
                if (key=50) or (key=-59) or (key=-1) then mc:=(mc+3) mod 4;//<<-------------
                if (key=56) or (key=-60) or (key=-2) or (key=-6) then mc:=(mc+1) mod 4;//<<-------------
                if (key=53) or (key=-26) or (key=-5) or (key=20) then

Вместо четверки должно стоять количество пунктов меню.

odd 12.07.2008 03:40

Ответ: Меню...
 
...А вместо тройки в операторе mc:=(mc+3) mod 4; должно стоять количество пунктов на 1 меньше. ;-)

KeipL 12.07.2008 09:13

Ответ: Меню...
 
чесно говоря я принимал эту 4ку за составную часть навигиции((( оплошал

спс

ViNT 12.07.2008 13:20

Ответ: Меню...
 
Цитата:

Сообщение от odd (Сообщение 82109)
...А вместо тройки в операторе mc:=(mc+3) mod 4; должно стоять количество пунктов на 1 меньше. ;-)

А у меня и без этого работает как надо.

odd 13.07.2008 03:25

Ответ: Меню...
 
Ладно. Забейте. Скоро приступаю за создание библиотеки по отображению меню. Ещё, может, неделька и всё будет готово.

ViNT 13.07.2008 13:38

Ответ: Меню...
 
А я как раз начал делать библиотеку для создания кнопок, чекбоксов и прочих подобных контролов.

odd 14.07.2008 08:04

Ответ: Меню...
 
Цитата:

Сообщение от ViNT (Сообщение 82202)
А я как раз начал делать библиотеку для создания кнопок, чекбоксов и прочих подобных контролов.

Это хорошо, если что, я включусь и помогу и возможно в скором времени появится библиотека типа Lib_form32 или Lib_gui32 с поддержкой графических шрифтов, прозрачности и проч., я же пока работаю над библиотекой меню (меню-список, меню-список с иконками...).

KeipL 14.07.2008 10:35

Ответ: Меню...
 
удачно я темку создал )))

Romanzes 14.07.2008 15:09

Ответ: Меню...
 
Так, глядишь, и Виста получится. Нужно еще Lib_directx10 сделать :)

KeipL 15.07.2008 14:27

Ответ: Меню...
 
угумс, я уже даже перемещениние "курсора" по горизонтал и сделал...

Phantom 26.07.2008 22:02

Ответ: Меню...
 
А я прикольные окна почти сделал =)


Часовой пояс GMT +4, время: 05:31.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot