Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Всем привет! Решил восполнить пробел раздела НБ - уроки, т.к. уроков нет. Это мой первый урок так, что сильно не пинать Не буду отходить от традиций и начну уроки с простых примеров. Итак 1-урок Таймер Сразу оговорю пару моментов, урок рассчитан на тех, кто знаком с интерфейсом НБ, и вопросы - "как мне создать кнопку" буду игнорировать, т.к. для изучения интерфейса нужен отдельный урок, без обид.
часть 1
Для начала составим краткий "бизнес-план", это упрощает создания проекта и не дает возможности уйти в "сторону" 1-Сделать интерфейс нашего Таймера (я использовал штатные средства НБ) 2-Функционал Таймера, т.е. что будет делать таймер: a- Выключить ПК b- Перезагрузить ПК c- Открыть файл d- Включить\Выключить Интернет 3-Дополнительные функции ------------------------------------------------ Создадим новый проект -размеры 600х300 -приложение типа System Tray -(Свойства-->Окно):Стандартное окно, убираем галочки с "развернуть", "Свернуть", "Раздвижное" -Цвет фона у меня BtnFace(см.рис) Создаем 4 объекта Rectangle(Прямоугольник)с размерами: -один 588х31 -два 290х130 -и последний 588х84 -заливку убираем (Hollow) -рамку ставим(Gray) и размещаем как на рис. Ими мы разграничим наше приложение по областям, их будет 4-областей. Помещаем на поле 4 Радиокнопки, в заголовках пишем номера, для первой 1 для второй 2 и т.д. и зададим им группу [vibor], это будет выбор действий для Таймера (см.рис.), в "Команде-->Click" пропишите переменную [actions] на событие клик, код
Code
SetVar "[actions]" "выключить компьютер"
то же проделайте с другими (значения сагласно задачам) и еще две кнопки "Включить" и "Очистить". Теперь кинем на рабочий стол 4-объекта "Text", и дадим имена нашим действиям согласно нашему бизнес плану, в первом пишем "Выключать ПК", во втором "Перезагрузить ПК" и т.д. Теперь нам надо сделать возможность выбора времени, для простоты я использовал объект Слайдер (TrackBar), помещаем на поле 3 Слайдера 1-присваеваем переменную (для позиции ползунка) [H] часы -настройки: мин. значение ставим-0, макс-23, начальное-0 2-присваеваем переменную (для позиции ползунка) [M] минуты -настройки: мин. значение ставим-0, макс-59, начальное-0 3-присваеваем переменную (для позиции ползунка) [S] секунды -настройки: мин. значение ставим-0, макс-59, начальное-0 Ну вот главные элементы готовы, осталось сделать пару поправок, дать имена Слайдерам и разграниченным полям. Озвучивать не буду по причине -там все просто- сделайте самостоятельно как показано на рис(3) Ну вот можно запустить проект и посмотреть, что получилось, но прежде чем запустить.... Если мы протестируем проект, то он спрячется в трей, т.к. у нас выбран режим System Tray Чтоб убрать это неудобство во время тестирования, нужно в проекте в Actions(Команды) на вкладке (F6-->Actions(Команды)-->StartUp) написать следующий код:
Code
SetVar "[StartInSystemTray]" "False"
Он запрещает приложению сворачиваться в трей. Последних штрих - чтоб цифры у группы Радиокнопок не выделялись, им надо задать цвет шрифта такой же, как у фона
У нас поле разделено (как писал выше) на 5 областей, Безымянное, Таймер, Действие, Итог, Дополнительно (так и обозначим для идентификации) -------- Теперь зададим кнопке "Включить" действие. Я буду использовать Подпрограммы (далее ПП)можно вызвать это окно так: "Проект-->ПП-->Новый" или так "F6-->Actions(Команды)-->вкладка Подпрограммы (ПП)", назовем "check" в открывшемся окне вставим между :check и Return следующий код:
Code
:check SetVar "[cheks]" "True" IfEx "[H]=[#34][#34] OR [M]=[#34][#34] OR [S]=[#34][#34]" AlertBox "Ошибка!" "Вы не выбрали время" SetVar "[cheks]" "False" EndIf IfEx "[vibor]=[#34][#34] or [vibor]=0" AlertBox "Ошибка!" "Вы не выбрали действие" SetVar "[cheks]" "False" EndIf .проверим переменную [cheks] на True\False, если False, то ничего не делаем If "[cheks]" "=" "False" SetVar "[cheks]" "" Else MessageBox "Таймер" "Ваш выбор следующий: ||Действие: [actions]|Время исполнения: [H]ч. [M]мин. [S]сек.|| Подтверждаете назначенное действие?!" "Да|Нет" "[otvet]"
.тут будет действие, если пользователь согласился EndIf EndIf Return
разберем код Переменная (SetVar "[cheks]" "True") для слежения хода проверки, можно и не создавать Нам необходимо проверить 3 переменные в области Таймер на пустоту Можно использовать IF, но тогда код получится раздутым, а упростим мы оператором IfEx. Синтаксис будет выглядеть так ЕСЛИ ЧАСЫ=ПУСТО или МИН=ПУСТО или СЕК=ПУСТО, ТО далее по коду То же самое и с проверкой на отрицательность "Действие" (IfEx "[vibor]=[#34][#34]") OR- означает "ИЛИ" AND - "И" Чтоб подключить "ПП" в "Команде-LeftClick" кнопки поместим след. код:
Code
GoSub "check"
Запустите тест и ничего не делая нажмите кнопку "Включить"... Появилось сообщение об ошибке?! Значит код работает. Теперь поставим Слайдеры на любые значения, и сделаем любой выбор в "Действиях", нажимаем кнопку "Включить" и....Появилось сообщение с надписью "Ваш выбор следующий...", значит все работает. Ну что ж, пора сделать что то, чтобы работало, например, открыть файл при достижении заданного времени. Открываем "Команду-Click" той Радиокнопки, которая отвечает за открытие файла (у меня он под номером 3) и пишем код
"FileOpenBox" Позволяет пользователю выбрать файл через стандартное диалоговое окно открытия Открываем редактор "ПП-check" и в блоке (If "[otvet]" "=" "1") ставим следующий код
Code
TimerStart "Timer1" "1000"
, т.е. если в сравнениях все верно, и пользователь дал согласие на выполнение планируемого действия, то запустим таймер. Создаем объект "Timer (таймер)" в свойствах выставляем Wait for "TimerStart" (Ждать команду "TimerStart"), и пишем код
Code
IfEx "[H]=[Hour] AND [M]=[Minute] AND [S]=[Second]" GoSub "actions" EndIf
Переменные [Hour],[Minute] и [Second] - это встроенные глобальные переменные далее "ВГП"(подробности в хелпе) С оператором IfEx мы познакомились, и с командой GoSub тоже, но у нас нет пока этой команды, следующий шаг создадим "ПП-actions" переходим в "ПП". Создаем после "ПП-check" новую ПП и назовем "actions". Вставляем туда код
Code
TimerStop "Timer1" If "[vibor]" "=" "3" Run "[openFiles]" "" "RunOnce+LoadComplete" "" "" EndIf
команда "Run" отвечает за запуск внешнего Windows-приложения, после выполнения команды останавливаем таймер и очищаем переменные. Можно проверить таймер, запускаем в тестовом режиме и проверяем... Ура, у нас получилось! Теперь сделаем удобные фичи, чтоб Пользователь постоянно не подгонял по текущему времени, мы облегчим и создадим кнопку, которая и будет это делать. И так кнопку в студию назовем ее...так и назовем "выставить по текущему времени" в "LeftClick" пишем код
вы уже знакомы с "ВГП", в этом коде мы свои переменые заполняем "ВГП". Неплохо бы в нашей программе показывать текущее системное время, создаем объект "Text" и вставляем такой текст "Текущее время: [Time24]". Эта переменная "Time24" тоже "ВГП". Поместить это объект можете в любом месте области "Безымянное", я поместил его с права
Добавлено (24 Август 2009, 12:10) --------------------------------------------- Ну что ж, основное дело сделано, теперь доделаем скрипт для действий "Выключить ПК" и "Перезагрузить ПК". Открываем "ПП" и в "ПП-actions" добавляем код, Кстати для того чтоб выключить или перезагрузить ПК в НБ нет команд, но мы воспользуемся средствами самой Windows, тут есть инфа предоставленная Омаром список команд
Code
...................[1]выключить компьютер If "[vibor]" "=" "1" .Run "shutdown.exe" "-s -f -t 00" "Hidden" "" "" EndIf ....................[2]перезагрузить компьютер If "[vibor]" "=" "2" .Run "shutdown.exe" "-r -f -t 00" "Hidden" "" "" EndIf ....................[4]Включить/Отключить интернет If "[vibor]" "=" "4" ..пока так подготовим оператор EndIf
команду "Run" я закомментировал от случайного нажатия при тесте. перед сборкой "Таймера" не забудьте снять коменты. Далее мы заполним область "Итог" Вы можете назвать это поле по другому. По сути это информационная область выбранных действий пользователя. Создаем два объекта "Text" в одном пишем "Действие: - [actions]" в другом "Время исполнения: - [H]ч. [M]мин." [S]сек. Размещаем в области "Итог". Теперь, когда пользователь выбрал время и действие, то информация отобразится в этой области. Теперь перейдем к области "Дополнительно". Для чего же она нужна?! Для нужных на мой взгяд опций. Например, Пользователь частенько использует таймер для определенной задачи, и чтоб ему постоянно не забивать одно и тоже мы сделаем память, можно еще дополнительно добавить функцию Выход из приложения после исполнения задачи, еще напоминалку. И так кидаем на поле в область "Дополнительно" 3 объекта "CheckBox" и зададим Название = Переменная 1)"Запомнить" = [saved] 2)"Предупредить за:" = [napomnit] 3)"Закрыть" = [exit] к "Предупредить за:" необходимо добавить объект "ComboBox"(список) с переменной [napomnMIN], в список пунктов надо написать цифры "1,2,3,4,5..." они будут означать за которое время предупредить о выполнение задания теперь переходим в ПП и создаем новую ПП с именем "saveParam" и прежде чем там кодировать надо определится, что нам понадобится сохранять. Первое это время, 2-это действие, 3-напоминалка так и запишем код:
разберем код. Проверяем оператором "If" сделан ли выбор в CheckBox-Запомнить, если поставлена, то сохраняем. Прежде чем сохранить в файл, надо подготовить данные для записи за это будет отвечать переменная [zapisParam] запись каждой переменной для сохранения будет иметь такой вид "H=[H]" почему именно так, объясню позже. Команда "FileWrite(Записать данные в указанную строку внешнего файла.)" наш внешний файл - "[PubDir]timer.ini" где [PubDir](кстати, это ВГП) означает путь к папке, где размещается текущее приложение. В итоге должно получиться в файле "timer.ini" следующая запись:
Quote
H=11 M=46 S=55 vibor=1 actions=выключить компьютер saved=Checked napomnMIN=4 napomnit=Checked exit=Checkeds
Если выбор в CheckBox-Запомнить не сделан или отменили, то выполняем код находящийся за "else" то есть проверяем на наличие файла "timer.ini" командой "FileExists(Проверить наличие (существование) внешнего или вложенного файла. )" если он есть, то удаляем командой "FileErase(Удалить внешний файл)". Запустить эту ПП я решил из "ПП-check" записать надо команду (GoSub "saveParam") после команды (TimerStart "Timer1" "1000"). В конце этого урока я приведу полный код ПП. Теперь нам надо загрузить эти данные для этого мы создаем новую ПП и даем имя "loadParam" пишем туда код
новая команда "LoadVariables(Загрузить переменные из файла.)" Чтобы запустить эту ПП перейдем на вкладку "(F6-->Actions(Команды)-->StartUp)" и добавим запись
Code
GoSub "loadParam"
. Т.е. при загрузке приложения выполнится "ПП-loadParam" Ну вот теперь наша программа имеет память Из истории, в первом проекте я реализовывал память без команды "LoadVariables", т.е. вот таким способом
теперь будем делать напоминалку создаем "ПП-napominalka" и помещаем в него код
Code
If "[napomnit]" "=" "Checked" SetVar "[vremFORpam]" "[M]" If "[vremFORpam]" "<" "[napomnMIN]" SetVar "[vremFORpam]" "[vremFORpam]+60" EndIf Math "[vremFORpam]-[napomnMIN]" "0" "[napomZaMIN]" EndIf
разбор кода, в переменную "vremFORpam" заносим время таймера "М", суть в том, что надо рассчитать время если время напоминания например 4мин. а время по таймеру, например 1мин, чтоб не было ошибок при вычитании(Math "[vremFORpam]-[napomnMIN]" "0" "[napomZaMIN]"). Если у кого есть варианты, можете запостить в теме а запускать мы этот ПП будем из "ПП-check" в блоке оператора (If "[otvet]" "=" "1"), в этом блоке должны быть следующие команды
IfEx "[H]=[Hour] AND [napomZaMIN]=[Minute] AND [S]=[Second]" AlertBox "Напоминание" "До исполнения задачи осталось [napomnMIN] мин." EndIf
этот код и будит отсчитывать время до напоминания Осталось сделать "Закрыть"(Выход из приложения после исполнения задачи) тут все просто в "ПП-actions" перед строчкой "Return" ставим следующий код
Code
If "[exit]" "=" "Checked" .Exit "" "" Else
и последнее создадим ПП для кнопки "Очистить" создаем новую "ПП-clearParam" ставим код
а в кнопке "Очистить" в Команде - "LeftClick" пишем строчку кода
Code
GoSub "clearParam"
. Еще реализовал запрет на закрытие программы, т.е. при закрытие программы, она сворачивается в трей. Наши действия "F6-->Actions(Команды)-->вкладка ShutDown(Выход)" пишем следующий код:
и добавляем пункт меню в трее "F6-->Tray Menu" пункт назовем "Выход" с командой
Code
Exit "" ""
Вот что должно получиться На этом первая часть урока закончена, В этом уроке я попытался реализовать все Необушными средствами, не подключая плагины, но для подключения/отключения интернета необходим плагин. Вы должны скачать, установить и по изучать плагин сделанный одним хорошим человеком - нашим администратором Peter-ом! За что скажем ему СПАСИБО! Кому не понравился такой поворот с подключением/отключением интернета, то можете удалить из проекта эту радиокнопку.
----------------------полный код подпрограмм---------------------------
Code
.LOADPARAM :loadParam FileExists "[PubDir]timer.ini" "[ok]" If "[ok]" "=" "True" LoadVariables "[PubDir]timer.ini" SetVar "[ok]" "" EndIf Return .CHECK :check . проверяем на пустоту данных, если из блока все пустые то выдаем ошибку SetVar "[cheks]" "True" .переменная для слежения правильности заполнения поле, можно и не создавать .Для проверки 3 полей используем оператор логических выражений IfEx IfEx "[H]=[#34][#34] OR [M]=[#34][#34] OR [S]=[#34][#34]" AlertBox "Ошибка!" "Вы не выбрали время" SetVar "[cheks]" "False" EndIf IfEx "[vibor]=[#34][#34] or [vibor]=0" AlertBox "Ошибка!" "Вы не выбрали действие" SetVar "[cheks]" "False" EndIf ... .проверим переменную [cheks] на True\False, если False, то ничего не делаем If "[cheks]" "=" "False" SetVar "[cheks]" "" Else .выводим мессагу, что все готовo для старта MessageBox "Таймер" "Ваш выбор следующий: || Действие: [actions]|Время исполнения: [H]ч. [M]мин. [S]сек.|| Подтверждаете назначенное действие?!" "Да|Нет" "[otvet]" If "[otvet]" "=" "1" GoSub "napominalka" TimerStart "Timer1" "1000" GoSub "saveParam" EndIf EndIf Return .ACTIONS :actions TimerStop "Timer1" ...................[1] выключить компьютер If "[vibor]" "=" "1" .Run "shutdown.exe" "-s -f -t 00" "Hidden" "" "" EndIf ....................[2]перезагрузить компьютер If "[vibor]" "=" "2" .Run "shutdown.exe" "-r -f -t 00" "Hidden" "" "" EndIf ....................[3] If "[vibor]" "=" "3" Run "[openFiles]" "" "RunOnce+LoadComplete" "" "" EndIf ....................[4]Включить/Отключить интернет If "[vibor]" "=" "4" ..... EndIf If "[exit]" "=" "Checked" Exit "" "" Else ClearVariables "[vibor],[actions],[openFiles]" EndIf Return .SAVEPARAM :saveParam If "[saved]" "=" "Checked" SetVar "[zapisParam]" "H=[H][#13]M=[M][#13]S=[S][#13]" SetVar "[zapisParam]" "[zapisParam]vibor=[vibor][#13]actions=[actions][#13]" SetVar "[zapisParam]" "[zapisParam]saved=[saved][#13]napomnMIN=[napomnMIN][#13]" SetVar "[zapisParam]" "[zapisParam]napomnit=[napomnit][#13]exit=[exit][#13]" . If "[vibor]" "=" "4" . . EndIf FileWrite "[PubDir]timer.ini" "All" "[zapisParam]" SetVar "[zapisParam]" "" else FileExists "[PubDir]timer.ini" "[ok]" If "[ok]" "=" "True" FileErase "[iniFL]" SetVar "[ok]" "" EndIf EndIf Return .NAPOMINALKA :napominalka If "[napomnit]" "=" "Checked" SetVar "[vremFORpam]" "[M]" If "[vremFORpam]" "<" "[napomnMIN]" SetVar "[vremFORpam]" "[vremFORpam]+60" EndIf Math "[vremFORpam]-[napomnMIN]" "0" "[napomZaMIN]" EndIf SetVar "[viewNapom]" "[H]ч. [napomZaMIN]мин. [S]сек." Return .CLEARPARAM :clearParam ClearVariables "[vibor],[actions],[openFiles],[napomZaMIN],[napomnit],[H],[M],[S],[exit],[saved]" SetVar "[napomnMIN]" "0" Return
Внимание! при копировании кода будьте внимательны!
По просьбе читателей, привожу пример создания уведомления (типа боллона), которое будет появляться в области трея. Начнем оформлять окно уведомления Создаем объект "Container(контейнер)" используется главным образом в качестве подложки для других объектов. На вроде "коробки" куда можно складывать другие объекты. Задаем Контейнеру имя, например messTray у меня размер Контейнера 234х105. Помещаем в него объекты: Текст(2шт.) и Кнопку. В первом объекте "Текст" пишем название диалогового окна, я написал следующее:
Code
[PubTitle]
Во втором "Тексте" пишем, что должно информировать
Code
До исполнения задачи осталось [napomnMIN] мин
В "Кнопке" заголовок "х" и помещаем код
Code
CloseCustomWindow "messTray"
, т.е. означает закрыть окно, открытое командой CustomWindow. Если что-то не понятно в оформлении, посмотрите по рис. или в исходнике Теперь еще создаем объект "Таймер", как описано выше задаем имя ему "stopMessTray" и в "Timer Properties(Свойств объекта)-->Actions(Комнда)-->Timer Interval" пишем код
Code
CloseCustomWindow "messTray"
? он такой же, как и в кнопке Открываем редактор "ПП" и создаем новую ПП messTray с кодом
Code
Math "[ScreenWidth]-[WindowLeft]-234" "" "[treyWinX]" Math "[ScreenHeight]-[WindowTop]-164" "" "[treyWinY]" CustomWindow "" "[treyWinX]" "[treyWinY]" "messTray" "NoBorder" TimerStart "stopMessTray" "4000"
Командами "Math" мы вычисляем координаты, где будет располагаться окно ScreenWidth\ScreenHeight-это ВГП и означает ширину\высоту всего экрана Windows в пикселях. WindowLeft\WindowTop-это ВГП и означает координаты X\Y левого-верхнего угла окна приложения Цифры 234\164-это ширина\высота нашего окна уведомлений(234х105) плюс к высоте добавил высоту панели, иначе сообщение закроет панель. В место цифр можете использовать команду "GetObjectInfo" с заданным соответственно Width и Height этого окна, но не забудьте прибавить высоту панели Команда "TimerStart" запускает Таймер, где прописано скрыть напоминалку, я выставил 4 сек. Теперь, чтоб это заработало, открываем наш первый таймер "Timer1" и удаляем строчку кода (AlertBox "Напоминание" "До ис...) в место нее пишем
Code
GoSub "messTray"
вот что должно, примерно, получится
Не смог залить полностью только кусками Не могу даже выделить пару строчек, пишет "Превышен лимит" если найдете, какую-нибудь неточность или несоответствие, напишите и укажите номер сообщения
Супер! Отлично получилось! sp3d, из тебя хороший учитель выйдет
Я как раз подобный таймер делаю, вот сразу по уроку и буду делать Кстати, у меня по этому вопросу есть к тебе маленькая просьба, как к знатоку флеша. Надеюсь не откажешь
поздно, я так растроился, что снес и рисунки и текстовики, я как это-эмоцианален. Правда через минуту пожалел о сделаном. Но недолго еще наскринить, только вечером, я через 15 минут уйду
В след. раз прилагайте архив с полным уроком в каком-либо формате, да и все...
это у меня есть в планах, чуть позже сделаю в *.mht формате
Добавлено (24 Август 2009, 17:48) --------------------------------------------- передумал делать офлайн урок, это получается готовый урок для других ресурсов, перебьются
Добавлено (24 Август 2009, 17:50) --------------------------------------------- а если и делать, то надо придумать пароль на архив, чтоб левые или залетные не знали, а свои знали
Ура энтузиазму необукеров! В порядке предложения... Уроки можно делать разными - по типу предмета изучения (того, что именно в центре внимания урока). И не смотря на то, что все типы уроков взаимосвязаны, все же это не одно и тоже. Я имею ввиду пока четыре типа (их может быть и больше, если идея понравится - предлагайте): 1) Задача. Предмет такого урока - научиться делать то-то, решать такие-то задачи или задачу. Итог такого урока: создание некоторого проекта, демонстрирующего те или иные возможности NB, овладение этими приемами и конкретными решениями. 2) Команды. Предмет такого урока - конкретная команда (или группа команд), ее максимально полное описание с примерами кода (включая взаимодействие с Операторами и Переменными). Лично мне больше всего не хватает именно нормального описания синтаксиса команд и примеров их использования, с описанием типичных задач - для чего и как чаще всего применяются, с описанием тонкостей и нюансов, с описанием типичных ошибок использования данных команд, с описанием нетипичного использования. То, что есть в справке NB больше похоже на сжатый конспект-шпаргалку, для специалиста-программера, а, по идее, наоборот справка для NB должна быть рассчитана на человека, который не умеет кодить, но хочет этому научиться на языке NB. Итог такого урока: полноценная справка по определенной команде или группе команд. 3) Объекты. Предмет такого урока - конкретный объект (листбокс, статья, чекбокс и т.д.), его описание и примеры типичного применения, описание типичных ошибок его использования, советы по тому, как лихо можно данный объект использовать и пр. Примеры нестандартного, нетипичного, интересного применения - для демонстрации возможностей NB и логики программирования. Итог такого урока: исчерпывающая информация о возможностях объекта и принципах его применения. 4) Команды Плагинов. Тоже что и "Команды" (см. п.2), только о плагинах.
С точки зрения развития нового ресурса NB, я думаю, наиболее важно помочь овладеть самими инструментами работы (синтаксис NB и плагинов, русификации NB и плагинов). Тогда и примеры создания конкретных проектов (использование инструментов) будут народу значительно понятнее и в них можно будет делать отсылки к "общим" темам (вроде Команд).
В этом ключе у меня созрело еще такое конкретное предложение (уже за пределами темы Уроков, но взаимосвязано с ними): Создать свою справку по NB! Причем она должна быть живой, динамично развивающейся, с системой обратной связи от тех, кто ею пользуется. Назвать ее, чтобы не путаться, например, NB-РУКОВОДСТВО. Взять за основу русифицированную справку и добавлять в нее наиболее удачные дополнения к описаниям команд, объектов и т.д. Создать дополнительный раздел - для плагинов, и там тоже будет опыт накапливаться (добавить и другие необходимые и желательные разделы). И пусть Руководство постоянно развивается по типу Wiki-энциклопедии.
Как это может выглядеть (для примера): а) кто-то систематизировал кусок своих знаний по какой-то команде и выдал листочек (пол листочка) редакционной группе (редколлегии). Кстати, многие из тех, кого не хватило бы на полноценные Уроки, могли бы в этом жанре быть очень полезны (!), ведь написать какое-то дополнение в справку на пару абзацев совсем не сложно, а очень полезно (особенно, если эти два абзаца толково расшифровывают то, что описано в оригинале Справки и вовсе одним предложением...); б) редколлегия (в состав которой войдут самые опытные необукеры) рассматривают этот листочек, делают необходимую редакторскую правку (согласовывая правки с автором "листочка", во избежание недопонимания с обеих сторон) и выносят один из трех вердиктов: включить в новую версию Руководства; включить в новую версию с доработками (отправить автору на доработку, с указанием слабых мест); не включать в Руководство (с указанием причин - почему нет). в) при положительном решении редколлегия вносит новый кусочек знаний в Руководство и выставляет новую версию на сайте для скачивания, а имя автора (и/или его Ник) заносится в общий список участников, внесших свой вклад в развитие Руководства - например на странице "О Руководстве". г) народ качает новую версию и радуется
Дополнительно Руководство следует оснастить: - гиперссылками на те или иные разделы и темы форума, где данная тема и понятия содержательно обсуждались и где можно почерпнуть нечто, что в Руководство не поместить, но что полезно (размышления, логика выработки решения и т.д.). Таким образом Руководство может выступить в роли постоянно саморазвивающегося координатора системы знаний; - системой учета переходов по ссылкам из Руководства и на Руководство (чтобы редколлегия видела самые востребованные разделы и могла рекомендовать опытным участникам форума разработать дополнения к таким-то разделам Руководства); - системой "запроса информации" (в самом Руководстве предусмотреть форму отправки сообщений на сайт форума - мол, "в таком-то разделе не совсем понятно то-то можно эту тему развить?") - смысл тот же - давать редколлегии обратную связь о полезности и применимости тех или иных разделов Руководства; - системой гиперссылок на различные полезные ресурсы в Интернет (помнится, Sp3d, уже предлагал такую идею!); - необязательно, но можно предусмотреть также и систему оценки любой темы (раздела) чтобы одним кликом народ мог оценить полноту/понятность/полезность того или иного раздела Руководства (это тоже позволит подтягивать разделы, которые в оценках уступают). Что-то вроде системы рейтингов, только вместо звездочек можно использовать логотип NB (о! у темы целых пять NB-шек! )
По идее, формат CHM все это должен поддерживать, ну, с учетом работы скриптов на сайте, конечно (для фиксирования переходов и для работы формы отправки сообщений). А быстрый поиск в CHM сделает это Руководство просто незаменимым подспорьем в работе.
Не плохо, а вот у меня вопрос, можно чтобы это уведомление из трея вылазило плавно?)
конечно можно
Добавлено (26 Август 2009, 11:23) --------------------------------------------- только не
Quote (Alien)
вылазило
, т.к. это и сам сделаешь при желании, а появление сообщения с помощью "CustomWindow", пример покажу, только незнаю тут ли постить или отдельно, многих ведь интересует вопрос
Да что там объяснять то? По моему это сделать не так сложно, как кажется. Я вам советую вначале самому попытатся сделать подобное уведомление, а потом, если вдруг не получится, просить помощи...
Внимание! добавил в урок(пост 4) появление уведомления в области трея. Потом когда будем на новом ресурсе, можно будет и создать новую тему... ***
Quote (Bodi)
Да что там объяснять то?
Bodi, ты уже родился програмером или...?! Возможно человек и знает решение, но принцип работы не всегда виден, можно убить неделю и не найти, а он лежит на поверхности
Сообщение отредактировано sp3d - Ср, 26 Августа 2009, 13:35