Полноэкранное приложение для WinCe

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Полноэкранное приложение для WinCe

Сообщение forfrends » 13.11.2015 23:55:56

Добрый день!
Я начинающий, и язык знаю плохо. Но учу, читаю различные книги, курсы и т.д. По ходу обучения решил поэкспериментировать с оконными свойствами создаваемой программы (создаю для КПК на WinCe 2003).
Столкнулся со сложностью: Пытаюсь создать полноэкранное приложение, но не получается. Точнее получается частично - остается видимой нижняя строка основного меню (не знаю как она называется, на ней еще обычно "висит" значек включения экранной клавиатуры). Прикрепляю фото. На нем видно полосу внизу. Как ее убрать? Мой код:

Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, Calendar;
type
  { TForm1 }
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
   close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  BorderStyle := bsNone;
  FormStyle := fsStayOnTop;
  Left := 0;
  Top := 0;
  Height := Screen.Height;
  Width := Screen.Width;
end;

end.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
forfrends
незнакомец
 
Сообщения: 8
Зарегистрирован: 13.11.2015 23:40:20

Re: Полноэкранное приложение для WinCe

Сообщение vitaly_l » 14.11.2015 00:09:12

попробуйте в FormCreate сказать: WindowState := wsFullScreen;
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Полноэкранное приложение для WinCe

Сообщение forfrends » 14.11.2015 00:13:41

Я пробовал это ставить в инспекторе объектов, сейчас добавил в код - результат тот же, нижняя полоса остается видимой.
Интересно то, что если скомпилировапь под "обычный" виндовс, то на компьютере программа запускается в полноекранном режиме, а если скомпилировать под WinCE и ARM, то полноэкранность не достигаеттся :(
Может какой-то компонент нужно дополнительно установить?
Установлено: lazarus-1.4.4-fpc-2.6.4-win32.exe и lazarus-1.4.4-fpc-2.6.4-cross-arm-wince-win32.exe
Заметил такое: при запуске программы на екране на мгновение появляется Виртуальная клавиатура и сразу исчезает. Может это она как-то портит всю картину и из-за нее остается внизу полоса?

Добавлено спустя 14 часов 53 минуты 15 секунд:
Попробовал код приведенный здесь: http://wiki.lazarus.freepascal.org/WinCE_Programming_Tips/ru#.D0.A1.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BF.D0.BE.D0.BB.D0.BD.D0.BE.D1.8D.D0.BA.D1.80.D0.B0.D0.BD.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BF.D1.80.D0.B8.D0.BB.D0.BE.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F
"Создание полноэкранного приложения":
Код: Выделить всё
Добавьте в раздел uses модуль windows и добавьте следующий код в раздел interface вашей программы:
const
  //ShFullScreen
  SHFS_SHOWTASKBAR   = $01;
  SHFS_HIDETASKBAR   = $02;
  SHFS_SHOWSIPBUTTON = $04;
  SHFS_HIDESIPBUTTON = $08;
  SHFS_SHOWSTARTICON = $10;
  SHFS_HIDESTARTICON = $20; 

  function SHFullScreen(hwndRequester: hWnd; dwState: DWord): WINBOOL; stdcall; external 'aygshell.dll' name 'SHFullScreen';
Затем вставьте в события OnCreate и OnShow ваших форм (лучше OnShow) следующее:
procedure TForm1.FormCreate(Sender: TObject);
var
  Rect:TRect;
  hTaskBar:THandle;
  menuh:Integer;
begin
  hTaskBar := FindWindow('HHTaskBar','');
  GetWindowRect(hTaskBar,rect);
  menuh:=Rect.Bottom-Rect.Top;
  GetWindowRect(Form1.Handle,Rect);
  SHFullScreen(Form1.Handle,SHFS_HIDETASKBAR or SHFS_HIDESTARTICON or SHFS_HIDESIPBUTTON);
  movewindow(Form1.Handle,Rect.Left,Rect.Top-menuh,Rect.Right,Rect.Bottom+menuh,True);
end;


Но компилятор ругается на строку function SHFullScreen(hwndRequester: hWnd; dwState: DWord): WINBOOL; stdcall; external 'aygshell.dll' name 'SHFullScreen';
Пишет:
Компиляция проекта, ОС: wince, процессор: arm, цель: project1.exe: Код завершения 1, ошибок: 2
unit1.pas(35,40) Error: Identifier not found "hWnd"
unit1.pas(35,63) Error: Identifier not found "WINBOOL"


Добавлено спустя 45 минут 35 секунд:
Нашел почему компилятор "ругалсся": я не добавил в раздел "uses" модуль "windows". Добавил, компилируется, эффект тот же - серая полоса снизу :(
forfrends
незнакомец
 
Сообщения: 8
Зарегистрирован: 13.11.2015 23:40:20

Re: Полноэкранное приложение для WinCe

Сообщение WAYFARER » 14.11.2015 16:23:22

forfrends писал(а):Заметил такое: при запуске программы на екране на мгновение появляется Виртуальная клавиатура и сразу исчезает. Может это она как-то портит всю картину и из-за нее остается внизу полоса?

Так проверьте. Разверните на полный экран после запуска.
Код: Выделить всё
sleep(3000);
WindowState := wsFullScreen;
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: Полноэкранное приложение для WinCe

Сообщение Лекс Айрин » 14.11.2015 16:36:13

forfrends, а если использовать wsMaximize?

А какой стиль окна?
Может быть, попробовать не fsStayOnTop, а fsNone?

Возможно, это полоса как бы является заголовком.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Полноэкранное приложение для WinCe

Сообщение forfrends » 14.11.2015 16:49:11

Лекс Айрин писал(а):а если использовать wsMaximize? А какой стиль окна? Возможно, это полоса как бы является заголовком.

Заголовок? Хм.. возможно, некоторые программы на этой полосе размещают свое меню: "File", "Open" и т.д.
Использовал много разных стилей, пробовал все подряд. Самое лучшее что получилось - написал в первом посте. А к чему относится "fsNone"? В Инспекторе объектов Form1 в списке стилей для FormStyle такого нет. К чему его отнести?

WAYFARER писал(а):Разверните на полный экран после запуска.

Попробовал ваш пример - виртуальная клавиатура на мгновение включается и исчезает. Отключил ее вообще:
Код: Выделить всё
SipShowIM(SIPF_OFF);

Пример кода, который привел в предыдущем посту вообще работает как-то странно. Прилагаю фото.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
forfrends
незнакомец
 
Сообщения: 8
Зарегистрирован: 13.11.2015 23:40:20

Re: Полноэкранное приложение для WinCe

Сообщение vitaly_l » 14.11.2015 16:56:33

forfrends писал(а):Прилагаю фото.

судя по фото это часть формы.. вы уверены что на форме нет ничего лишнего. типа статус бара?
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Полноэкранное приложение для WinCe

Сообщение forfrends » 14.11.2015 16:58:02

Лекс Айрин писал(а):если использовать wsMaximize?

Пробовал, без fsStayOnTop поверх программы накладывается верхнее меню с Пуском, названием программы, часами.
wsMaximize - ни на что не влияет :(
forfrends
незнакомец
 
Сообщения: 8
Зарегистрирован: 13.11.2015 23:40:20

Re: Полноэкранное приложение для WinCe

Сообщение Лекс Айрин » 14.11.2015 17:00:22

forfrends писал(а):В Инспекторе объектов Form1 в списке стилей для FormStyle такого нет. К чему его отнести?


Прошу извинить... bsNone.... это BorderStyle.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Полноэкранное приложение для WinCe

Сообщение forfrends » 14.11.2015 17:14:02

vitaly_l писал(а):вы уверены что на форме нет ничего лишнего. типа статус бара?

Разве что это скрыто и не видимо при разработке.
Прилагаю полностью мой проект.

Добавлено спустя 7 минут 39 секунд:
Проект (без иконки - для уменьшения веса)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
forfrends
незнакомец
 
Сообщения: 8
Зарегистрирован: 13.11.2015 23:40:20

Re: Полноэкранное приложение для WinCe

Сообщение WAYFARER » 14.11.2015 17:28:43

попробуйте добавить
Код: Выделить всё
Form1.Width:=Screen.Width;
  Form1.Height:=Screen.Height; \0
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: Полноэкранное приложение для WinCe

Сообщение forfrends » 14.11.2015 17:30:48

На всякий случай выкладываю фото работающего приложения "Explorer Pro". На фото видно что в нижней полосе располагается меню, кнопка вызова виртуальной клавиатуры и "стрелочка" с выпадающим меню настрое этой самой клавиатуры.

Добавлено спустя 3 минуты 38 секунд:
WAYFARER, не помогло :(

Добавлено спустя 19 минут 15 секунд:
Интересно, если поставить KOL вместо LCL, это на что-то повлияет?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
forfrends
незнакомец
 
Сообщения: 8
Зарегистрирован: 13.11.2015 23:40:20

Re: Полноэкранное приложение для WinCe

Сообщение WAYFARER » 14.11.2015 21:20:54

Код: Выделить всё
FormStyle := fsStayOnTop;

попробовать заменить на
Код: Выделить всё
FormStyle := fsSystemStayOnTop;

Хотя должно быть достаточно
Код: Выделить всё
WindowState := wsFullScreen;


Добавлено спустя 7 минут 40 секунд:
Кстати, вполне может быть девайс не дает развернуть на весь экран.
Еще как вариант воспользуйтесь WinAPI.
Или совсем трэшевый вариант - гасите explorer при запуске программы, а при выходе запускайте снова.
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: Полноэкранное приложение для WinCe

Сообщение forfrends » 14.11.2015 23:19:21

WAYFARER, похоже это сама система не дает развернутся. Но в то же время у меня есть несколько приложений которые разворачиваются на весь экран но при этом нижняя полоса пропадает не сразу, а постепенно, частями. Последней исчезает кнопка включения/отключения виртуальной клавиатуры. Скорее всего в тех приложениях используются какие-то функции, которые по умолчанию не присутствуют Lazarus.
Предложенные примеры пробовал еще до того как написать на форуме - все одно и то же :(
C API я совсем не знаком - только начинаю изучать программирование.
А как можно завершить explorer и потом запустить его вновь? Можете пример кода показать?
forfrends
незнакомец
 
Сообщения: 8
Зарегистрирован: 13.11.2015 23:40:20

Re: Полноэкранное приложение для WinCe

Сообщение WAYFARER » 14.11.2015 23:38:39

forfrends писал(а):C API я совсем не знаком - только начинаю изучать программирование.

Тогда прямая дорога на msdn. И гуглим SHFullScreen.
forfrends писал(а):А как можно завершить explorer и потом запустить его вновь? Можете пример кода показать?

Это самое кривое решение которое можно придумать. Лучше так не делать.
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 229

Рейтинг@Mail.ru