Форум: "KOL";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "KOL";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.007 c