IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Написать обучающую программу (https://www.imho.ws/showthread.php?t=74210)

Zueuk 23.11.2004 22:22

Написать обучающую программу
 
Приветствую всех.
Есть такая задачка - написать обучающую программу на тему:
"Использование API функций Windows в среде Delphi".

Написать это пол дела. В какой форме это сделать - вопрос.
Интересуют ваши идеи и советы, как это можно сделать грамотно.

RaZEr 23.11.2004 22:38

А в чем смысл программы? Что ты предполагаешь чтобы она умела делать (основные отличия от e-book)?

Zueuk 24.11.2004 19:10

RaZEr
Честно говоря, твой вопрос меня поставил в тупик.

По моему первоначальному замыслу планировалось создать оболочку и в нее запихнуть информацию о предмете изучения.
Но как ты упомянул про еБук, то сразу стало мне ясно, что отличия будут минимальными.

Вообще, идея такая.
Нужно написать обучающую программу по курсу "Использвание API функций Windows в среде Delphi". Это подразумевает, что использоваться программа будет в качестве учебного пособия, или учебника. Короче, она будет использоваться в преподавании (если нормально будет сделана).
Что прога будет делать я представляю пока с трудом. Пока придумал так: запихнуть туда курс, примеры, задания и подобие теста (а, возможно, "полноценную систему" оценки знаний).

Вот меня и интересует, как сделать "нормально"? Я искал в инете программы похожей направленности. Нашел одну - называется Web Page Teacher. Но такой вариант не подходит (ссылка на прогу _http://www.pinsoft.com.au/software/webteach.exe).

All
Народ! Поделитесь идеями. Мне на все про всё месяц!

RaZEr 24.11.2004 19:43

Цель программы заменить преподавателя, ... значит она должна делать то же что и он, т.е.:

- Рассказывать материал
- Отвечать на вопросы
- Проверять знания
(- Ставить оценки :) )

Вот и сделай, программу которая сначала представит текст, потом раскроет ряд часто-задаваемых вопросов, а затем проведет тест.

Лучше всего запихать в форму ActiveX от IE (TWebBrowser), и далее всё сделать в HTML/JS.

Zueuk 24.11.2004 21:03

Я планировал все это наваять в самом Делфи. Такой вариант сгодится?

(Хотя твой вариант, вроде проще будет...)

А как в ActiveX форму. Поподробней, пожалуйста. Я с этим не работал.

RaZEr 24.11.2004 21:14

Вообщем ничего особо сложного. На форму нужно добавить TWebBrowser и далее просто вызывать его комманды, такие как Navigate. Как работать с компонентом информации много. Я года 3-4 назад писал свой браузер наподобие MyIE, так вот уже тогда было вполне достаточно информации.

Zueuk 24.11.2004 21:21

А вариант с написанием на Делфи хуже?

RaZEr 24.11.2004 22:54

Это всё равно что спорить, что лучше - теплоход или паровоз. Чистый делфи имеет свои плюсы, использование TWebBrowser - свои. Если писать на делфи, то можно расширять всё четко под поставленные цели и задачи. А если писать с использованием TWB, то получаем всю мощь MS IE (HTML,JS). Я бы выбрал второй вариант. Форматировать содержимое средствами HTML проще, чем средствами RichEdit, и тем более проще чем самому писать механизм форматирования.

/7y3uK 25.11.2004 02:55

Razer имеет ввиду прокладку между софтом и пользователем - интерфейс твоей программы, т.е. удобнее и быстрее делать навигацию и презентацию информации на HTML... Если ты в руки брал какой-нибудь пиратский диск, то там наверняка сделана оболочка, которая показывает содержимое компакта, берет описания из TXT и все оформленно красиво, а оболочка не зависит от контента...

Zueuk 25.11.2004 10:40

RaZEr
Про HTML я согласен полностью (править проще).

Спорить я не собирался, что лучше. Я спрашивал, на чем лучше делать (и проще, естественно :) ).

А вот еще такой вариант.
Сейчас часто встречаются всякие руководства, сделанные в виде chm-файла. Они очень похожи на файл справки. Но там можно сделать слева и меню для выбора раздела для изучения. И как-то видел даже что-то вроде теста. Как такой вариант?
PS Да, тоже самое можно сделать и в HTML+JS. :)

/7y3uK
Ты прав, я видел такие диски :) В общем, мне кажется такой вариант неплохой. Но я не знаю еще, подойдет он или нет. Программу я пишу в качестве курсовой работы. А затем она будет дипломной! Так что приходится перебирать все возможные варианты, чтобы не попасть в просак ко времени сдачи диплома!

Дело, как видите, серьезное. :(

RaZEr 25.11.2004 16:31

Цитата:

Сейчас часто встречаются всякие руководства, сделанные в виде chm-файла. Они очень похожи на файл справки. Но там можно сделать слева и меню для выбора раздела для изучения. И как-то видел даже что-то вроде теста. Как такой вариант?
CHM разработан для справочников. Тебе же нужно больше интерактив, как я понимаю.

Цитата:

Программу я пишу в качестве курсовой работы. А затем она будет дипломной!
Мне бы такие дипломные ...

Zueuk 25.11.2004 22:55

RaZEr
Знать бы еще, как этот интерактив лучше оформить (что нибудь получше обычной забивки учебника).

Лучше бы мне обыкновенную программу написать для даплома, чем такую. А ты не жди такой дипломной и сам сваяй полезную софтинку :)
Если сдам нормально все, может сам возмусь за такую :biggrin:

/7y3uK 26.11.2004 01:30

Так тут все просто, в инерактиве :)))

Делаешь список API функций по типам, например: для дисков, папок, файлов; для окон; для диалоговых окон и т.д... Все подразделы ессесно в алфавитном порядке. Для каждой API своя страничка с примером правильного кода, неправильного кода и с кнопой ТЕСТ + объясняловка.

Самое сложное рассортировать API по этим самым типам ибо их много :))) А самое главное - это поиск, чтобы по запросу на русском находилась и показывалась соответствующая группа ссылок... ИМХО через инсталл пакет задашь папку для примеров и вывесишь ярлыки на десктоп...

Плюс ко всему можно как в ГИБДД сделать тест с картиночками как тут: __http://www.certifications.ru/learn/

Zueuk 26.11.2004 10:01

/7y3uK

Цитата:

/7y3uK:
Делаешь список API функций по типам, например: для дисков, папок, файлов; для окон; для диалоговых окон и т.д... Все подразделы ессесно в алфавитном порядке.
С классификацией API-функций не очень сложно. В книгах немного отсортированно. Так что от туда можно взять.

Цитата:

/7y3uK:
кнопой ТЕСТ
Тест в смысле проверка усвоенного?


Цитата:

/7y3uK:
Самое сложное рассортировать API по этим самым типам ибо их много )) А самое главное - это поиск, чтобы по запросу на русском находилась и показывалась соответствующая группа ссылок...
Не понял... На русском языке должно находиться описание этих функций? Правильно понял? Если так, то придется брать поиск по тексту (уже готовый, это целая программа; поищу, если так).

/7y3uK 26.11.2004 16:10

Цитата:

Zueuk:
Тест в смысле проверка усвоенного?
Тест - всмысле нажал кнопу - увидел как работает

Цитата:

Zueuk:
Не понял... На русском языке должно находиться описание этих функций? Правильно понял? Если так, то придется брать поиск по тексту (уже готовый, это целая программа; поищу, если так).
А что тебе мешает оформить хранение данных в базе данных? Там и поиск просто организовать можно, причем на любой вкус.... Можно простецки через ADO и Jet драйвер через Access бд хранить все данные... ну или через ODBC, это как нравится....

RaZEr 26.11.2004 17:24

Какой поиск, какие группы ... господа, научитесь наконец отличать guide от reference.

/7y3uK 26.11.2004 18:01

Цитата:

RaZEr:
господа, научитесь наконец отличать guide от reference
Ну тут ты наверное прав... учебник и справочник - разные весчи... ИМХО просто для диплома темка слабоватенькая, можно же навернуть тут много всего, дабы вытянуть на более-менее приличный уровень...

ладно больше флеймить не буду - не штрафуй плиз :):).

Zueuk 26.11.2004 22:56

Цитата:

/7y3uK:
учебник и справочник - разные весчи
Это точно.


Цитата:

/7y3uK:
ИМХО просто для диплома темка слабоватенькая
Хоть темка и "слабоватенька", но у меня вопросов куча, идей тоже. А до завершения еще далековато.

Цитата:

RaZEr:
Какой поиск, какие группы ... господа, научитесь наконец отличать guide от reference
А что ты тогда еще моешь предложить (не считая HTML b JS)?

Я, кстати, придумал сделать так (по вашим советам): сделать оболочку (для навигации) и засунуть туда HTML странички. Но возникает два вопроса: 1. будет ли там работать Ява-Скрипт, 2. чем это будет отличаться от написания браузера? :)
Что можете сказать?

RaZEr 26.11.2004 23:10

Цитата:

1. будет ли там работать Ява-Скрипт
Внутри TWebBrowser - да.
Цитата:

2. чем это будет отличаться от написания браузера?
Тем, что ты не пишешь браузер, а используешь. Чем будет отличаться от использования? ... - собственным интерфейсом и навигациоными возможностями.

Zueuk 26.11.2004 23:32

RaZEr
Решился я на такой вариант.

Нашел исходник оболочки (шаблон), но он ни C++. Что смог - переделал. Но есть некоторые вещи, которых нет в Делфи.
Сможете помочь разобраться (в смысле подобрать аналоги в Делфи)?

/7y3uK 26.11.2004 23:39

Как это нет каких-то вещей??? STD там что-ли гдето используется ???
Выкладывай, чтоли... не обещаю, но может поковыряюсь :))
Кстати, что есть в твоем понимании слово шаблон и что за C++, они под винду разные бывают... надеюсь не вижла...

Zueuk 27.11.2004 11:16

Цитата:

/7y3uK:
Кстати, что есть в твоем понимании слово шаблон
Шаблон в моем понимании - простая программка без каких-либо серьезных функций, которые можно потом самому навесить.

Цитата:

/7y3uK:
что за C++
Код взят из книги по Borland C++ Builder 6

Цитата:

/7y3uK:
Как это нет каких-то вещей??
Я не утверждаю, что их нет. Я не нашел аналогов этих вещей в Делфи.

Цитата:

/7y3uK:
STD
Насколько я помню, это вроде функция (или подключаемый файл, не помню....)? Так такой в коде нет.

Zueuk 27.11.2004 17:38

Вот код:

Код:

// Введен URL или адрес HTML файла и нажата клавиша Enter
void __fastcall TForm1::ComboBox1KeyPress(TObject *Sender,
      char &Key)
{ if (Key == VK_RETURN)
  { Key = 0;
    if (ComboBox1->Text == "") return;
    WideString URL = (WideString)ComboBox1->Text;
    BSTR Headers = NULL;
    TVariant Flags = {0}, vTargetFrameName = {0},
                          vPostData = {0}, vHeaders = {0};
    LPCTSTR PostData = Edit1->Text.c_str();
    UINT  cElems = lstrlen(PostData);
    LPSTR pPostData;
    Headers = SysAllocString
        (L"Content-Type: application/x-www-form-urlencodedrn");
    V_VT(&vHeaders) = VT_BSTR;
    V_BSTR(&vHeaders) = Headers;
    LPVARIANT pvPostData = vPostData;
    if (pvPostData)
    { VariantInit(pvPostData);
      LPSAFEARRAY psa = SafeArrayCreateVector(VT_UI1, 0, cElems);
      if (!psa) return;
      SafeArrayAccessData(psa, (LPVOID*)&pPostData);
      memcpy(pPostData, PostData, cElems);
      SafeArrayUnaccessData(psa);
      V_VT(pvPostData) = VT_ARRAY | VT_UI1;
      V_ARRAY(pvPostData) = psa;
    }
    CppWebBrowser1->Navigate(URL, &Flags, &vTargetFrameName,
                            &vPostData,  &vHeaders);
  }
}

Места, на которых я запнулся выделил жирным.
Поясню: этот код обрабатывает строку, введенную для открытия. В качестве нее может быть адрес в сети или на локальный HTML файл.

/7y3uK 27.11.2004 20:54

Значит так:

VK_RETURN - это константа равная 13, а в нашем случае тип должен быть Char.
return - просто выход из процедуры, я бы написал вместо вот так:
raise Exception.Create('Не введен URL');
c_str() - сишная строка (по-моему с 0 в конце)... можно просто объявить PostData строкой и сунуть туде данные Edit1.Text;

Могу ошибаться :))) с Сpp не очень.

ЧересЧеловек 28.11.2004 01:23

Немного про VK_RETURN. Это виртуальный код нажатия Enter.
ComboBox1KeyPress вызывается при нажатии любой клавиши, код которой передается в Key, а должна выполнять действие только при нажатии Enter. Вот и проиcходит проверка.

Zueuk 29.11.2004 20:59

ЧересЧеловек
Спасибо. Это я знаю. У меня проблемы с переводом кода Си++ в Делфи

/7y3uK
А как бить вот с этим?

VariantInit(pvPostData);
LPSAFEARRAY psa = SafeArrayCreateVector(VT_UI1, 0, cElems);
if (!psa) return;
SafeArrayAccessData(psa, (LPVOID*)&pPostData);
memcpy(pPostData, PostData, cElems);
SafeArrayUnaccessData(psa);
V_VT(pvPostData) = VT_ARRAY | VT_UI1;
V_ARRAY(pvPostData) = psa;

Особенно не понятно вот это
V_VT(pvPostData) = VT_ARRAY | VT_UI1;
V_ARRAY(pvPostData) = psa;

Короче, весь блок. Бьюсь, безрезультатно!! :(

/7y3uK 30.11.2004 01:02

Zueuk
Ну ты приколист :ржать:

Нука выложи весь проект... в архиве... по кускам нифига не понятно :)

З.Ы. Вообще, когда даешь кусок кода - не плохо бы указывать какие модули подключены (uses или include)

Zueuk 30.11.2004 09:53

/7y3uK
Выше был код. Практически весь.
Код на С++. Точнее - проект для Borland CB 6.

/7y3uK 30.11.2004 18:45

Вложений: 1
Я не понял нафига там парятся с OLE, уж больно как-то специфично... К сожалению в хелпе билдера нет ряда вещей из этого кода. Если нужно просто грузить урлы в окно, тогда вот этого во вложении должно быь достаточно... заодно там простой пример как можно хистори грузить в реестр - из реестра... но так делать не обязательно :))

Zueuk 30.11.2004 21:16

Спасибо за вложение. Как раз то, что нужно! Буду теперь дорабатывать.
PS А в моем даже получаться стало с переделкой. Наверно, день удачный выдался :)

Zueuk 02.12.2004 21:16

Теперь у меня вот такие вопросы.
Вы пользуетесь программой для обучения (подобной сабжу).
Какие Вам понадобились элементы интерфейса (во загнул :) ;кнопки и тд). Короче, нужно разработать элементы для навигации.

Жду предложений.

/7y3uK 03.12.2004 01:59

Zueuk

ИМХО У тутора должны быть только две кнопки - ... ну не считая всякой стандартной всячины типа свернуть/закрыть - "Далее" и "ТЕСТ"...
При достижении конца урока можно организовать тестирование.

Zueuk 03.12.2004 12:35

/7y3uK
Тест лучше на JavaScript сделать? И, наверное, внедрить его в уроки?

Я думаю сделать для каждого раздела свою папку. В эту папку загнать папки с подразделами. И отдельно - папку под тесты.

Т.е. вот такая схема:

Большой раздел->подраздел (или несколько, в зависимости от количества уроков и от размера большого раздела)->уроки.

На какой уровень засунуть тесты, если такая схема нормальная?

И еще. Возникла такая проблемка.
Запускаю программу - она открывает страницу по умолчанию.
Создал кнопку "Назад". И при нажатии, когда истории страниц еще нет, программа вылетает по ошибке (что правильно).
Так вот, как обработать этот момент? Какие методы есть работы с "историей"?


Часовой пояс GMT +4, время: 13:53.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.