• mdw © (31.10.07 21:20) [0]
    Возникло пару вопросов по WinCe, может кто нибудь сталкивался.

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

    2. Опять же несколько форм, если одновременно созданы и видимы несколько форм (например главная и модальная), то все они отображаются в диспетчере задач, что не есть хорошо и красиво, а если закрыть не ту, то и вовсе может превести к неприятным последствиям... Кстати, это касается и Applet'а, он тоже отображается отдельно, если не установить Visible:= False. Но с аплетом еще это проходит, а вот с формами никатит...:). Ну и вопрос, соответственно, как сделать, чтобы каждая форма не выглядела отдельным приложением?
  • ANTPro © (31.10.07 21:48) [1]
    form.style:=form.style or ws_popup ?
  • mdw © (31.10.07 22:00) [2]

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

    Был такой мызл, но как-то засомневался, а привильно ли это? по идее не должно быть такого, не настолько WinCe далека от Win32. Попробую конечно, если все нормально будет почему нет?:)
  • Yury Sidorov (01.11.07 03:03) [3]
    1. При нажатии на OK в модальной форме ShowModal возвращает IDOK. А если на модальной форме есть Default button, то вызывается его обработчик.

    2. Такое наблюдал только на смартфоне. На обычном покете отображается как надо. Какой диспетчер задач используется?
  • mdw © (01.11.07 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 © (01.11.07 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 (01.11.07 15:11) [6]
    Без GetMessage цикл обработки сообщений сожрет все процессорное время.
    В wince нет WaitMessage, поэтому используется GetMessage, которая ожидает прибытия сообщения в очередь.

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

    А если fOnClickMethodName просто в protected перенести?
  • mdw © (01.11.07 15:47) [7]

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

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


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

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

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

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


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

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


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

    Похоже этот таск менеджер при нажатии на ОК шлет не такое сообщение какое шлется стандартной кнопкой ОК и другими таскменеджерами, которые эмулируют стандартное поведение.
  • mdw © (01.11.07 19:00) [9]

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

    Да WM_COMMAND он шлет, вот только как-то криво...
    Но в целом убедил. Можно закрывать этот вопрос. Интерес представляет только для отладки обработчика сообщений:))
  • Yury Sidorov (02.11.07 02:56) [10]
    Добавил свойство TKOLToolbarButton.OnClickMethodName в МСК.
  • mdw © (02.11.07 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 © (02.11.07 12:54) [12]
    Юрий, проясните пожалуйста пару моментов, по поводу пакетов в Lazarus.

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

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

    Поделитесь пожалуйста секретами мастерства.:)
  • Yury Sidorov (02.11.07 16:49) [13]
    Загляни в MirrorKOLPackage.pas и добавь в свои пактеты такие же дефайны.
  • mdw © (02.11.07 19:37) [14]
    Упс. Смотрел MirrorKOLPackage и все пробовал, но дефайны добавить не допёр! Спасибо.
  • _vadim (09.11.07 08:21) [15]
    То mdw:
    А скажите пожалуйста, почему под надписью "KOLnMCK-CE v.2.80-Rev.222" в файлах лежит файл с именем kolce_rev219.7z?
    Это ошибка в имени и там на самом деле rev222 или всё-таки старый файл остался rev219?
  • mdw © (09.11.07 10:52) [16]
    Забыл видно ссылку поравить, к вечеру сделаю.  Вот ссылка
    http://www.kolnmck.ru/files/kolce/280/kolce_rev222.7z
  • mdw © (11.11.07 14:52) [17]

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

    Добавил, что-то не помогает.
  • Yury Sidorov (12.11.07 10:02) [18]
    .pas файл пакета может и перегенериться и вытереть все дефайны. Проверь не случилось ли так.
    Смысл дефайнов в том, чтобы .pas файл пакета был пустым если компиляция под wince.
  • mdw © (12.11.07 16:27) [19]
    Спасибо, разобрался. Причина, судя по всему, была в кривой установке Lazarus. У меня и MirrorKOLPackage.lpk в исходном виде не устанавливался, приходилось <IncludePath Value="..\kol\"/> вычищать... Сейчас переустановил и все заработало.
    Правда пытался сперва Lazarus-0.9.25 установить, но что-то совсем глючно работает, опции проекта просто не открываются, пришлось обратно на Lazarus-0.9.23 откатываться:(. Ну да ничего, зато занятие на пол дня - устанавливать\переустанавливать
Есть новые Нет новых   [134431   +10][b:0][p:0.001]