HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ИНФО > Статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 02.09.2010, 17:29
Pr0mo
Новичок
Регистрация: 26.11.2009
Сообщений: 20
С нами: 8662587

Репутация: 60
По умолчанию

1. Предисловие

Как можно заметить из количества моих постов - я молчалив, а это моя первая статья. Очевидно многим она ничего нового не расскажет, однако нельзя забывать, что по форуму "гуляют" новички. Итак, если у тебя есть КПК и ты устал качать и искать нужный тебе софт под своего зверька, пора задуматься: А не попробовать ли написать его самому?!

2. Приступаем



Скажу сразу - на моем КПК установлена Windows Mobile 6 (WM6) и в качестве тестового плацдарма выступает именно она. Однако безусловно подойдет и более раняя версия WM5. Не будем рассматривать поздние ОС (Windows CE X.XX, Pocket PC 200x) - они устарели и в новых КПК их конечно же не стоит.

Конечно программирование под КПК, как и под ПК предполагает знание Вами хотя бы одного из языков программирования: C++, C#, VB.NET. Я предпочитаю C#.NET. Для меня он более удобен и, что немаловажно, прост. Поэтому и новичкам я советую поиграться с ним для начала, а уж если и надумаете далее писать что-то серьезное (к примеру системные вещи) - перейдете на C++. Но не пугайтесь, если программирование для Вас еще темный лес, сейчас Вы увидете на сколько оказывается это просто и для КПК.

Для старта у нас на ПК должны быть установлены:
* В статье используется русскоязычная Visual Studio. Вы можете использовать и англоязычную, но прийдется искать в меню аналоги перевода с английского на русский.


Примечательно то, что в Visual Studio уже встроен эмулятор устройства КПК. Поэтому работать можно что называется "неотходя от кассы", а протестированный вариант программы уже потом загрузить на КПК и довольствоваться проделанной работой. Тем не менее у эмулятора есть ряд ограничений:
  • Протокол связи с внешними устройствами только TCP/IP
  • Поддерживает только один процессор x86
  • Не поддерживает контактный экран (да и не особо нужно)
  • Нет записи звука
  • Поддерживает только английскую раскладку (На мой взгляд самое весомое ограничение)


3. Простой пример

От слов к делу. Запускаем Visual Studio. Если это Ваш первый запуск, то выбираем запуск Visual Studio c обычными параметрами. Создаем новый проект: Файл -> Создать -> Проект... . В левом углу раскрываем тип проекта Visual C# -> Смарт-устройство. В правом углу выбираем шаблон: Проект интеллектуавльных устройств. Снизу можно задать имя проекта и указать в какой папке он будет сохранен и нажимаем Ок. (см картинку).


Далее видим диалоговое окно добавления нового проекта. В качестве конечной платформы выбираем Windows Mobile 5.0 Pocket PC SDK, а версию фреймворка поставим .Net Compact Framework 2.0. Из шаблонов выбирем: Приложение для устройства. Жмем Ок.


И перед нами окно разработки приложения. Слева редактируем форму, справа список подключенных модулей. Почти вся работа может осуществлятся редактированием формы: Добавил компонент и обработал его событие. Вот и сейчас давайте просто добавим кнопку (Button) из выдвигающейся панели инструменов, кидаем на форму, дважды кликаем, чтобы обработать ее нажатие и попасть в область редактирования кода. Впишем всеми любимый и простой "Hello world!"

Код:
private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello world! This is antichat!");
        }
После этого в меню выбираем Построение -> Построить решение (или же Ctrl+Shift+B). Таким образом Вы откомпилируете написанный программный код и все модули соберутся воедино. Если все сделано правильно (а разве можно в таком простом примере ошибиться?) в выводе (в нижней части Visual Studio) будет написано что-то вроде:

Компиляция завершена -- ошибок: 0, предупреждений: 0

SmartDeviceProject1 -> C:\Users\Admin\Documents\Visual Studio2005\Project\SmartDeviceProject1\SmartDevice Project1\bin\Debug\SmartDeviceProject1.exe

========== Построение: успешно и без изменений: 1, с ошибками: 0, пропущено: 0 ==========​

В принципе уже готовый SmartDeviceProject1.exe файл можно искать в папке сохранения. Но давайте сэмитируем запуск не на ПК, а на КПК.

Для этого в меню: Отладка -> Начать отладку. И в новом диалоговом окне выбираем эмулятор: USA WM 5.0 Pocket PC R2 Emulator. Нажимаем кнопку Развернуть.


Некоторое время эмулятор будет подготавливать все для запуска программы, после чего появится окно программы (форма). Нажимаем на нашу кнопку и в результате выдается сообщение: Hello world! This is antichat! То есть эмулятор сэмитировал нажатие по сенсорному экрану, как Вы бы это делали стилусом, пальцем или еще чем


4. Подключаем фантазию

По большому стчету на простом примере можно было и закончить статью, ведь дальше все ограничивается знанием языка C#. Однако я приведу еще тоже довольно простой пример, демонстрирующий как легко и быстро можно писать полезные для себя вещи.

Как-то была у нас в универе (на лекциях же скучно) была игра в слова. Ну та самая игра, где из большого слова нужно как можно больше составить мелких. Однокурсники долго не понимали откуда я знаю столько слов и все время выигрываю, пока я не раскрыл секрет. Дак вот, была написана простенькая программа для КПК, которая все это делала за меня и вот её не сложный код (обработка клика кнопки Start):


Код:
private void menuItem1_Click(object sender, EventArgs e)
        {
            int count;
            bool found;
            int k;
            String InWord;
            char letter;
            FileStream stream = null;
            StreamReader reader = null;
            String DicPath;

            // DicPath = "dic.txt";
            // if (openFileDialog1.ShowDialog() == DialogResult.OK)
            //     DicPath = openFileDialog1.FileName;

            DicPath = AppPath + "Dictionaries\\" + comboBox1.SelectedItem; //указываем директорию к словарю 
            count = 0; // Найдено 0 файлов изначально
            listBox1.Items.Clear(); //Очищаем список найденных слов
            if ((textBox1.Text != String.Empty) && (comboBox1.SelectedIndex >= 0)) // Если поля ввода заполнены
            {
                try
                {
                    stream = new FileStream(                              // Открываем файл для чтения
                        DicPath, FileMode.Open, FileAccess.Read,
                        FileShare.Read
                    );
                    reader = new StreamReader(stream, Encoding.Default); // Reader читает из потока данные 

                    // Или иначе можно так:
                    // reader = new StreamReader(args[0]);
                    // reader = File.OpenText(filename);

                    String line = reader.ReadLine(); //Читаем первую строчку-слово из словаря
                    while (line != null) // Так сказать, если не конец файла, читаем в цикле все остальное
                    {
                        InWord = textBox1.Text; // Введенное слово
                        found = false;
                        for (int i = 0; i = 0)
                            {
                                found = true;
                                InWord = InWord.Remove(k, 1);
                            }
                            else
                            {
                                found = false;
                                break;
                            }

                        }
                        if (found)
                        {
                            if (line != textBox1.Text)
                            {
                                count++; 
                                listBox1.Items.Add(line);
                            }
                        }
                        line = reader.ReadLine();
                        Application.DoEvents();  // Чтобы приложение не зависало во время выполнения цыкла
                    }
                }
                catch (Exception error)
                {
                    MessageBox.Show(error.Message); // Обработка ошибок
                }
                finally
                {
                    if (stream != null) // Обработка конца потока и закрытие его (файла)
                    {
                        stream.Close();
                        statusBar1.Text = "Найдено : " + Convert.ToString(count); // Выводим количество найденных слов
                    }
                }
            }
            else
                MessageBox.Show("Не все данные введены!");
        }
Полный исходный код проекта в купе со словарем можно скачатьТУТ



5. Заключение


Конечно в статье всего не расскажешь и не покажешь, я лишь указал Вам направление, потому как, возможно, имея КПК и некоторое представление о программировании, Вы и не задумывались о наполнении его своими "фенечками". Если говорить о том, на сколько это перспективно и актуально - все зависит Вас. В интернете полно ПО для КПК, но за частую то, что приходится по душе мало. Спасибо за внимание.

© Pr0mo
 
Ответить с цитированием

  #2  
Старый 03.09.2010, 15:58
Derec
Новичок
Регистрация: 09.11.2007
Сообщений: 24
С нами: 9739767

Репутация: 3
По умолчанию

Лучше бы с примером работы через сеть на КПК, можно было бы троянчика написать. А так статья гуд
 
Ответить с цитированием

  #3  
Старый 03.09.2010, 17:18
0pTik
Участник форума
Регистрация: 18.07.2010
Сообщений: 240
С нами: 8325686

Репутация: 17
По умолчанию

Хорошая статья
 
Ответить с цитированием

  #4  
Старый 03.09.2010, 18:10
dupD0M
Новичок
Регистрация: 18.05.2010
Сообщений: 17
С нами: 8412608

Репутация: 0
По умолчанию

было бы не плохо если бы статейку про написание софта на смарты выложили!
 
Ответить с цитированием

  #5  
Старый 03.09.2010, 19:56
transserg
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
С нами: 9399214

Репутация: 52
По умолчанию

все бы ничего но дот нет на КПК это все еще оч тормознуто. хотя в будующем думаю дело изменится.
 
Ответить с цитированием

  #6  
Старый 03.09.2010, 21:19
Pr0mo
Новичок
Регистрация: 26.11.2009
Сообщений: 20
С нами: 8662587

Репутация: 60
По умолчанию

Цитата:
Сообщение от Derec  
Лучше бы с примером работы через сеть на КПК, можно было бы троянчика написать. А так статья гуд
Сначала в статью хотел включить написание Hello world, но привел еще пример для большей информативности. Работа с сетью довольно сложное начало для новичка.

Цитата:
Сообщение от 0pTik  
Хорошая статья
Спасибо

Цитата:
Сообщение от dupD0M  
было бы не плохо если бы статейку про написание софта на смарты выложили!
Хотел кстати в качестве продолжения и для Symbian написать, но по-моему видел что-то подобное на antichat уже.

Цитата:
Сообщение от transserg  
все бы ничего но дот нет на КПК это все еще оч тормознуто. хотя в будующем думаю дело изменится.
Используемый .Net Compact Framework - урезанная версия, как этого следовало ожидать и она специально создавалась из расчета мощностей КПК. Конечно на слабеньких КПК тормоза заметны (коих на ПК вообще нет). Поэтому лаги уменьшаются пропорционально увеличению мощности КПК (на прилавки поступают более новые и мощные). Есть еще один выход, чтобы избежать ресурсоемкости - писать ПО на C++
 
Ответить с цитированием

  #7  
Старый 03.09.2010, 21:35
Keltos
Iron Man#2
Регистрация: 08.07.2009
Сообщений: 2,084
С нами: 8865026

Репутация: 2562


По умолчанию

Цитата:
Сообщение от Pr0mo  
Хотел кстати в качестве продолжения и для Symbian написать, но по-моему видел что-то подобное на antichat уже.
выкладывай для примера.
 
Ответить с цитированием

  #8  
Старый 03.09.2010, 22:13
Liv13
Познающий
Регистрация: 23.06.2009
Сообщений: 40
С нами: 8886341

Репутация: 223
По умолчанию

да полезная статейка))
 
Ответить с цитированием

  #9  
Старый 03.09.2010, 22:19
Bers
Новичок
Регистрация: 17.05.2010
Сообщений: 5
С нами: 8414959

Репутация: 10
По умолчанию

Цитата:
Сообщение от Pr0mo  
Примечательно то, что в Visual Studio уже встроен эмулятор устройства КПК.
Вообще-то эмулятор идет в составе Windows Mobile SDK. Т.е. потребуется поставить еще и SDK.

Цитата:
Сообщение от Pr0mo  
Тем не менее у эмулятора есть ряд ограничений:
...
•Поддерживает только один процессор x86
•Не поддерживает контактный экран (да и не особо нужно)
Не вполне ясно, при чем тут процессор. Эмулятор прекрасно работает на x64 двухядернике, а КПК с многоядерными процессорами мне лично неизвестны.

А под контактным экраном подразумевается тачскрин или что? Если тачскрин - он прекрасно поддерживается, и он очень даже нужен.

Цитата:
Сообщение от Pr0mo  
версию фреймворка поставим .Net Compact Framework 2.0
Вообще версия 3.5 на данный момент более актуальна. Хотя в принципе это не суть важно.

Цитата:
Сообщение от Pr0mo  
на моем КПК установлена Windows Mobile 6 (WM6) и в качестве тестового плацдарма выступает именно она
...
И в новом диалоговом окне выбираем эмулятор: USA WM 5.0 Pocket PC R2 Emulator.
А зачем вначале говорить про WM6, а потом брать эмулятор от WM5? Понятно, что обратная совестимость, но все-таки

Цитата:
Сообщение от Pr0mo  
Как-то была у нас в универе (на лекциях же скучно) была игра в слова.
+10! У нас еще балда была

Цитата:
Сообщение от Pr0mo  
Код:
letter = line[i];
if (checkBox1.Checked)
{
   if (Convert.ToString(line[i]) == "й")  //Так же учитываем "и" за "й" и "е" за "ё" при необходимости
      letter = Convert.ToChar("и");
  if (Convert.ToString(line[i]) == "ё")
     letter = Convert.ToChar("е");
}
Ужас. Это же делается гораздо проще:

Код:
letter = line[i];
if (checkBox1.Checked)
{
   // Так же учитываем "и"
   if(letter == 'й')
     letter = 'и';
   // Так же учитываем "ё"
   if(letter == 'ё')
     letter = 'е';
}
В твоем коде будут создаваться лишние строки, а это - нагрузка на GC.

Цитата:
Сообщение от Pr0mo  
Код:
Application.DoEvents();  // Чтобы приложение не зависало во время выполнения цыкла
Чтобы приложение не зависало - переноси обработку в отдельный поток:

Код:
private void Button1_Click(object _, EventArgs e)
{
   var text = TextBox1.Text;
   System.Threading.ThreadPool.QueueUseWorkItem(_ =>
   {
    // Process text there
   });
}
 
Ответить с цитированием

  #10  
Старый 04.09.2010, 12:47
SwordMaster
Новичок
Регистрация: 12.08.2009
Сообщений: 4
С нами: 8814068

Репутация: 3
По умолчанию

отличная статья !
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.