Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1222075958
Dennis I. Komarov
2008-09-22 13:32
2008.11.02
AllUsers App..Data?


11-1195121648
Альберт
2007-11-15 13:14
2008.11.02
при установки kol не найден exptintf.dcu


4-1198654568
Cj
2007-12-26 10:36
2008.11.02
Получить путь и имя процесса


11-1193577066
АртемКо
2007-10-28 16:11
2008.11.02
Проблема с array of pstrlist


2-1222116408
ShyricK
2008-09-23 00:46
2008.11.02
Вопрос по функционированию ЭВМ (дешифратор)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский