Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.02;
Скачать: CL | DM;

Вниз

Lazarus+WinCE   Найти похожие ветки 

 
mdw ©   (2007-10-31 21:20) [0]

Возникло пару вопросов по WinCe, может кто нибудь сталкивался.

1. В проекте несколько форм, показываю модально. Соответственно в верхней строке вместо "Х" (кнопка закрытия формы) кнопка "Ок". Собственно вопрос, как обработать нажание на "Ок"? Событие OnClose не возникает, что-то по OnMessage нужно обработать?

2. Опять же несколько форм, если одновременно созданы и видимы несколько форм (например главная и модальная), то все они отображаются в диспетчере задач, что не есть хорошо и красиво, а если закрыть не ту, то и вовсе может превести к неприятным последствиям... Кстати, это касается и Applet"а, он тоже отображается отдельно, если не установить Visible:= False. Но с аплетом еще это проходит, а вот с формами никатит...:). Ну и вопрос, соответственно, как сделать, чтобы каждая форма не выглядела отдельным приложением?


 
ANTPro ©   (2007-10-31 21:48) [1]

form.style:=form.style or ws_popup ?


 
mdw ©   (2007-10-31 22:00) [2]


> form.style:=form.style or ws_popup ?

Был такой мызл, но как-то засомневался, а привильно ли это? по идее не должно быть такого, не настолько WinCe далека от Win32. Попробую конечно, если все нормально будет почему нет?:)


 
Yury Sidorov   (2007-11-01 03:03) [3]

1. При нажатии на OK в модальной форме ShowModal возвращает IDOK. А если на модальной форме есть Default button, то вызывается его обработчик.

2. Такое наблюдал только на смартфоне. На обычном покете отображается как надо. Какой диспетчер задач используется?


 
mdw ©   (2007-11-01 13:35) [4]


> 2 Yury Sidorov, ну и остальным, кому интересно.


Вроде разобрался. Причиной непоняток был как раз используемый диспетчер задач. Используется tMain (выложил, если будете смотреть: www.kolnmck.ru/img/tMan.exe). Он отображается рядом с кнопкой "X", в виде точки и показывает в выпадающем списке запущенные задачи. Заменяет стандартные кнопки закрытия своими, закрывая задачи, вместо сворачивания, ну или для диалогов - посылает WM_COMMAND.

По поводу второго пункта. По всей видимости, он отображает все же не процессы, а просто видимые окна. Лечится установкой Form.Caption:= "". Замое забавное что за два года использования, первый раз столкнулся, что показывается несколько пунктов для одной задачи, у всех форм заголовок пустой? Будем знать.:) Вопрос снят.

С первым пунктом сложнее. Но опять же, это касается случая использования tMain, без него все работает как и должно. Но всё же, все остальные программы прекрасно работают, значит какая то неправильность в KOLCE все же присутствует.

Покопался в коде, и насколько понял, в ShowModal, в цикле не происходит выход из Applet.WaitAndProcessMessages;
function TControl.ShowModal: Integer;
...
 while not AppletTerminated and (fModalResult = 0) do
 begin
   Applet.WaitAndProcessMessages; Вот здесь
   {$IFDEF USE_OnIdle}
   ProcessIdle( @Self );
   {$ENDIF}
 end;
...
end;

Посмотрел WaitAndProcessMessages, убрал вызов GetMessage(), и вроде, заработало все нормально. Сделал вот так:

procedure TControl.WaitAndProcessMessages;
//var Msg: TMsg;
begin
//  GetMessage(Msg, 0, 0, 0);
//  InternalProcessMessage(@Msg);
 
 while InternalProcessMessage(nil) do ;
end;

Юрий, посмотрите пожалуйста, что там и как. Я что-то не очень догнал необходимости вызова GetMessage.


 
mdw ©   (2007-11-01 14:21) [5]

Юрий, еще просьба одна есть. Добавить в mckCtrls.pas, TKOLToolbarButton свойство OnClickMethodName:
unit mckCtrls;
...
 TKOLToolbarButton = class( TComponent )
...
 public
...
   property OnClickMethodName: String read fOnClickMethodName;
...
end;

А то сделал компонент, основанный на TKOLToolbar (туллбар в строке меню), но после закрытия\открытия проекта, OnClick для кнопок уже не получается сгенерить, там привязка к fOnClickMethodName, а это поле в private.


 
Yury Sidorov   (2007-11-01 15:11) [6]

Без GetMessage цикл обработки сообщений сожрет все процессорное время.
В wince нет WaitMessage, поэтому используется GetMessage, которая ожидает прибытия сообщения в очередь.

На этот таск менеджер я гляну, но лучше его заменить :)
В качестве таскменеджера можно поюздать бесплатный MagicButton.
Я видел штук 4-5 таск менеджеров, включаяя встроенный список программ, и с ними не было никаких проблем.

А если fOnClickMethodName просто в protected перенести?


 
mdw ©   (2007-11-01 15:47) [7]


> А если fOnClickMethodName просто в protected перенести?

Можно и так, но извращений чуть больше будет (модули то разные): создать наследника, привести к его типу, но не принципиально.


> На этот таск менеджер я гляну, но лучше его заменить :)

Можно и заменить, меня он привлекает тем, что закрывает программы совсем, а не сворачивает. Кстати там вообще непонятно, как то получается. Если нажать на "Ок", а потом кликнуть по форме, или еще куда, но цикл проходит, и ShowModal завершается. Я когда отлаживался в цикле ShowModal ставил что-то типа fDefaultBtnCtl.Caption:=  Int2Str(Str2Int(fDefaultBtnCtl.Caption)+1), и тоже все нормально проходило. Такое ощущение, что сообщение теряется что ли...


 
Yury Sidorov   (2007-11-01 18:11) [8]


> Можно и так, но извращений чуть больше будет (модули то
> разные): создать наследника, привести к его типу, но не
> принципиально.

Ааа... Если класс не наследуется, то изврат будет. Сделаю свойство тогда.


> Можно и заменить, меня он привлекает тем, что закрывает
> программы совсем, а не сворачивает.

MagicButton тоже закрывает.


> Если нажать на "Ок", а потом кликнуть по форме, или еще
> куда, но цикл проходит, и ShowModal завершается.

Похоже этот таск менеджер при нажатии на ОК шлет не такое сообщение какое шлется стандартной кнопкой ОК и другими таскменеджерами, которые эмулируют стандартное поведение.


 
mdw ©   (2007-11-01 19:00) [9]


> Похоже этот таск менеджер при нажатии на ОК шлет не такое
> сообщение какое шлется стандартной кнопкой ОК и другими
> таскменеджерами, которые эмулируют стандартное поведение.

Да WM_COMMAND он шлет, вот только как-то криво...
Но в целом убедил. Можно закрывать этот вопрос. Интерес представляет только для отладки обработчика сообщений:))


 
Yury Sidorov   (2007-11-02 02:56) [10]

Добавил свойство TKOLToolbarButton.OnClickMethodName в МСК.


 
mdw ©   (2007-11-02 12:33) [11]

Обновил KOLnMCK-CE v.2.80-Rev.222 (02.11.2007) на http://www.kolnmck.ru/files1.shtml

Добавил на http://www.kolnmck.ru/components/files_controls.shtml
KOLMenuToolbarCE  - Компонент с зеркалом, создает Toolbar в строке меню под WinCE.


 
mdw ©   (2007-11-02 12:54) [12]

Юрий, проясните пожалуйста пару моментов, по поводу пакетов в Lazarus.

1. Пакет MirrorKOLPackage компилится независимо от того, какой проект открыт в Lazarus в данный момент: Win32 или WinCE. А мои пакеты компилятся только если открыт проект для Win32. Что и где нужно указать?

2. В проектах WinCE в "требуемых пакетах" указан MirrorKOLPackage и проект нормально компилируется. А вот другие пакеты нужно удалять из "требуемых пакетов", хотя в них и указано "Только для разработки". В чем проблемма?

Поделитесь пожалуйста секретами мастерства.:)


 
Yury Sidorov   (2007-11-02 16:49) [13]

Загляни в MirrorKOLPackage.pas и добавь в свои пактеты такие же дефайны.


 
mdw ©   (2007-11-02 19:37) [14]

Упс. Смотрел MirrorKOLPackage и все пробовал, но дефайны добавить не допёр! Спасибо.


 
_vadim   (2007-11-09 08:21) [15]

То mdw:
А скажите пожалуйста, почему под надписью "KOLnMCK-CE v.2.80-Rev.222" в файлах лежит файл с именем kolce_rev219.7z?
Это ошибка в имени и там на самом деле rev222 или всё-таки старый файл остался rev219?


 
mdw ©   (2007-11-09 10:52) [16]

Забыл видно ссылку поравить, к вечеру сделаю.  Вот ссылка
http://www.kolnmck.ru/files/kolce/280/kolce_rev222.7z


 
mdw ©   (2007-11-11 14:52) [17]


> Загляни в MirrorKOLPackage.pas и добавь в свои пактеты такие
> же дефайны.

Добавил, что-то не помогает.


 
Yury Sidorov   (2007-11-12 10:02) [18]

.pas файл пакета может и перегенериться и вытереть все дефайны. Проверь не случилось ли так.
Смысл дефайнов в том, чтобы .pas файл пакета был пустым если компиляция под wince.


 
mdw ©   (2007-11-12 16:27) [19]

Спасибо, разобрался. Причина, судя по всему, была в кривой установке Lazarus. У меня и MirrorKOLPackage.lpk в исходном виде не устанавливался, приходилось <IncludePath Value="..\kol\"/> вычищать... Сейчас переустановил и все заработало.
Правда пытался сперва Lazarus-0.9.25 установить, но что-то совсем глючно работает, опции проекта просто не открываются, пришлось обратно на Lazarus-0.9.23 откатываться:(. Ну да ничего, зато занятие на пол дня - устанавливать\переустанавливать



Страницы: 1 вся ветка

Текущий архив: 2008.11.02;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.015 c
15-1221024724
Vlad Oshin
2008-09-10 09:32
2008.11.02
BDS2006, палитра компонент, как упорядочить внутри вкладки по афл


1-1202116582
Ega23
2008-02-04 12:16
2008.11.02
Динамическое создание объектов: правильно ли сделал?


15-1220948600
Anatoly Podgoretsky
2008-09-09 12:23
2008.11.02
Дмитрий Олегович успокаивает


2-1221635322
Amid
2008-09-17 11:08
2008.11.02
Как соединить 2 файла BMP ?


15-1220713385
deadteachers
2008-09-06 19:03
2008.11.02
Хочу принять участие!