forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_menu32 - Графическое меню без головной боли (http://forum.boolean.name/showthread.php?t=6230)

Ksanatos 01.09.2010 21:25

Ответ: Lib_menu32 - Графическое меню без головной боли
 
Ясно теперь. Спасибо.

kizup 12.05.2011 16:51

Ответ: Lib_menu32 - Графическое меню без головной боли
 
Вложений: 1
Появились ошибки при использовании SetMenuWindow.
Рисую фоновую картину, поверх неё хочу в центре меню, а вместо моей задумки появляется моя фоновая картинка с белым прямоугольником на месте меню, убираю SetMenuWindow и всё замечательно, но мне нужно по центру!!!!

kizup 18.05.2011 09:27

Ответ: Lib_menu32 - Графическое меню без головной боли
 
Мне кто нибудь ответит?????? :( :(

Gonzo 15.09.2012 14:19

Ответ: Lib_menu32 - Графическое меню без головной боли
 
Вложений: 1
Привет сообществу!
Возникла необходимость сделать вложенное меню.
Вынес вывод меню и выбор пункта в функцию.
Происходит зацикливание при выборе любого пункта:
Код:

program MenuDemo;
uses font32, sensor, menu32;
type
  TMenuItem = record
    ImgPath, Hint, Name: string;
  end;
var
  key, i: integer;
  CurrentMenu: array[0..9] of TMenuItem;
  CurrentMenuItem: string;

function Menu(ItemsCount: Integer): string;
var
  k: Integer;
begin
  menu32.init; // инициализация меню
  LoadCursor(CreateCursor(GetWidth, 24, 4278190250)); // Создаем курсор
  SetMenuWindow(0, 0, GetWidth, GetHeight); // Задаем окно, в котором будет отображаться меню
  MenuFonts(0, 1); // Основной и курсорный шрифты
  for k := 0 to ItemsCount do //Добавляем элементы меню
    AddItem2(LoadImage(CurrentMenu[k].ImgPath), CurrentMenu[k].Hint, CurrentMenu[k].Name);
  SetCursor(0); // Выбираем первый пункт
  sensor.init;
  DrawMenu;
  Repaint;
  repeat
    key := KeyToAction(GetKeyPressed);
    //key:=KeyToAction(GetKeyClicked);
    if key = GA_DOWN then
    begin
      if Selected < ItemsCount then
        CursorDown
      else
        SetCursor(0);
      DrawMenu;
      Repaint;
      Delay(100);
    end; // Вниз
    if key = GA_UP then
    begin
      if Selected > 0 then
        CursorUp
      else
        SetCursor(ItemsCount);
      DrawMenu;
      Repaint;
      Delay(100);
    end; // Вверх
    if (pointer_state = 1) then // Если нажали на сенсорный экран
    begin
      SensorClick(pointer_pressed_x, pointer_pressed_y); // Передаем координаты в меню
      DrawMenu;
      Repaint;
    end;
    Delay(5);
    Scroll;
    Delay(5);
    Scroll;
  until (key = GA_FIRE) or (SensorState = 1);
  Menu := SelectedValue;
  for k := ItemsCount downto 0 do
    RemoveItem(k);
  HideMenu;
  Repaint;
end;

begin
  font32.init(2);
  Font(0);
  LoadFont('Verdana_7'); // Основной шрифт
  Font(1);
  LoadFont('Verdana_7b'); // Такой же шрифт, но утолщенный и белый (для выделенного пункта)
  i := 0; //для тестирования
  repeat
    i := i + 1; //для тестирования
    //Основное меню
    CurrentMenu[0].ImgPath := '/info.png';
    //CurrentMenu[0].Hint:='Информация';
    CurrentMenu[0].Hint := 'Информация' + IntegerToString(i); //чтобы было видно зацикливание
    CurrentMenu[0].Name := 'info';
    CurrentMenu[1].ImgPath := '/profile.png';
    CurrentMenu[1].Hint := 'Личные данные';
    CurrentMenu[1].Name := 'profile';
    CurrentMenu[2].ImgPath := '/connect.png';
    CurrentMenu[2].Hint := 'Подключение';
    CurrentMenu[2].Name := 'onoff';
    CurrentMenu[3].ImgPath := '/exit.png';
    CurrentMenu[3].Hint := 'Выход';
    CurrentMenu[3].Name := 'exit';
    CurrentMenuItem := Menu(3);
    if CurrentMenuItem = 'info' then
    begin
      //
    end
    else if CurrentMenuItem = 'profile' then
    begin
      //
    end
    else if CurrentMenuItem = 'onoff' then
    begin
      //
    end
    else if CurrentMenuItem = 'exit' then
      Halt;
  until False;
end.

Если заменить GetKeyPressed на GetKeyClicked, то при работе с клавишами телефона, от зацикливания можно избавиться. Насколько я могу судить, GetKeyPressed не удаляет данные из буфера ввода (по аналогии с keypressed и readkey в pascal).
Но при работе с сенсором, при нажатии на выделенный пункт меню, так же происходит зацикливание. Т.е. SensorState не сбрасывается.
----
Можно ли исправить эту проблему? Или может я что-то делаю не так?
Проект и используемые либы в аттаче.


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

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