АвторСообщение
постоянный участник




Пост N: 62
Зарегистрирован: 27.04.07
Откуда: Россия, Воркута
Рейтинг: 0
Фото:
ссылка на сообщение  Отправлено: 25.06.07 11:28. Заголовок: Программирование на PureBasic. Часть 1




Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 136 , стр: 1 2 3 4 All [только новые]





Пост N: 259
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 22.06.07 13:50. Заголовок: Re:


vintik пишет:

 цитата:
А где можно качнуть PureBasic?

Для начала, зайди сюда Там есть ссылка на учебник и форум
Скачать грограмму можно отсюда http://www.rampark.narod.ru/ текущая версия 4.0, вес 8.2 Мб

vintik пишет:

 цитата:
Подкупило, что можно управлять COM портом.

На PureBasic тоже можно, причём для этого совсем не объязатально знать как этот порт работает. Правда в самом компиляторе функций для работы с портами нет, но можно установить дополнительную библиотеку с требуемыми функциями.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 263
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 23.06.07 11:27. Заголовок: Re:


Evgeny Korabelnikov пишет:

 цитата:
Петр, как на счет "затравки" в виде первичного "въезда" в PureBasic?



Первичный "въезд" думаю организовать так:
Сначала следует скачать программу PureBasic 4.0 (ссылка была дана выше).
русификатор
Затем, следует ознакомится с учебником Именно с его помощью я и начал изучать этот язык.
В этом учебнике информация изложена толково, жаль только что её (информации) очень мало.
Далее нужно будет организовать специальный раздел где я мог бы вылаживать набольшие программки и объяснять как они работают. Это можно сделать на нашем форуме или Здесь
Кстати на этом форуме есть тема "COM порт".


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 267
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 24.06.07 10:25. Заголовок: Re:


MAZ пишет:

 цитата:
Как подключать к тексту программы Vizual Designer не понял?

В меню "Projeck" следует выбрать пункт "PureBasic Editor". В этом случае будет сгенерирован код и помещён в окно редактора. Только если Вы попытаетесь его скомпилировать, окно не увидите. Дело в том что текст представлен в виде процедуры и для того чтобы увидеть это окно, предварительно следует её вызвать.
Делается это следующим образом: Ищем строку содержащую в слово Procedure. После него указанно имя этой процедуры (например, Open_Window_0() ). Теперь берём это слово (в месте со скобками) и помещаем в конец текста.
Должно получится примерно следующее: (окно пустое)
Enumeration 
#Window_0
EndEnumeration

Procedure Open_Window_0()
If OpenWindow(#Window_0, 216, 0, 600, 300, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))

EndIf
EndIf
EndProcedure

Open_Window_0()


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

Repeat 
Event=WaitWindowEvent()
If Event=#PB_Event_CloseWindow
exit=1
EndIf

Until exit=1


В общем должно получится:

Enumeration 
#Window_0
EndEnumeration


Procedure Open_Window_0()
If OpenWindow(#Window_0, 216, 0, 600, 300, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))

EndIf
EndIf
EndProcedure

Open_Window_0()

Repeat
Event=WaitWindowEvent()
If Event=#PB_Event_CloseWindow
exit=1
EndIf

Until exit=1


Теперь окно не только устойчивое, но его ещё можно закрыть, щёлкнув по крестику в заголовке окна.

Более подробно объясню как это всё работает чуть позже. Объяснять буду по принципу "от простого к сложному", а пока можете посмотреть примеры программ, в папке "Examples".

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 270
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 25.06.07 11:48. Заголовок: Re:


vintik пишет:

 цитата:
но ничего не нашел ни по COM

Посмотри здесь Там правда есть только ссылка на нужную библиотеку с функциями и больше ничего. Думаю пока рано думать о порте, сначала язык освоить нужно.

vintik пишет:

 цитата:
Мне сдается, что если на форуме будеш вести тему по "пурику"...

Естествено буду. Только на форуме сложно будет размещать, допустим таблицы, так что несколько первых разделов нужно по почте отправлять.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 178
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 25.06.07 13:35. Заголовок: Re:


Пётр пишет:

 цитата:
Посмотри здесь


Качнул библиотеку. Теперь есть стимул

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 179
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 25.06.07 20:22. Заголовок: Re:


Получил рассылку с первой статьей, круто, если учесть что написана в короткий срок да еще и
с примерами... Боюсь перехвалить
Есть первый вопрос(ы):
Довольно часто попадается текст, не выровненный по левой стороне. Напоминает елочку, это
делается специально для читабельности?

Потом вот такая строка:
If OpenWindow(0, 100, 100, 350, 400, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) And CreateGadgetList(WindowID(0)) она должна писаться в одну строку?
И как посмотреть выполнение программы в пошаговом режиме, с первой строки?
Ну и насколько сложно переделать USART.exe под ЛПТ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 180
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 25.06.07 21:25. Заголовок: Re:


Уже кое чего слепил


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 271
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 25.06.07 22:04. Заголовок: Re:


vintik пишет:

 цитата:
Потом вот такая строка:
If OpenWindow(0, 100, 100, 350, 400, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) And CreateGadgetList(WindowID(0)) она должна писаться в одну строку?

Да, хотя можно и записать в две строки. Примерно так:
If OpenWindow(0, 100, 100, 350, 400, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) 
CreateGadgetList(WindowID(0))

В следующем разделе, я разберу на молекулы создание окон.

vintik пишет:

 цитата:
Довольно часто попадается текст, не выровненный по левой стороне. Напоминает елочку, это
делается специально для читабельности?

Да, так проще найти нужный фрагмент текста.

vintik пишет:

 цитата:
И как посмотреть выполнение программы в пошаговом режиме, с первой строки?

По правде говоря, такой необходимости пока небыло. Если мне нужно было узнать какие значения принимают переменные в определённом месте программы, я использовал контрольную точку. Для её установки, следует поместить курсор на нужную сторку и нажать на кнопку "F9". Далее запускаем программу и как только рабочая точка программы переместится на нужную позицию, работа программы остановится. Чтобы посмотреть что какие значения записаны в переменные, следует в меню "Отладчик" выбрать пункт "Переменные"
Сейчас попробую разобратся с пошаговым режимом.

vintik пишет:

 цитата:
Ну и насколько сложно переделать USART.exe под ЛПТ?

Это будет посложнее. Во первых, пока не смог найти библиотеку с функциями для LPT порта, а во вторых, программо реализовать последовательный интерфейс будет сложно.

vintik пишет:

 цитата:
Уже кое чего слепил

Поздравляю с первым успехом!
Помню, я тоже радовался когда написал свою первую программу, можно так сказать "укротил" комп.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 272
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 25.06.07 22:24. Заголовок: Re:


vintik пишет:

 цитата:
как посмотреть выполнение программы в пошаговом режиме

Делается это следующим образом:
"Ставим" курсор на нужную стоку (в данном случае, первую) и нажимаем на кнопку "F9". Запускаем программу. Поскольку контрольная точка установлена в первой строке, программа будет остановлена. Далее нажимаем на кнопку "F8". Каждое нажатие производит один шаг.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 181
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 25.06.07 22:30. Заголовок: Re:


Полез в справку посмотреть что такое Debug, и .... споткнулся, о команду DebugLevel,
не хочется тебя дергать за каждым разом, попробую разобраться сам
Дааа, если БЫ справка к басику была написана тобой, то почитателей этой программы
намного бы преувеличила все ожидания ее создателей



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 273
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 25.06.07 22:40. Заголовок: Re:


vintik пишет:

 цитата:
Полез в справку посмотреть что такое Debug

Этой командой особо "забивать" голову не стоит. Она в основном предназначается для отладки программ. В реальных программах найти её преминение сложно.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 182
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 25.06.07 23:00. Заголовок: Re:


Пётр пишет:

 цитата:
"Ставим" курсор на нужную стоку (в данном случае, первую) и нажимаем на кнопку "F9".


Получилось!
Тут оказывается можно задавать количество выполненных шагов

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 274
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 26.06.07 09:51. Заголовок: Re:


vintik пишет:

 цитата:
Потом вот такая строка:
If OpenWindow(0, 100, 100, 350, 400, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) And CreateGadgetList(WindowID(0)) она должна писаться в одну строку?

А, тебя насторожило то, что в этой строке две функции разделены оператором "And"?
Сделано это вот для чего: Почти каждая функция после завершения своей работы, возвращает какой-либо результат. Причём он равен нулю если во время работы функции произошла ошибка (например, почему то неудалось открыть окно). Для того чтобы было проще понять, оставлю от имён функций только одну первую букву.
Получилось следующее:
If O And C
Компилятор воспринимает это как
If O>0 And C>0
Из этого следует, что код расположенный между операторами If и EndIf будет выполнен только в том случае, если результат работы этих функций будет больше нуля. Это необходимо для блокировки обращений к окну, в том случае если его не удалось создать.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 183
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 26.06.07 11:30. Заголовок: Re:


Понятно, дело в том, что этих "#PB_Window_....." гаджетов целая куча.
И если их писать в одну строку, то строчка выходит за поле редактора, тем самым усложняя обзор.
Ну я и подумал, что можно продолжать с новой строки, только отступив.
И ... вобщем вижу, что заблуждался

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 275
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 26.06.07 11:42. Заголовок: Re:


vintik пишет:

 цитата:
Ну я и подумал, что можно продолжать с новой строки

Можно и с новой строки. Возмём п примеру такой код:

If OpenWindow(0, 100, 100, 350, 400, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) And CreateGadgetList(WindowID(0))  

Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_CloseWindow
Exit=1
EndIf
Until Exit=1

EndIf
End

Это одна строка.

А вот здесь этот код уже разбит на две строки.
If OpenWindow(0, 100, 100, 350, 400, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)  
If CreateGadgetList(WindowID(0))

Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_CloseWindow
Exit=1
EndIf
Until Exit=1

EndIf
EndIf
End

Как видишь, добавился ешё один оператор If и завершающий его оператор EndIf.
Логика работы программы не изменилась.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 276
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 26.06.07 11:47. Заголовок: Re:


Только что скопировал код через буфер обмена, а он в редакторе расположился в одну строку.
Это что, ещё один глюк форума?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 184
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 26.06.07 12:20. Заголовок: Re:


Работает:
If OpenWindow(0, 100, 100, 350, 400, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)    
If CreateGadgetList(WindowID(0))
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_CloseWindow
Exit=1
EndIf
Until Exit=1
EndIf
EndIf
End

Ты здесь добавил цикл опроса "закрыто ли окно"?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 277
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 26.06.07 13:29. Заголовок: Re:


Ну да.
С помощью функции WaitWindowEvent() узнаём какое произошло событие. Если возвращается число равное константе #PB_Event_CloseWindow , тогда присваеваем переменной Exit значение равное единице (по умолчанию, все переменные обнулены). При этом выполняется условие в стрке Until Exit=1 и работа программы завершается. Если условие не выполняется т. е. в переменной Exit число отличное от единицы, Программа зацикливается между операторами Repeat и Until.
У функции WaitWindowEvent() есть ещё одно важное назначание - она позволяет эканомить процессорное время. Попробуй её заменить на WindowEvent() при этом программа полностью работоспособна.
Получиться следующее:

If OpenWindow(0, 100, 100, 350, 400, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If CreateGadgetList(WindowID(0))
Repeat
Event = WindowEvent()
If Event = #PB_Event_CloseWindow
Exit=1
EndIf
Until Exit=1
EndIf
EndIf
End


Перед запуском этой программы, открой "Деспетчер задач" (Ctrl+Alt+Del). Посмотри как "грузит" систему программа с функцией WaitWindowEvent() и с функцией WindowEvent()

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 185
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 26.06.07 13:48. Заголовок: Re:


Факт на лицо!

Смотрел в Debugger/CPU Monitor

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 278
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 26.06.07 18:25. Заголовок: Re:


А почему ты не русифицировал программу (если конечно это не секрет)?
Мне гораздо удобнее работать с русифицированой программой.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 186
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 26.06.07 20:52. Заголовок: Re:


Так справка на английском.
Кстати, а есть еще какие нибудь ресурсы, по PureBasic?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 279
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 26.06.07 21:45. Заголовок: Re:

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 187
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 26.06.07 22:21. Заголовок: Re:


Читал, что код от старых версий не подходит к 4.0 и вроде есть транслятор.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 280
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 27.06.07 10:08. Заголовок: Re:


vintik пишет:

 цитата:
Читал, что код от старых версий не подходит

К сожалению это правда.
И для того чтобы использовать исходники от версий 3.x, следует их сначала преобразовать с помошью конвертера

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 188
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 27.06.07 23:55. Заголовок: Re:


Спасибо качнул.

Качнул КодАрхив, стал запускать прграмы(приложения), потом некоторые не
смог закрыть.
Alt+F4 не срабатывала, только через заветные три кнопки.
Это считается в порядке вещей?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 281
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 28.06.07 11:32. Заголовок: Re:


Гений Квитали подбросил мне инфу по LPT порту. http://pbasic.spb.ru/phpBB2/viewtopic.php?t=102&postdays=0&postorder=asc&start=30 Сейчас вот разбираюсь.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 282
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 28.06.07 11:40. Заголовок: Re:


vintik пишет:

 цитата:
некоторые не смог закрыть.



Если в программе не предусмотрен код, закрывающий программу, закрыть обычным способом не получится. А какой исходник не хотел закрываться?
Да, кстати, Программы можно ещё "убивать" с помощью кнопки с черепом, которая расположена последней на панели инструментов.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 189
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 28.06.07 13:42. Заголовок: Re:


Игрался с кнопками и заметил, что программа выполняется не последовательно, скачет в теле цикла.
При закрытии окна мессаги "Была нажата кнопка", по плану должна выскочить мессага
("Предупреждение","Вы уверенны что хотите выйти?"), а выводится ("Сообщение","Вы снова нажали на кнопку")
If OpenWindow(0, 100, 100, 350, 400, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) And CreateGadgetList(WindowID(0))  
ButtonGadget(8, 10, 100, 80, 25, "Кнопка")
Repeat
Event = WaitWindowEvent()
Gadget = EventGadget()

If Event=#PB_Event_Gadget And Gadget=8
MessageRequester("Сообщение","Была нажата кнопка")
EndIf

If Event = #PB_Event_CloseWindow
MessageRequester("Предупреждение","Вы уверенны что хотите выйти?")
EndIf

If Event = #PB_Event_CloseWindow
MessageRequester("Сообщение","Тогда нажмите на красный крестик?")
EndIf

If Event = #PB_Event_CloseWindow
MessageRequester("Сообщение","Да да надо повторить")
EndIf

If Event=#PB_Event_Gadget And Gadget=8
MessageRequester("Сообщение","Вы снова нажали на кнопку")
EndIf

If Event = #PB_Event_CloseWindow
Exit=1
EndIf
Until Exit=1
EndIf
End

Пётр пишет:

 цитата:
Гений Квитали подбросил мне инфу

Сейчас тоже гляну.

 цитата:
можно ещё "убивать" с помощью кнопки с черепом


Была рога по графике, на весь экран.
На голубом фоне какачто надпись, когда водиш курсором, то типа ластика в пейнте, голубой фон с
надписью стирается, а под ним черный фон с дугим текстом.
Ну и все стер и точка выйти нелья, только три кнопки спасли, появился рабочий стол с пуриком
в нем я ее и убил.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 283
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 28.06.07 13:48. Заголовок: Re:


Сейчас вот, готовлю третью часть учебника.
Уже написал две программки.
Одна из этих программ - конвертер чисел (HEX/DEC/BIN)
Получилась программа относительно небольшая, 32 строки.
Осталось только описать принцип их работы.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 284
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 28.06.07 14:06. Заголовок: Re:


vintik пишет:

 цитата:
Была прога по графике, на весь экран.

Тогда попробуй нажать на кнопку "AP2"
vintik пишет:

 цитата:
Игрался с кнопками и заметил

Всё совсем не так. Сообщение Предупреждение","Вы уверенны что хотите выйти появится только в том случае если будет в переменную Event, записанно число эквивалентное числу в константе #PB_Event_CloseWindow, а в данный момент там число эквиволентное константе #PB_Event_Gadget .


 цитата:
выводится ("Сообщение","Вы снова нажали на кнопку")

Потому что условие If Event=#PB_Event_Gadget And Gadget=8 выполняется.
Чуть позже, я переделаю эту программу так чтобы было как задумано.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 190
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 28.06.07 15:31. Заголовок: Re:


Прочитал статью про ЛРТпорт, былобы здорово, если бы ее реределать под пурик.
Заглянул в BIOS у меня выставлено так:
I/O Device Configuration 
--------------------------------------------------
Parallel port: Disabled
v Enabled
Auto
--------------------------------------------------
Mode: Output only
Bi – directional
EPP
v ECP
--------------------------------------------------
Base I/O address: v 378
278
--------------------------------------------------
Interrupt: v IRQ 7
--------------------------------------------------
DMA channel: v DMA1
DMA3
--------------------------------------------------
 
EPP режим есть, и порт может работать на прием и на передачу.
С окошками еще разбираюсь, так что сильно не "гони лошадей"
Информация находится во взвешенном состоянии, и нужно немного времени, чтобы все "устаканилось"

ЗЫ: Что то не получилось красиво вывести таблицу с BIOSa

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 191
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 28.06.07 15:52. Заголовок: Re:


Таблица из ВОРДа всавляется не корректно, после блокнота ставится нормально
По окошкам, не совсем понял,
где выполняются окошки из программы, а где с винды(хрюши).
Получается, что MessageRequester("Сообщение","Была нажата кнопка") , это
"хрюшино" окошко???
Ведь мы нигде не задавали ни координат нового окна ни кнопок. Только название окна и
текст в окне.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 285
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 28.06.07 17:33. Заголовок: Re:


Пётр пишет:

 цитата:
Чуть позже, я переделаю эту программу так чтобы было как задумано.


Переделал.
Давай разберёмся, почему код работает не так как нужно?
Всё дело в том что в пределах одного цикла располагаются несколько операторов If с одинаковыми условиями. По этой причине происходит не то что было задумано.
Например, за один виток цикла встречаются 4 одинаковых строки If Event = #PB_Event_CloseWindow и если в переменной Event будет число эквивалентное константе #PB_Event_CloseWindow, код между оператором If и завершающим его оператором EndIf будет выполнен.

Для того чтобы программа в этой ситуации работала как надо, следует организовать счётчик, который будет считать количество нажатий на кнопку и уже в зависимости от результата в этом счётчике, выводить нужное сообщение.
программа должна выглядеть так:
Скрытый текст


Теперь разберёмся что и как работает.
Перед оператором начала цикла Repeat мы присваеваем переменным knopka и closeclose нулевые значания. Это будущие счётчики.

После того как будет нажата кнопка и в строке If Event=#PB_Event_Gadget And Gadget=8 условие будет выполнено, проверяется равна ли переменная нулю. Если да (т. е. это первое нажатие на кнопку) выводится сообщение "Была нажата кнопка" и присваевается переменной knopka значение 1. При последующих нажатиях на эту кнопку, условие If knopka=0 уже не выполняется, поскольку в этой переменной находится число 1 и появится сообщение расположенное после оператора Else.

Примерно тоже самое нужно сделать и с кнопкой "закрыть окно", но поскольку там несколько сообщений, выгоднее использовать не операторы If EndIf а Select Case EndSelect.
Работают эти операторы следующим образом:
Оператор Select запоминает значение переменной (в данном случае это close ), далее это значение поочерёдно сравнивается в операторах Case. Если будет совпадение числа в переменной с числом в одном из операторов Case, будет выполнен код расположеный после этого оперетора и до следующего оператора.
Например, если в переменной число 1, будет выполнен этот код:
MessageRequester("Сообщение","Тогда нажмите на красный крестик?")
close=close+1


вторая строчка этого кода увеличивает значение в переменной на единицу Т. Е. прикаждом нажатии на "крестик" в заголовке окна, будет увеличиватся число в переменной close и будет выполнен код, сначала после Case 0 потом после Case 1 и т. д. Когда в переменной окажется число 3, переменной Exit будет присвоено значение 1 и приграмма закроется.


Насчёт MessageRequester это окно создаёт система. Нужно оно в основном для вывода сообщений. У этой функции есть ещё и флаги
#PB_MessageRequester_YesNo - кнопки да, нет
#PB_MessageRequester_YesNoCancel - кнопки да, нет, отмена
#PB_MessageRequester_Ok - кнопка Ок

Есть ещё флаги
#MB_ICONERROR
#MB_ICONQUESTION
#MB_ICONWARNING
#MB_ICONINFORMATION


Можно например эту функцию записать так:
MessageRequester("Сообщение","Тогда нажмите на красный крестик?",#PB_MessageRequester_Ok|#MB_ICONWARNING )
Должено быть только по одину флагу из первого и второго списка или только из первого списка!
Подробнее можно узнать из справки, в разделе Requester есть описание этой функции.

vintik пишет:

 цитата:
былобы здорово, если бы ее реределать под пурик

Там же есть пример, файл UsingPrinterPort.pb
С его помощью, удалось "поморгать" светодиодами в программаторе.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 194
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 28.06.07 18:21. Заголовок: Re:


Пётр пишет:

 цитата:
Там же есть пример


А что в окошко писать? И что за кнопки, (немецкого переводчика нет).
Вроде светодиодов, как и выходов (D0-D7)должно быть 8, а в окошко входит только 7цифр.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 286
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 28.06.07 18:48. Заголовок: Re:


vintik пишет:

 цитата:
А что в окошко писать

Один байт в десятичном формате (0-255) записывать следует в правое окошко и нажимать под ним кнопку.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 196
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 28.06.07 22:30. Заголовок: Re:


Пётр пишет:

 цитата:
есть пример, файл UsingPrinterPort.pb


Похоже, что в (UsingPrinterPort.pb) что то не так.
Вот эта строчка:
If OpenLibrary(0, "INPOUT32.DLL")
должна высветить гдето надпись "INPOUT32.DLL", а нигде этого не происходит.
И такого текста, пол программы.
А DLL, вытащил из паки, и никаких тебе ошибок, как будто к ней никто и не обращался.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 287
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 29.06.07 11:24. Заголовок: Re:


vintik пишет:

 цитата:
должна высветить где-то надпись "INPOUT32.DLL"

Функция OpenLibrary открывает динамическую библиотеку для последующего использования её подпрограмм. Никакой надписи она не выводит. Можешь посмотреть описание этой функции в разделе Library справки.

vintik пишет:

 цитата:
А DLL, вытащил из паки, и никаких тебе ошибок

А вот это действительно странно!
Поиск библиотек эта функция осуществляет следующим образом:
Сначала производится поиск в той же папке где EXE-шник, а если там отсутствует требуемый файл, он ищется в системной папке (System32). Только я там этот файл тоже не нашёл.
Сейчас спрошу об этом на форуме


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 197
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 29.06.07 11:31. Заголовок: Re:


Поискал у себя, нашел:
C:\WINDOWS\system32

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 288
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 29.06.07 11:41. Заголовок: Re:


А у меня пишет "Поиск не дал результатов".

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 198
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 29.06.07 12:03. Заголовок: Re:


У меня очевидно установилось с какойто программой. Специально не ставил.
Ктати, поищи эту дллку и попадеш в интересную папку, с кучей программ под
СОМ и LPT

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 136 , стр: 1 2 3 4 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 5
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия