![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Lazarus+WinCE
mdw © (2007-10-31 21:20:00)Возникло пару вопросов по WinCe, может кто нибудь сталкивался.
1. В проекте несколько форм, показываю модально. Соответственно в верхней строке вместо 'Х' (кнопка закрытия формы) кнопка 'Ок'. Собственно вопрос, как обработать нажание на 'Ок'? Событие OnClose не возникает, что-то по OnMessage нужно обработать?
2. Опять же несколько форм, если одновременно созданы и видимы несколько форм (например главная и модальная), то все они отображаются в диспетчере задач, что не есть хорошо и красиво, а если закрыть не ту, то и вовсе может превести к неприятным последствиям... Кстати, это касается и Applet'а, он тоже отображается отдельно, если не установить Visible:= False. Но с аплетом еще это проходит, а вот с формами никатит...:). Ну и вопрос, соответственно, как сделать, чтобы каждая форма не выглядела отдельным приложением?
mdw (2007-11-12 16:27:00) [1]Спасибо, разобрался. Причина, судя по всему, была в кривой установке Lazarus. У меня и MirrorKOLPackage.lpk в исходном виде не устанавливался, приходилось <IncludePath Value="..\kol\"/>вычищать... Сейчас переустановил и все заработало.
Правда пытался сперва Lazarus-0.9.25 установить, но что-то совсем глючно работает, опции проекта просто не открываются, пришлось обратно на Lazarus-0.9.23 откатываться:(. Ну да ничего, зато занятие на пол дня - устанавливать\переустанавливать
Yury Sidorov (2007-11-12 10:02:00) [2].pas файл пакета может и перегенериться и вытереть все дефайны. Проверь не случилось ли так.
Смысл дефайнов в том, чтобы .pas файл пакета был пустым если компиляция под wince.
mdw (2007-11-11 14:52:00) [3]
> Загляни в MirrorKOLPackage.pas и добавь в свои пактеты такие
> же дефайны.
Добавил, что-то не помогает.
mdw (2007-11-09 10:52:00) [4]Забыл видно ссылку поравить, к вечеру сделаю. Вот ссылка
http://www.kolnmck.ru/files/kolce/280/kolce_rev222.7z
_vadim (2007-11-09 08:21:00) [5]То mdw:
А скажите пожалуйста, почему под надписью "KOLnMCK-CE v.2.80-Rev.222" в файлах лежит файл с именем kolce_rev219.7z?
Это ошибка в имени и там на самом деле rev222 или всё-таки старый файл остался rev219?
mdw (2007-11-02 19:37:00) [6]Упс. Смотрел MirrorKOLPackage и все пробовал, но дефайны добавить не допёр! Спасибо.
Yury Sidorov (2007-11-02 16:49:00) [7]Загляни в MirrorKOLPackage.pas и добавь в свои пактеты такие же дефайны.
mdw (2007-11-02 12:54:00) [8]Юрий, проясните пожалуйста пару моментов, по поводу пакетов в Lazarus.
1. Пакет MirrorKOLPackage компилится независимо от того, какой проект открыт в Lazarus в данный момент: Win32 или WinCE. А мои пакеты компилятся только если открыт проект для Win32. Что и где нужно указать?
2. В проектах WinCE в "требуемых пакетах" указан MirrorKOLPackage и проект нормально компилируется. А вот другие пакеты нужно удалять из "требуемых пакетов", хотя в них и указано "Только для разработки". В чем проблемма?
Поделитесь пожалуйста секретами мастерства.:)
mdw (2007-11-02 12:33:00) [9]Обновил 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.
Yury Sidorov (2007-11-02 02:56:00) [10]Добавил свойство TKOLToolbarButton.OnClickMethodName в МСК.
mdw (2007-11-01 19:00:00) [11]
> Похоже этот таск менеджер при нажатии на ОК шлет не такое
> сообщение какое шлется стандартной кнопкой ОК и другими
> таскменеджерами, которые эмулируют стандартное поведение.
Да WM_COMMAND он шлет, вот только как-то криво...
Но в целом убедил. Можно закрывать этот вопрос. Интерес представляет только для отладки обработчика сообщений:))
Yury Sidorov (2007-11-01 18:11:00) [12]
> Можно и так, но извращений чуть больше будет (модули то
> разные): создать наследника, привести к его типу, но не
> принципиально.
Ааа... Если класс не наследуется, то изврат будет. Сделаю свойство тогда.
> Можно и заменить, меня он привлекает тем, что закрывает
> программы совсем, а не сворачивает.
MagicButton тоже закрывает.
> Если нажать на "Ок", а потом кликнуть по форме, или еще
> куда, но цикл проходит, и ShowModal завершается.
Похоже этот таск менеджер при нажатии на ОК шлет не такое сообщение какое шлется стандартной кнопкой ОК и другими таскменеджерами, которые эмулируют стандартное поведение.
mdw (2007-11-01 15:47:00) [13]
> А если fOnClickMethodName просто в protected перенести?
Можно и так, но извращений чуть больше будет (модули то разные): создать наследника, привести к его типу, но не принципиально.
> На этот таск менеджер я гляну, но лучше его заменить :)
Можно и заменить, меня он привлекает тем, что закрывает программы совсем, а не сворачивает. Кстати там вообще непонятно, как то получается. Если нажать на "Ок", а потом кликнуть по форме, или еще куда, но цикл проходит, и ShowModal завершается. Я когда отлаживался в цикле ShowModal ставил что-то типа fDefaultBtnCtl.Caption:= Int2Str(Str2Int(fDefaultBtnCtl.Caption)+1), и тоже все нормально проходило. Такое ощущение, что сообщение теряется что ли...
Yury Sidorov (2007-11-01 15:11:00) [14]Без GetMessage цикл обработки сообщений сожрет все процессорное время.
В wince нет WaitMessage, поэтому используется GetMessage, которая ожидает прибытия сообщения в очередь.
На этот таск менеджер я гляну, но лучше его заменить :)
В качестве таскменеджера можно поюздать бесплатный MagicButton.
Я видел штук 4-5 таск менеджеров, включаяя встроенный список программ, и с ними не было никаких проблем.
А если fOnClickMethodName просто в protected перенести?
mdw (2007-11-01 14:21:00) [15]Юрий, еще просьба одна есть. Добавить в mckCtrls.pas, TKOLToolbarButton свойство OnClickMethodName:
unit mckCtrls;
...
TKOLToolbarButton = class( TComponent )
...
public
...
property OnClickMethodName: String read fOnClickMethodName;
...
end;
А то сделал компонент, основанный на TKOLToolbar (туллбар в строке меню), но после закрытия\открытия проекта, OnClick для кнопок уже не получается сгенерить, там привязка к fOnClickMethodName, а это поле в private.
mdw (2007-11-01 13:35:00) [16]
> 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.
Yury Sidorov (2007-11-01 03:03:00) [17]1. При нажатии на OK в модальной форме ShowModal возвращает IDOK. А если на модальной форме есть Default button, то вызывается его обработчик.
2. Такое наблюдал только на смартфоне. На обычном покете отображается как надо. Какой диспетчер задач используется?
mdw (2007-10-31 22:00:00) [18]
> form.style:=form.style or ws_popup ?
Был такой мызл, но как-то засомневался, а привильно ли это? по идее не должно быть такого, не настолько WinCe далека от Win32. Попробую конечно, если все нормально будет почему нет?:)
ANTPro (2007-10-31 21:48:00) [19]form.style:=form.style or ws_popup ?