|
03.11.2009, 09:29
|
#1
|
ПроЭктировщик
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений (для 43 пользователей)
|
Lib_displaysize - ширина и высота дисплея в текущий момент
Библиотека позволяет узнать ширину и высоту дисплея в пикселях в данный момент времени.
Стандартные функции 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.
В приложении сама библиотека, её исходный код и проект с примером использования.
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо Bruteo за это полезное сообщение:
|
|
03.11.2009, 14:58
|
#2
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
Как раз бьюсь над проблемой разрешения экрана в 5800. Спасибо.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.11.2009, 14:51
|
#3
|
ПроЭктировщик
Регистрация: 02.07.2008
Сообщений: 105
Написано 7 полезных сообщений (для 14 пользователей)
|
Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
Странно. Потестил либу, используя приведённый автором пример. Либа реагирует на поворот экрана, но размер экрана всё равно выдаёт некорректный, а именно 320x360 или 360x320.
А реально разрешение экрана на 5800 значительно больше.
|
(Offline)
|
|
11.11.2009, 16:30
|
#4
|
ПроЭктировщик
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений (для 43 пользователей)
|
Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
Сообщение от Skythrone
Странно. Потестил либу, используя приведённый автором пример. Либа реагирует на поворот экрана, но размер экрана всё равно выдаёт некорректный, а именно 320x360 или 360x320.
А реально разрешение экрана на 5800 значительно больше.
|
Для nokia 5800, N97 и других смартфонов на базе S60 5-го издания нужно отключать экранную клавиатуру. Это можно сделать через диспетчер приложений или добавив строку
Nokia-MIDlet-On-Screen-Keypad: no
В файл manifest.mf или jad-файл получаемые при компиляции мидлета.
Потому что эта экранная клавиатура и отъедает пространство на экране.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо Bruteo за это полезное сообщение:
|
|
11.11.2009, 16:54
|
#5
|
ПроЭктировщик
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений (для 43 пользователей)
|
Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
Новая версия библиотеки
Не используйте библиотеку из первого сообщения в этой теме
Обновил либу. Немного изменился принцип работы. Теперь функции lastwidth и lastheight возвращают не текущие размеры экрана, а размеры, которые были во время последнего выполнения функции is_resized или запуска мидлета(т.е. выполнения функции init - не забывайте о ней).
Кроме того, is_resized реагирует на изменение размеров с задержкой в 200 миллисекунд. Это сделано из-за того, что "перестроение" экрана при изменении его размеров происходит не мгновенно, а может происходить, так сказать, "рывками". Небольшая задержка избавит от связанных с этим проблем. Функция не тормозит работу программы - она просто говорит, что размеры не изменились, если после изменения прошло меньше 200 миллисекунд.
Обновлённые файлы в приложении к этому сообщению: библиотека, её исходный код и пример.
В скомпилированном jar файле в архиве с примером уже отключена экранная клавиатура на Nokia 5800, N97 и других смартфонов на базе S60 5-го издания.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Bruteo за это полезное сообщение:
|
|
11.11.2009, 18:29
|
#6
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
Так как являюсь обладателем девайса 5800 и как раз подумывал о реализации подобного, но руки пока не доходили, то очень полезно =) Если бы можно было, нажал бы пять раз на кнопку Полезно!
|
(Offline)
|
|
11.11.2009, 22:26
|
#7
|
ПроЭктировщик
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений (для 43 пользователей)
|
Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
Библиотека может конфликтовать с другими библиотеками, в которых происходит переинициализация дисплея. Например, с 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; - сбрасывает данные о касании экрана
Исходный код прилагаю.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.11.2009, 23:57
|
#8
|
ПроЭктировщик
Регистрация: 02.07.2008
Сообщений: 105
Написано 7 полезных сообщений (для 14 пользователей)
|
Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
Как раз сегодня боролся с глюками при инициализации сенсора (lib_sensor2) После танцев с бубном удалось победить, но я обязательно потестирую твою новую либу.
|
(Offline)
|
|
12.11.2009, 00:21
|
#9
|
ПроЭктировщик
Регистрация: 02.07.2008
Сообщений: 105
Написано 7 полезных сообщений (для 14 пользователей)
|
Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
Bruteo, а можно ли ещё добавить pointer_released_x и pointer_released_y ?
|
(Offline)
|
|
12.11.2009, 13:15
|
#10
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
Вот какая тема интересная.
Я тоже скрещивал библиотеки sensor + rc + displaysize + поворот джойстика.
|
(Offline)
|
|
13.11.2009, 06:15
|
#11
|
ПроЭктировщик
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений (для 43 пользователей)
|
Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
Сообщение от Skythrone
Bruteo, а можно ли ещё добавить pointer_released_x и pointer_released_y ?
|
В приложении Lib_displaysize + Lib_sensor2.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Bruteo за это полезное сообщение:
|
|
15.11.2009, 03:04
|
#12
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: 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
по-идее должен отключить возможность автоматического поворота экрана.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
|
|
21.11.2009, 06:00
|
#13
|
ПроЭктировщик
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений (для 43 пользователей)
|
Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
Начал использовать либу в fncalc. Можно посмотреть на результат применения библиотеки в реальном приложении:
http://frolov.net/ru/fncalc/
|
(Offline)
|
|
12.04.2010, 19:53
|
#14
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: 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
|
(Offline)
|
|
12.04.2010, 21:34
|
#15
|
Разработчик
Регистрация: 16.08.2008
Адрес: Нижегородская провинция
Сообщений: 389
Написано 48 полезных сообщений (для 93 пользователей)
|
Ответ: Lib_displaysize - ширина и высота дисплея в текущий момент
Сообщение от odd
На телефонах типа 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 Принимаю поздравления с удачной покупкой. Писать в личку, дабы не флудить на форуме.
__________________
- Это мы накодили WINDOWS,
- Это мы надкусили APPLE,
- Нам играют живые The Beatles
- И нестареющий Вова Высоцкий...
Последний раз редактировалось GRAY_WOLF, 12.04.2010 в 22:49.
Причина: Писать в личку
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:24.
|