forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_displaysize - ширина и высота дисплея в текущий момент (http://forum.boolean.name/showthread.php?t=9695)

Bruteo 03.11.2009 09:29

Lib_displaysize - ширина и высота дисплея в текущий момент
 
Вложений: 3
Библиотека позволяет узнать ширину и высоту дисплея в пикселях в данный момент времени.

Стандартные функции getWidth и getHeight всегда возвращают те размеры, которые были при запуске приложения. Но ширина с высотой могут меняться в процессе работы мидлета.
На некоторых телефонах, в частности, смартфонах nokia: n82, 5800, n97, n95 8gb, e66 и многих других - происходит автоматический поворот экрана при повороте самого телефона. Т.е. ширина "меняется" с высотой. Но при использовании getWidth и getHeight мидлет не знает об этом и продолжает выводить информацию за пределы экрана, а часть экрана наоборот начинает пустовать.
Могут быть и другие случаи, когда размеры изменяются.
Всё это будет учитываться при использовании функций библиотеки.

Библиотека содержит 4 функции:
init - инициализация библиотеки. Нужно вызывать перед использованием других функций. Лучше - сразу после запуска мидлета.
integer lastwidth - возвращает текущую ширину в пикселях.
integer lastheight - возвращает текущую высоту в пикселях.
integer is_resized - проверяет, изменилась ли ширина или высота с момента последнего вызова is_resized(или запуска мидлета). Если какой-либо размер изменился - вернёт 1. Иначе вернёт 0.

Пример использования библиотеки:
Код:

Program testsize;
Uses displaysize;
Begin
        displaysize.init;   
        repeat
    setColor(255,255,255);
    FillRect(0, 0, lastwidth, lastheight);
    setColor(0,0,0);
                DrawText('w '+lastwidth,20,20);
                DrawText('h '+lastheight,20,60);
                DrawRect(15,15,lastwidth-30,lastheight-30);
                if is_resized=1 then
                begin
                        DrawText('Размеры изменились,ждём 2 сек',20,100);
                        Repaint;
                        delay(2000);
                end;               
                delay(100);
    Repaint;
  until false;
End.

В приложении сама библиотека, её исходный код и проект с примером использования.

odd 03.11.2009 14:58

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
Как раз бьюсь над проблемой разрешения экрана в 5800. Спасибо.

Skythrone 11.11.2009 14:51

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
Странно. Потестил либу, используя приведённый автором пример. Либа реагирует на поворот экрана, но размер экрана всё равно выдаёт некорректный, а именно 320x360 или 360x320.

А реально разрешение экрана на 5800 значительно больше.

Bruteo 11.11.2009 16:30

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
Цитата:

Сообщение от Skythrone (Сообщение 124212)
Странно. Потестил либу, используя приведённый автором пример. Либа реагирует на поворот экрана, но размер экрана всё равно выдаёт некорректный, а именно 320x360 или 360x320.

А реально разрешение экрана на 5800 значительно больше.

Для nokia 5800, N97 и других смартфонов на базе S60 5-го издания нужно отключать экранную клавиатуру. Это можно сделать через диспетчер приложений или добавив строку
Код:

Nokia-MIDlet-On-Screen-Keypad: no
В файл manifest.mf или jad-файл получаемые при компиляции мидлета.
Потому что эта экранная клавиатура и отъедает пространство на экране.

Bruteo 11.11.2009 16:54

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
Вложений: 3
Новая версия библиотеки
Не используйте библиотеку из первого сообщения в этой теме

Обновил либу. Немного изменился принцип работы. Теперь функции lastwidth и lastheight возвращают не текущие размеры экрана, а размеры, которые были во время последнего выполнения функции is_resized или запуска мидлета(т.е. выполнения функции init - не забывайте о ней).

Кроме того, is_resized реагирует на изменение размеров с задержкой в 200 миллисекунд. Это сделано из-за того, что "перестроение" экрана при изменении его размеров происходит не мгновенно, а может происходить, так сказать, "рывками". Небольшая задержка избавит от связанных с этим проблем. Функция не тормозит работу программы - она просто говорит, что размеры не изменились, если после изменения прошло меньше 200 миллисекунд.

Обновлённые файлы в приложении к этому сообщению: библиотека, её исходный код и пример.
В скомпилированном jar файле в архиве с примером уже отключена экранная клавиатура на Nokia 5800, N97 и других смартфонов на базе S60 5-го издания.

Phantom 11.11.2009 18:29

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
Так как являюсь обладателем девайса 5800 и как раз подумывал о реализации подобного, но руки пока не доходили, то очень полезно =) Если бы можно было, нажал бы пять раз на кнопку Полезно!

Bruteo 11.11.2009 22:26

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
Вложений: 2
Библиотека может конфликтовать с другими библиотеками, в которых происходит переинициализация дисплея. Например, с lib_game или lib_sensor2.

Проблема решается скрещиванием библиотек.
Если вы не можете сделать это самостоятельно - обратитесь к автору конфликтующей библиотеки или ко мне.

Во вложении прикладываю Lib_sensordisplaysize - результат скрещевания lib_displaysize с некоторыми функциями lib_game(или lib_sensor2). А именно - функции для работы с сенсорным дисплеем:
integer pointer_pressed_x; - возвращает координату касания экрана по x
integer pointer_pressed_y; - возвращает координату касания экрана по y
integer clear_results; - сбрасывает данные о касании экрана

Исходный код прилагаю.

Skythrone 11.11.2009 23:57

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
Как раз сегодня боролся с глюками при инициализации сенсора (lib_sensor2) :) После танцев с бубном удалось победить, но я обязательно потестирую твою новую либу.

Skythrone 12.11.2009 00:21

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
Bruteo, а можно ли ещё добавить pointer_released_x и pointer_released_y ?

odd 12.11.2009 13:15

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
Вот какая тема интересная.
Я тоже скрещивал библиотеки sensor + rc + displaysize + поворот джойстика.

Bruteo 13.11.2009 06:15

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
Вложений: 2
Цитата:

Сообщение от Skythrone (Сообщение 124282)
Bruteo, а можно ли ещё добавить pointer_released_x и pointer_released_y ?

В приложении Lib_displaysize + Lib_sensor2.

odd 15.11.2009 03:04

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
Кстати, для 5800 помимо параметра Nokia-MIDlet-On-Screen-Keypad: no
Можно ещё использовать такие параметры:

Nokia-MIDlet-On-Screen-Keypad: gameactions
Nokia-MIDlet-On-Screen-Keypad: navigationkeys


В зависимости от того, какой тип экранного джойстика мы хотим увидеть.
Также довольно интересные результаты дают параметры:

Nokia-MIDlet-Original-Display-Size: 240,320
Nokia-MIDlet-Target-Display-Size: 360,640

и
Nokia-MIDlet-Original-Display-Size: 240,320
Nokia-MIDlet-Target-Display-Size: 360,480

А ещё стоит попробовать:

Nokia-MIDlet-Category: Game
Nokia-MIDlet-App-Orientation: landscape
(или portrait)

Параметр
Nokia-MIDlet-Canvas-Scaling-Orientation-Switch: false
по-идее должен отключить возможность автоматического поворота экрана.

Bruteo 21.11.2009 06:00

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
Начал использовать либу в fncalc. Можно посмотреть на результат применения библиотеки в реальном приложении:
http://frolov.net/ru/fncalc/

odd 12.04.2010 19:53

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
На телефонах типа LG KP500 и Samsung Star (S5230) для включения полноэкранного режима в манифест нужно добавлять такие строки:

MIDlet-Touch-Support: True
UseNativeTextButtons: false
ReverseSoftkeys: true
UseNativeCommands: false
LGE-MIDlet-TargetLCD-Height: 400
LGE-MIDlet-TargetLCD-Width: 240

Хотя сенсорные Nokia (5800) могут вообще не запускать программу с таким манифестом. Там полноэкранный режим включается как описано выше в этой ветке форума.
Я для Nokia обычно применяю такой манифест:

Nokia-MIDlet-No-Exit: true
Nokia-MIDlet-Category: Game
Nokia-MIDlet-On-Screen-Keypad: no
Nokia-MIDlet-App-Orientation: portrait
Nokia-MIDlet-Canvas-Scaling-Orientation-Switch: false

GRAY_WOLF 12.04.2010 21:34

Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
 
Цитата:

Сообщение от odd (Сообщение 144554)
На телефонах типа LG KP500 и Samsung Star (S5230) для включения полноэкранного режима в манифест нужно добавлять такие строки:

MIDlet-Touch-Support: True
UseNativeTextButtons: false
ReverseSoftkeys: true
UseNativeCommands: false
LGE-MIDlet-TargetLCD-Height: 400
LGE-MIDlet-TargetLCD-Width: 240

Хотя сенсорные Nokia (5800) могут вообще не запускать программу с таким манифестом. Там полноэкранный режим включается как описано выше в этой ветке форума.
Я для Nokia обычно применяю такой манифест:

Nokia-MIDlet-No-Exit: true
Nokia-MIDlet-Category: Game
Nokia-MIDlet-On-Screen-Keypad: no
Nokia-MIDlet-App-Orientation: portrait
Nokia-MIDlet-Canvas-Scaling-Orientation-Switch: false

А мне то же самое можно только для Sony Ericsson Vivaz Принимаю поздравления с удачной покупкой. Писать в личку, дабы не флудить на форуме.


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

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