-
Возникло пару вопросов по WinCe, может кто нибудь сталкивался.
1. В проекте несколько форм, показываю модально. Соответственно в верхней строке вместо 'Х' (кнопка закрытия формы) кнопка 'Ок'. Собственно вопрос, как обработать нажание на 'Ок'? Событие OnClose не возникает, что-то по OnMessage нужно обработать?
2. Опять же несколько форм, если одновременно созданы и видимы несколько форм (например главная и модальная), то все они отображаются в диспетчере задач, что не есть хорошо и красиво, а если закрыть не ту, то и вовсе может превести к неприятным последствиям... Кстати, это касается и Applet'а, он тоже отображается отдельно, если не установить Visible:= False. Но с аплетом еще это проходит, а вот с формами никатит...:). Ну и вопрос, соответственно, как сделать, чтобы каждая форма не выглядела отдельным приложением?
-
form.style:=form.style or ws_popup ?
-
> form.style:=form.style or ws_popup ?
Был такой мызл, но как-то засомневался, а привильно ли это? по идее не должно быть такого, не настолько WinCe далека от Win32. Попробую конечно, если все нормально будет почему нет?:)
-
1. При нажатии на OK в модальной форме ShowModal возвращает IDOK. А если на модальной форме есть Default button, то вызывается его обработчик.
2. Такое наблюдал только на смартфоне. На обычном покете отображается как надо. Какой диспетчер задач используется?
-
> 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.
-
Юрий, еще просьба одна есть. Добавить в mckCtrls.pas, TKOLToolbarButton свойство OnClickMethodName: unit mckCtrls; ... TKOLToolbarButton = class( TComponent ) ... public ... property OnClickMethodName: String read fOnClickMethodName; ... end;
А то сделал компонент, основанный на TKOLToolbar (туллбар в строке меню), но после закрытия\открытия проекта, OnClick для кнопок уже не получается сгенерить, там привязка к fOnClickMethodName, а это поле в private.
-
Без GetMessage цикл обработки сообщений сожрет все процессорное время. В wince нет WaitMessage, поэтому используется GetMessage, которая ожидает прибытия сообщения в очередь.
На этот таск менеджер я гляну, но лучше его заменить :) В качестве таскменеджера можно поюздать бесплатный MagicButton. Я видел штук 4-5 таск менеджеров, включаяя встроенный список программ, и с ними не было никаких проблем.
А если fOnClickMethodName просто в protected перенести?
-
> А если fOnClickMethodName просто в protected перенести?
Можно и так, но извращений чуть больше будет (модули то разные): создать наследника, привести к его типу, но не принципиально.
> На этот таск менеджер я гляну, но лучше его заменить :)
Можно и заменить, меня он привлекает тем, что закрывает программы совсем, а не сворачивает. Кстати там вообще непонятно, как то получается. Если нажать на "Ок", а потом кликнуть по форме, или еще куда, но цикл проходит, и ShowModal завершается. Я когда отлаживался в цикле ShowModal ставил что-то типа fDefaultBtnCtl.Caption:= Int2Str(Str2Int(fDefaultBtnCtl.Caption)+1), и тоже все нормально проходило. Такое ощущение, что сообщение теряется что ли...
-
> Можно и так, но извращений чуть больше будет (модули то > разные): создать наследника, привести к его типу, но не > принципиально.
Ааа... Если класс не наследуется, то изврат будет. Сделаю свойство тогда.
> Можно и заменить, меня он привлекает тем, что закрывает > программы совсем, а не сворачивает.
MagicButton тоже закрывает.
> Если нажать на "Ок", а потом кликнуть по форме, или еще > куда, но цикл проходит, и ShowModal завершается.
Похоже этот таск менеджер при нажатии на ОК шлет не такое сообщение какое шлется стандартной кнопкой ОК и другими таскменеджерами, которые эмулируют стандартное поведение.
-
> Похоже этот таск менеджер при нажатии на ОК шлет не такое > сообщение какое шлется стандартной кнопкой ОК и другими > таскменеджерами, которые эмулируют стандартное поведение.
Да WM_COMMAND он шлет, вот только как-то криво... Но в целом убедил. Можно закрывать этот вопрос. Интерес представляет только для отладки обработчика сообщений:))
-
Добавил свойство TKOLToolbarButton.OnClickMethodName в МСК.
-
-
Юрий, проясните пожалуйста пару моментов, по поводу пакетов в Lazarus.
1. Пакет MirrorKOLPackage компилится независимо от того, какой проект открыт в Lazarus в данный момент: Win32 или WinCE. А мои пакеты компилятся только если открыт проект для Win32. Что и где нужно указать?
2. В проектах WinCE в "требуемых пакетах" указан MirrorKOLPackage и проект нормально компилируется. А вот другие пакеты нужно удалять из "требуемых пакетов", хотя в них и указано "Только для разработки". В чем проблемма?
Поделитесь пожалуйста секретами мастерства.:)
-
Загляни в MirrorKOLPackage.pas и добавь в свои пактеты такие же дефайны.
-
Упс. Смотрел MirrorKOLPackage и все пробовал, но дефайны добавить не допёр! Спасибо.
-
То mdw: А скажите пожалуйста, почему под надписью "KOLnMCK-CE v.2.80-Rev.222" в файлах лежит файл с именем kolce_rev219.7z? Это ошибка в имени и там на самом деле rev222 или всё-таки старый файл остался rev219?
-
-
> Загляни в MirrorKOLPackage.pas и добавь в свои пактеты такие > же дефайны.
Добавил, что-то не помогает.
-
.pas файл пакета может и перегенериться и вытереть все дефайны. Проверь не случилось ли так. Смысл дефайнов в том, чтобы .pas файл пакета был пустым если компиляция под wince.
-
Спасибо, разобрался. Причина, судя по всему, была в кривой установке Lazarus. У меня и MirrorKOLPackage.lpk в исходном виде не устанавливался, приходилось <IncludePath Value="..\kol\"/> вычищать... Сейчас переустановил и все заработало. Правда пытался сперва Lazarus-0.9.25 установить, но что-то совсем глючно работает, опции проекта просто не открываются, пришлось обратно на Lazarus-0.9.23 откатываться:(. Ну да ничего, зато занятие на пол дня - устанавливать\переустанавливать
|