С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/48: Рейтинг темы: голосов - 48, средняя оценка - 4.67
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443

Изучение PureBasic с точки зрения новичка

23.02.2023, 19:22. Показов 13951. Ответов 124
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здесь буду задавать вопросы, которые, на мой взгляд, не заслуживают создания отдельной ветки. Ну просто чтобы не плодить кучу тем, не слишком полезных для подавляющего большинства.

Сейчас приступил к изучению "PureBasic - A Beginners Guide" в переводе Станислава Будинова. К сожалению, это книга эпохи версии 4.00.Там довольно подробно рассматриваются функции, содержащиеся в библиотеке OnError Library, а именно: GetErrorNumber(), GetErrorDescription(), GetErrorLineNR() и GetErrorModuleName().
Правильно ли я понимаю, что это уже полный анахронизм, и сейчас всю отладку рекомендуется производить в самом отладчике, поскольку он теперь (на современных компьютерах) стал очень быстрым, и нужда в этих функциях уже полностью отпала?

И кроме того, функция CreateGadgetList() тоже уже устарела, потому что список добавляемых на форму гаджетов создаётся теперь автоматически подобно коллекции Controls в VB?

P.S. Сначала собирался озаглавить эту ветку вот так: "Вопросы новичка, приступившего к изучению PureBasic", но движок форума по какой-то причине цензурирует слово "вопросы". Пришлось как-нибудь перефразировать, чтобы обойтись без этого слова. Получилось не так хорошо, как было задумано, но всё-таки относительно близко к первоначальному варианту.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2023, 19:22
Ответы с готовыми решениями:

Чего не хватает учебнику языкси.рф с точки зрения новичка?
Доброй ночи! Расскажите, пожалуйста, о вашем опыте восприятия контента учебника языкси.рф: что понравилось, что не очень, с чего лучше...

Если два метода выполняют одно и то же - с точки зрения программы, но разное - с точки зрения логики?
void killCh(BCell cKiller, BCell cVictim){ cVictim.setChessman(cKiller.getChessman()); cKiller.setChessman(null); ...

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

124
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
03.03.2023, 16:37  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от useful Посмотреть сообщение
Тогда примите как факт, что за 20 с лишним лет устоялось всё, что автор смог унифицировать для разных систем.
Т.е. грубо говоря это не "костыли". Это как говорится не баг а фича
Ну мы же с вами жаргонное словечко "костыли" вовсе не в пренебрежительном смысле используем, правда? Совсем наоборот! Это, так сказать, творчество широких народных масс. Так называемая, инициатива снизу

Цитата Сообщение от useful Посмотреть сообщение
А если нужно, как в Windows, то весь(ну или как минимум много) winapi доступен из языка.
Да вроде бы в любом диалекте бейсика можно полноценно использовать WinApi. Ну по крайней мере, во всех, с которыми я когда-нибудь хоть как-то взаимодействовал. А именно, VB, VBA, PowerBasic и FreeBasic.
Ну разве что только в ZX-Spectrum бейсике такая возможность отсутствовала
0
12 / 12 / 0
Регистрация: 02.07.2014
Сообщений: 114
03.03.2023, 16:42
Вы меня не поняли. Вы выбрали инструмент в основе которого кроссплатформенность и это его главное преимущество перед другими, а удобство его меряете своими представлениями "only windows"
Именно поэтому в вашем исполнении "костыль" звучит в пренебрежительном смысле.
0
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 184
Записей в блоге: 1
03.03.2023, 16:50
Power_Basic
Если полностью ориентироваться на Windows, то можно посмотреть ещё на AutoIt3. Там большинство WinAPI просто уже разработаны как готовые функции, не надо их заставлять работать гугля флаги, там под каждой например из 150 функций ListView есть уже готовый пример. Отсутствуют типы, данные сами преобразуются в нужный тип, который требует функция. Под каждую тему автоматизации есть готовые функции с кучей флагов, больше чем воображение. При открытии файлов автоматически определяется кодировка, например FileRead() читает файл в переменную одним вызовом, без необходимости открывать дескриптор, закрывать, читать флаги BOM, строить выбор от флага или при отсутствии флага.
У меня был свой путь перехода к PureBasic и до сих пор если мне надо быстро сварганить обработку файлов, мне легче делать на AutoIt3. Чтобы на PureBasic для меня было также легко, мне надо все функции AutoIt3 написать на PureBasic, сделать библиотеку pbi, подключить её как инклуд. Но, к примеру если у меня получилась функция одна из 300, к примеру WinGetHandle, то если посмотреть её в AutoIt3, у неё в 2 раза мощней функционал, она позволяет задать получение дескриптора по регулярному выражению для заголовка, по размерам окна и некоторым другим критериям и одновременным суммированием этих свойств.
0
12 / 12 / 0
Регистрация: 02.07.2014
Сообщений: 114
03.03.2023, 16:54
Если вы захотите что то предложить по устранению костыльности, то добро пожаловать, но при этом вы предложите автору решение которое соберётся и будет работать как минимум похоже в mac(cocoa-gui),win(winapi-gui),lin(gtk2-gui,gtk3-gui,qt5-gui) из одного исходника. Да ещё и на разных архитектурах.
0
Эксперт по электронике
6531 / 3160 / 333
Регистрация: 28.10.2011
Сообщений: 12,406
Записей в блоге: 7
03.03.2023, 17:00
Цитата Сообщение от AZJIO Посмотреть сообщение
Отсутствуют типы, данные сами преобразуются в нужный тип
Больше вероятность допустить ошибку.
Тип variant нужен не часто, а его повсеместное использование не самая лучшая идея.

Цитата Сообщение от AZJIO Посмотреть сообщение
примеру WinGetHandle, то если посмотреть её в AutoIt3, у неё в 2 раза мощней функционал
AutoIt предназначен для автоматизации и с этой задачей он хорошо справляется. Но для других задач может оказаться не лучшим решением. В общем, ЯП выбирают под задачу.
1
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
03.03.2023, 17:31  [ТС]
Цитата Сообщение от useful Посмотреть сообщение
Вы меня не поняли. Вы выбрали инструмент в основе которого кроссплатформенность и это его главное преимущество перед другими, а удобство его меряете своими представлениями "only windows"
Ну вы же сами упомянули WinApi, ну вот я и рассуждаю, исходя из этого.

Цитата Сообщение от useful Посмотреть сообщение
Именно поэтому в вашем исполнении "костыль" звучит в пренебрежительном смысле.
Ну если старательно пытаться отыскать чёрную кошку в тёмной комнате, тогда вы её там рано или поздно обязательно найдёте

Цитата Сообщение от AZJIO Посмотреть сообщение
Power_Basic
Если полностью ориентироваться на Windows, то можно посмотреть ещё на AutoIt3. Там большинство WinAPI просто уже разработаны как готовые функции, не надо их заставлять работать гугля флаги, там под каждой например из 150 функций ListView есть уже готовый пример. Отсутствуют типы, данные сами преобразуются в нужный тип, который требует функция. Под каждую тему автоматизации есть готовые функции с кучей флагов, больше чем воображение. При открытии файлов автоматически определяется кодировка, например FileRead() читает файл в переменную одним вызовом, без необходимости открывать дескриптор, закрывать, читать флаги BOM, строить выбор от флага или при отсутствии флага.
У меня был свой путь перехода к PureBasic и до сих пор если мне надо быстро сварганить обработку файлов, мне легче делать на AutoIt3. Чтобы на PureBasic для меня было также легко, мне надо все функции AutoIt3 написать на PureBasic, сделать библиотеку pbi, подключить её как инклуд. Но, к примеру если у меня получилась функция одна из 300, к примеру WinGetHandle, то если посмотреть её в AutoIt3, у неё в 2 раза мощней функционал, она позволяет задать получение дескриптора по регулярному выражению для заголовка, по размерам окна и некоторым другим критериям и одновременным суммированием этих свойств.
Мне это не нужно
Мой главный ЯП это PowerBasic, и мне его с лихвой хватает для удовлетворения подавляющего большинства моих потребностей. К сожалению, это уже "мёртвый" язык, прекративший своё развитие 11 лет назад в связи с кончиной его главного разработчика Боба Зейла. Там уже никогда не будет х64.
Вот именно для редчайших случаев, когда мне потребуется именно х64, мне и нужен какой-нибудь дополнительный язык. Я попробовал FreeBasic, не понравилось. Слишком сложно для любителя, программирующего что-нибудь один раз в 2 года
Ну и пусть этим резервным языком (с возможностью писать программы для х64) будет PureBasic, почему нет?
Здесь на форуме имеется прекрасный Учитель, настоящий эксперт в этом диалекте уважаемый locm, который уже несколько лет помогает мне разбираться с WinApi. Ну а второй мой Учитель по WinApi это, несомненно, The trick. Но это уже взгляд со стороны Визуального бейсика. Так что у меня здесь идеальные условия для изучения.

Ну а вы мне уже вторую неделю сватаете AutoIt3. Ну не хочу я туда "переселяться". Не в обиду вам это говорю. Как там у классика говорится, я другому отдана и буду век ему верна

Добавлено через 5 минут
Цитата Сообщение от useful Посмотреть сообщение
Если вы захотите что то предложить по устранению костыльности, то добро пожаловать, но при этом вы предложите автору решение которое соберётся и будет работать как минимум похоже в mac(cocoa-gui),win(winapi-gui),lin(gtk2-gui,gtk3-gui,qt5-gui) из одного исходника. Да ещё и на разных архитектурах.
Не хотелось бы мне продолжать этот пустой разговор. Ну замените слово "костыль", которое я употребил в ироническом смысле, на "самостоятельное творческое усовершенствование", ну вот и все сразу будут довольны.

Добавлено через 3 минуты
Цитата Сообщение от locm Посмотреть сообщение
Больше вероятность допустить ошибку.
Тип variant нужен не часто, а его повсеместное использование не самая лучшая идея
Именно так. Даже в VB настоятельно рекомендуют избегать Variant-ов по причине замедления скорости работы и увеличения расхода памяти.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
03.03.2023, 19:08  [ТС]
Ура! Моя первая законченная полноценная программа на PureBasic готова!

Тестер регулярных выражений

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

#PB_RegularExpression_DotAll : '.' соответствует любому символу, включая символы новой строки.
#PB_RegularExpression_Extended : Символы пробела и комментария '#' игнорируются.
#PB_RegularExpression_MultiLine : Символы '^' и '$' являются началом и концом строки в многострочном тексте.
#PB_RegularExpression_AnyNewLine: Принимать 'CR', 'LF', и 'CRLF' как символы новой строки.
#PB_RegularExpression_NoCase : Сравнение и сопоставление без учета регистра.
Пока жёстко выбрал самые вроде бы оптимальные.

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
EnableExplicit
 
Enumeration FormWindow
  #Window_Main
EndEnumeration
 
Enumeration FormGadget
  #Editor_Original_text
  #Editor_Regular_Expression
  #Editor_Result
  #Button_Parse
EndEnumeration
 
Enumeration FormFont
  #Font_Window_Main_0
EndEnumeration
 
Define event
 
Procedure proc_Parse()
  Define Original_text$, Regular_Expression$, Result$
  Define Found, i
  Dim Result$(0)  
  
  Original_text$      = GetGadgetText(#Editor_Original_text)
  Regular_Expression$ = GetGadgetText(#Editor_Regular_Expression)  
;   #PB_RegularExpression_DotAll    : '.' соответствует любому символу, включая символы новой строки.
;   #PB_RegularExpression_Extended  : Символы пробела и комментария '#' игнорируются.
;   #PB_RegularExpression_MultiLine : Символы '^' и '$' являются началом и концом строки в многострочном тексте.
;   #PB_RegularExpression_AnyNewLine: Принимать 'CR', 'LF', и 'CRLF' как символы новой строки.
;   #PB_RegularExpression_NoCase    : Сравнение и сопоставление без учета регистра.
 
  If CreateRegularExpression(1, Regular_Expression$, 
      #PB_RegularExpression_DotAll|#PB_RegularExpression_MultiLine|#PB_RegularExpression_AnyNewLine)
    Found = ExtractRegularExpression(1, Original_text$, Result$())
    If Not Found
      MessageRequester ("", "Соответствий регулярному выражению " + Chr(34) +
        Regular_Expression$ + Chr(34) + " не найдено! ")
      End
    EndIf
  Else
    Debug RegularExpressionError()
  EndIf  
 
  FreeRegularExpression(1)
 
  For i = 0 To ArraySize(Result$())
    Result$ + Result$(i) + #CRLF$
  Next  
    SetGadgetText(#Editor_Result, Result$)  
EndProcedure
 
Procedure proc_Window_Main_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False
 
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_Parse 
          proc_Parse()
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure
 
LoadFont(#Font_Window_Main_0,"Consolas", 14)
 
OpenWindow(#Window_Main, 0, 0, 600, 400, "", #PB_Window_SystemMenu)
EditorGadget(#Editor_Original_text, 0, 0, 600, 125, 
  #ES_MULTILINE|#WS_VSCROLL)
GadgetToolTip(#Editor_Original_text, "Вставьте исходный фрагмент текста")
SetGadgetFont(#Editor_Original_text, FontID(#Font_Window_Main_0))
 
EditorGadget(#Editor_Regular_Expression, 0, 125, 600, 50, 
  #ES_MULTILINE|#WS_VSCROLL)
GadgetToolTip(#Editor_Regular_Expression, "Вставьте регулярное выражение")
SetGadgetFont(#Editor_Regular_Expression, FontID(#Font_Window_Main_0))
 
EditorGadget(#Editor_Result, 0, 175, 600, 200, 
  #ES_MULTILINE|#WS_VSCROLL)
GadgetToolTip(#Editor_Result, "Здесь будет результат")
SetGadgetFont(#Editor_Result, FontID(#Font_Window_Main_0))
 
ButtonGadget(#Button_Parse, 500, 374, 100, 25, "Parse")
SetGadgetFont(#Button_Parse, FontID(#Font_Window_Main_0))
 
Repeat
  event = WaitWindowEvent()
  proc_Window_Main_Events(event)
Until event = #PB_Event_CloseWindow
Экранчик специально маленький, потому что программа должна работать не только на моём большом компе, но и на моём же крошечном нетбуке.

Кстати, как сделать так, чтобы программа запускалась в полноэкранном режиме на любом разрешении экрана, и при этом все гаджеты сохраняли свои пропорции?
Вложения
Тип файла: zip Regular_expression_tester.zip (102.2 Кб, 11 просмотров)
0
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 184
Записей в блоге: 1
04.03.2023, 00:17
Цитата Сообщение от Power_Basic Посмотреть сообщение
Ну а вы мне уже вторую неделю сватаете AutoIt3.
Значит я забыл об этом, так как наоборот не хотел упустить возможность не сообщить об этом. Ранее я думал что перешёл на настоящий язык (да PureBasic хорош), но в процессе изучения видя картину уже с осознанием обоих языков я прихожу к выводу что я из PureBasic хочу сделать AutoIt3. Спрашиваю на оф.форуме, а почему нет подборок готовых функций, ведь новичок придя в PureBasic захочет сразу писать программы и постепенно углубляться в знания, самому автору для привлечения это выгодно. То есть делая некую отдельную справку с готовыми функциями уже написанными на PureBasic, тот же WinAPI привлёк бы шторм пользователей. По сути AutoIt3, это то что сделали из языка С++ в угоду простоты. Я думал что мои знания изучения AutoIt3 ушли впустую переходя на другой язык, но в итоге я фактически изучал WinAPI, который даже в C++такой же, те же структуры, те же сообщения. И по факту если я что либо хочу написать для PureBasic из WinAPI, я просто открываю инклуды AutoIt3 и смотрю какими функциями написан код, чтобы просто сплагиатить его на PureBasic.
Цитата Сообщение от Power_Basic Посмотреть сообщение
программирующего что-нибудь один раз в 2 года
ну это же как раз случай AutoIt3.

Когда отвечаешь не воспринимай это как лично для тебя, мне бывает интересно высказаться как отчёт сравнения двух языков. На форуме AutoIt3 я пишу такой же отчёт о PureBasic, чтобы люди не знающие его осознавали что их ждёт в другом языке.
0
Эксперт по электронике
6531 / 3160 / 333
Регистрация: 28.10.2011
Сообщений: 12,406
Записей в блоге: 7
04.03.2023, 01:15
Цитата Сообщение от AZJIO Посмотреть сообщение
То есть делая некую отдельную справку с готовыми функциями уже написанными на PureBasic, тот же WinAPI привлёк бы шторм пользователей.
Они есть. Библиотеки Droopy, PBOSL и другие в прошлом были очень популярны. http://www.purearea.net/pb/english/userlibs.php
После появления модулей, код публикуется в виде исходников. В основном на официальном форуме.

Цитата Сообщение от AZJIO Посмотреть сообщение
По сути AutoIt3, это то что сделали из языка С++ в угоду простоты.
Не совсем понял как связанны С++ и AutoIt3? Это вообще разные языки с разным назначением и функционалом.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
04.03.2023, 13:02  [ТС]
Цитата Сообщение от AZJIO Посмотреть сообщение
Цитата Сообщение от Power_Basic Посмотреть сообщение
программирующего что-нибудь один раз в 2 года
ну это же как раз случай AutoIt3.
Подразумевалась реализация какого-то действительно серьёзного замысла. Когда месяца 2-3 кряду, даже просыпаясь по ночам, что-то мысленно программируешь

Цитата Сообщение от AZJIO Посмотреть сообщение
На форуме AutoIt3 я пишу такой же отчёт о PureBasic, чтобы люди не знающие его осознавали что их ждёт в другом языке.
Да я посмотрел по ссылке. Вижу, что вы на том форуме очень серьёзный авторитет. Больше всего меня удивило, что там в той ветке в достаточно свежих постах упоминается "мой" PowerBasic. Честно говоря, я был уверен, что в русскоязычных кругах остался один-единственный по какой-то причине пока ещё не вымерший мамонт, и это я

Кроме того, почитал информацию по AutoIt3 в интернете, посмотрел несколько видео, посвящённых ему на ютубе. Ну да, выглядит очень привлекательно особенно для автоматизации рутинных задач в Windows. Очень интересны возможности, реализуемые с помощью утилиты Au3Info.

Ну да, скачаю, установлю, попробую. Тем более, что это, как я понял, абсолютно бесплатный софт.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
04.03.2023, 19:31  [ТС]
Ну вот, добавил возможность играть флагами:

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
EnableExplicit
 
Enumeration FormWindow
  #Window_Main
EndEnumeration
 
Enumeration FormGadget
  #Editor_Original_text
  #Editor_Regular_Expression
  #Editor_Result
  #Button_Parse
  #Checkbox_Flag_1
  #Checkbox_Flag_2
  #Checkbox_Flag_3
  #Checkbox_Flag_4
  #Checkbox_Flag_5
EndEnumeration
 
Enumeration FormFont
  #Font_Window_Main_0
  #Font_Window_Main_1
EndEnumeration
 
Procedure proc_Parse()
  Define Original_text$, Regular_Expression$, Result$
  Define Found, i, Flag_1, Flag_2, Flag_3, Flag_4, Flag_5
  Dim Result$(0)  
  
  Original_text$      = GetGadgetText(#Editor_Original_text)
  Regular_Expression$ = GetGadgetText(#Editor_Regular_Expression)  
;   #PB_RegularExpression_DotAll    : '.' соответствует любому символу, включая символы новой строки.
;   #PB_RegularExpression_Extended  : Символы пробела и комментария '#' игнорируются.
;   #PB_RegularExpression_MultiLine : Символы '^' и '$' являются началом и концом строки в многострочном тексте.
;   #PB_RegularExpression_AnyNewLine: Принимать 'CR', 'LF', и 'CRLF' как символы новой строки.
;   #PB_RegularExpression_NoCase    : Сравнение и сопоставление без учета регистра.
  
  If GetGadgetState(#Checkbox_Flag_1) = #PB_Checkbox_Checked 
    Flag_1 = #PB_RegularExpression_DotAll
  EndIf
  
  If GetGadgetState(#Checkbox_Flag_2) = #PB_Checkbox_Checked 
    Flag_2 = #PB_RegularExpression_Extended
  EndIf
  
  If GetGadgetState(#Checkbox_Flag_3) = #PB_Checkbox_Checked 
    Flag_3 = #PB_RegularExpression_MultiLine
  EndIf  
  
  If GetGadgetState(#Checkbox_Flag_4) = #PB_Checkbox_Checked 
    Flag_4 = #PB_RegularExpression_AnyNewLine
  EndIf  
  
  If GetGadgetState(#Checkbox_Flag_5) = #PB_Checkbox_Checked 
    Flag_5 = #PB_RegularExpression_NoCase
  EndIf  
 
  If CreateRegularExpression(1, Regular_Expression$, Flag_1|Flag_2|Flag_3|Flag_4|Flag_5)
    Found = ExtractRegularExpression(1, Original_text$, Result$())
    If Not Found
      MessageRequester ("", "Соответствий регулярному выражению " + Chr(34) +
        Regular_Expression$ + Chr(34) + " не найдено! ")
      End
    EndIf
  Else
    Debug RegularExpressionError()
  EndIf  
 
  FreeRegularExpression(1)
 
  For i = 0 To ArraySize(Result$())
    Result$ + Result$(i) + Space(5)
  Next  
    SetGadgetText(#Editor_Result, Result$)  
EndProcedure
 
Procedure proc_Window_Main_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False
 
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_Parse 
          proc_Parse()
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure
 
Define event
 
LoadFont(#Font_Window_Main_0,"Consolas", 14)
LoadFont(#Font_Window_Main_1,"Consolas", 12)
 
OpenWindow(#Window_Main, 0, 0, 1710, 910, "Тестер регулярных выражений", #PB_Window_SystemMenu)
 
EditorGadget(#Editor_Regular_Expression, 0, 0, 1710, 60, #PB_Editor_WordWrap)
GadgetToolTip(#Editor_Regular_Expression, "Вставьте регулярное выражение")
SetGadgetFont(#Editor_Regular_Expression, FontID(#Font_Window_Main_0))
 
EditorGadget(#Editor_Original_text, 0, 60, 1710, 340, #PB_Editor_WordWrap)
GadgetToolTip(#Editor_Original_text, "Вставьте исходный фрагмент текста")
SetGadgetFont(#Editor_Original_text, FontID(#Font_Window_Main_0))
 
EditorGadget(#Editor_Result, 0, 400, 1710, 330, #PB_Editor_WordWrap)
GadgetToolTip(#Editor_Result, "Здесь будет результат")
SetGadgetFont(#Editor_Result, FontID(#Font_Window_Main_0))
 
ButtonGadget(#Button_Parse, 1470, 850, 230, 50, "Parse")
SetGadgetFont(#Button_Parse, FontID(#Font_Window_Main_0))
 
CheckBoxGadget(#Checkbox_Flag_1, 20, 740, 360, 30, "#PB_RegularExpression_DotAll")
GadgetToolTip(#Checkbox_Flag_1, "'.' соответствует любому символу, включая символы новой строки")
SetGadgetFont(#Checkbox_Flag_1, FontID(#Font_Window_Main_1))
 
CheckBoxGadget(#Checkbox_Flag_2, 20, 770, 360, 30, "#PB_RegularExpression_Extended")
GadgetToolTip(#Checkbox_Flag_2, "Символы пробела и комментария '#' игнорируются")
SetGadgetFont(#Checkbox_Flag_2, FontID(#Font_Window_Main_1))
 
CheckBoxGadget(#Checkbox_Flag_3, 20, 800, 360, 30, "#PB_RegularExpression_MultiLine")
GadgetToolTip(#Checkbox_Flag_3, "Символы '^' и '$' являются началом и концом строки в многострочном тексте")
SetGadgetFont(#Checkbox_Flag_3, FontID(#Font_Window_Main_1))
 
CheckBoxGadget(#Checkbox_Flag_4, 20, 830, 360, 30, "#PB_RegularExpression_AnyNewLine")
GadgetToolTip(#Checkbox_Flag_4, "Принимать 'CR', 'LF', и 'CRLF' как символы новой строки")
SetGadgetFont(#Checkbox_Flag_4, FontID(#Font_Window_Main_1))
 
CheckBoxGadget(#Checkbox_Flag_5, 20, 860, 360, 30, "#PB_RegularExpression_NoCase")
GadgetToolTip(#Checkbox_Flag_5, "Сравнение и сопоставление без учета регистра")
SetGadgetFont(#Checkbox_Flag_5, FontID(#Font_Window_Main_1))
 
Repeat
  event = WaitWindowEvent()
  proc_Window_Main_Events(event)
Until event = #PB_Event_CloseWindow
Вроде бы работает исправно. Немного непривычно работать без контекстного меню по ПКМ.

И ещё потом макросы планирую применить для "однородных" фрагментов кода. Они на них как-будто сами напрашиваются
0
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 184
Записей в блоге: 1
05.03.2023, 00:02
Может вам это (RegExp) посмотреть? Или более надёжный в некоторых случаях его AutoIt3 версию...

Цитата Сообщение от locm Посмотреть сообщение
Не совсем понял как связанны С++ и AutoIt3?
Ну люди писали на C++, потом вдруг им пришла идея превратить свои достижения в простую форму, то есть как в редакторе открываешь файл и он показывает текст, фактически они написанное на С++ превратили в модуль для вызова команд. Код написан хорошо, работает быстро, да синтаксис бейсиковый, а под капотом работает код С++, хотя понятие код там уже не существует, но качественно написанное и оптимизированное как на С++, а не раздутый С# или ещё что нибудь.
1
05.03.2023, 00:38

Не по теме:

Цитата Сообщение от AZJIO Посмотреть сообщение
под капотом работает код С++
В смысле что интерпретатор AutoIt написан на С++?
Это не имеет значения. Никаких преимуществ AutoIt это не дает.

Цитата Сообщение от AZJIO Посмотреть сообщение
а не раздутый С# или ещё что нибудь.
Учитывая размер exe файла создаваемого в AutoIt и скорость его работы, у С# в этом плане преимущество как по скорости так и по размеру.

0
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 184
Записей в блоге: 1
05.03.2023, 01:26
Цитата Сообщение от locm Посмотреть сообщение
у С#
Если AutoIt написать на С#, то скорость думаю не будет выше, и размер меньше, и к этому прибавится привязка к версии .NET Framework. Скорость отдельно взятой функции при том функционале не будет хуже чем у С#. Через время стала понятна стратегия, если функция выполняет мелкие действия, то скорость не важна, например найти окно с помощью регулярного выражения, это будет выполнено быстрее чем пользователь моргнёт, так что пользователь не успеет почувствовать что где-то была задержка. А при обработке текста с помощью регулярного выражения текст будет обработан с той же скоростью, что и в PureBasic, а потому что код C++ под капотом будет работать также быстро. Поэтому на весах у PureBasic кроссплатформенность, написание плагов, а у AutoIt3 готовый набор функций на все случаи жизни без необходимости изобретать велосипед.
Открыл я предложенный вами выше сайт и скачал несколько комплектов autoitx3, Droopy, PureFILE, COMatePLUS. Поюзал первое впечатление, не так как если нашёл жемчужину, набор каких повторяющихся ненужных неоптимизированных функций. autoitx3 из комплекта AutoIt3, давненько я смотрел, можно ли использовать в своих задачах, ну во первых если мы грузим её (dll) в память, то проще тогда писать на AutoIt3, и там вырезано много интересного и на Linux это не работает, плюсов особо нет. PureFILE повторяет функции PureBasic, Droopy либо повторяет функции PureBasic, либо набор WinAPI, которых и так полно как примеров, либо аналог функций реестра от ts-soft написанный получше. COMatePLUS работа с объектами там изучать и изучать, в AutoIt3 получил объект и используешь методы, там примеры готовые есть, целые разделы фунrций IE, Excel, Word , а на форумах можно найти примеры с проводником и т.д.
0
05.03.2023, 01:43

Не по теме:

Цитата Сообщение от AZJIO Посмотреть сообщение
Если AutoIt написать на С#, то кроме скорость думаю не будет выше, и размер меньше
Я не о том на чем написан AutoIt, а про то что по сравнению с С# и C++, AutoIt проигрывает как по скорости работы так и по размеру исполняемого файла.

Цитата Сообщение от AZJIO Посмотреть сообщение
потому что код C++ под капотом будет работать также быстро
Скрипт выполняется очень медленно. Если разработчики так хотели интерпретатор, а не компилятор, нужно было транслировать скрипт в байт-код и выполнять его. Это ускорило бы работу. Но имеем то что имеем - построчная интерпретация, что очень медленно.

Цитата Сообщение от AZJIO Посмотреть сообщение
а у AutoIt3 готовый набор функций на все случаи жизни
Не соглашусь.
Функции конечно есть, но писать скрипты сложно. Нет ни типов данных, не говоря про такую элементарную вещь как структуры. Допустить ошибку очень легко, а найти ее проблематично. В AutoIt нет инструментов по тестировании и отладке приложений.
Пока скрипт небольшой, это не сильно мешает, но когда размер кода составляет тысячи и десятки тысяч строк, отсутствие нормальной IDE и инструментов для отладки и тестирования, заставляет тратить гораздо больше времени чем если код был на упомянутых C++ и C#, для которых как с IDE так и инструментами полный порядок.

Цитата Сообщение от AZJIO Посмотреть сообщение
Droopy либо повторяет функции PureBasic, либо набор WinAPI, которых и так полно как примеров, либо аналог функций реестра от ts-soft написанный получше.
Какие функции нужны?
Например мне нужно работать с железом и WinAPI. В этом плане у PB преимущество перед AutoIt. Как минимум проще работать с WinAPI функциями и структурами.
Проще отлаживать приложения.

0
62 / 60 / 3
Регистрация: 06.11.2010
Сообщений: 184
Записей в блоге: 1
05.03.2023, 02:43
Цитата Сообщение от Power_Basic Посмотреть сообщение
Вроде бы работает исправно
У меня экран 1280, хорошо что в предыдущем примере увидел кнопку, а то думаю поля для данных есть, а где кнопка для выполнения. Если размер окна приложения не регулируется, то получаешь размеры экрана ExamineDesktops() и используешь в полях размера окна и элементов окна, типа "x - 6, (y - 40) / 2". Если есть ресайз, тогда при запуске он должен сработать и подстроить элементы под текущий размер окна. Минимальный размер окна 1024/600 у нетбука, нерегулируемое окно больше этого размера будет вызывать проблемы для пользователей.

Цитата Сообщение от locm Посмотреть сообщение
Скрипт выполняется очень медленно.
У меня в программах PureBasic практически нигде не выигрывает. Да, если мы поставим счётчики на скорость операции, то мы скажем да, с момента нажатия кнопки до завершения операции в проге на AutoIt3 выполнил на 30 миллисекунд, а PureBasic за 3 миллисекунды. Но кому это интересно из реальных пользователей? Они будут смотреть на функционал. Единственная программа в которой заметно это "генератор паролей", там сложные математические функции с большими числами, поэтому в PureBasic при изменении одной буквы функционал мгновенно пересчитывает не вызывая задержек, а в AutoIt3 где-то 0,3-0,5 сек задержка, то есть если я в реальном времени буду вводить текст, то я вижу как в поле результата тормозит операция пересчёта и даже не даёт мне вводить буквы, поэтому я сделал кнопку "Пересчитать" и отключил вычисление в реальном времени. В остальных прогах худшим могло бы быть поиск файлов, но из-за хорошей оптимизации и основной причиной задержки доступ к диску, функция тоже работает одинаково. А остальные переписанные проги не имеют никаких скоростных преимуществ, только кроссплатформенность в плюсе.

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

Цитата Сообщение от locm Посмотреть сообщение
Какие функции нужны?
Специально не угадаешь, недавно нужно было создать временный файл и в AutoIt3 есть функция _TempFile(), я принципиально гуглю на оф.форуме "Temp File" и "Tmp File", результатов нет или найдено но в другом контексте. Вот написал сам. У меня была функция поиска файлов по маске, я до сих пор не сделал аналог, вот очередная проба с поддержкой регвыр, но предыдущая у меня имела возможность игнора папок, инверсию результатов, то есть искать кроме указанного в маске, причём режим wildcard корявый при его использовании он распространяется и на папки, в комплекте вынес во внешнюю функцию корректор маски предотвращающий неправильную маску/фильтр введённую пользователем, то есть коррекция принятых внешних параметров, например маска "*|*.txt|*.log", то есть перед первым разделителем звёздочка, что принуждает искать все файлы, то остальные это лишь часть всех файлов, а значит откидываем уточнения и маска "все файлы", вот подробнее.
1
Эксперт по электронике
6531 / 3160 / 333
Регистрация: 28.10.2011
Сообщений: 12,406
Записей в блоге: 7
05.03.2023, 15:21
Цитата Сообщение от AZJIO Посмотреть сообщение
У меня в программах PureBasic практически нигде не выигрывает.
Значит ваши программы не требовательны к скорости выполнения.
Некоторые из моих приложений грузят все ядра процессора на 100% и все равно кажется что программа выполняется медленно.

Цитата Сообщение от AZJIO Посмотреть сообщение
Но кому это интересно из реальных пользователей?
Представьте что у пользователя есть фоновое приложение которое постоянно или периодически производит некоторое вычисления. Есть разница будет ли при этом длительное время загружен проц на 100% или 1%? В ноуте это сэкономит заряд аккумулятора и он не будет шуметь из-за высоких оборотов вентилятора.

Цитата Сообщение от AZJIO Посмотреть сообщение
Как пример возьмём тестер регулярных выражений обсуждаемый здесь
Это приложение не требующее больших вычислительных ресурсов.
Есть вот такой синтетический тест PI.zip
Даже предположить не могу насколько дольше он будет выполнятся на AutoIt.
Меньшая скорость выполнения при той же загруженности процессора, это не только большее время ожидания, но и больший нагрев компа (в ноутах еще и меньшее время автономной работы), больше шума от вентиляторов и больше счет за электричество.
1
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
05.03.2023, 15:23  [ТС]
Цитата Сообщение от AZJIO Посмотреть сообщение
Может вам это (RegExp) посмотреть? Или более надёжный в некоторых случаях его AutoIt3 версию...
Ну да, очень полезные программы, спасибо.
На самом деле, регулярные выражения это вообще одна из моих любимейших тем. Есть в них мощь и... какая-то магия

Цитата Сообщение от AZJIO Посмотреть сообщение
У меня экран 1280, хорошо что в предыдущем примере увидел кнопку, а то думаю поля для данных есть, а где кнопка для выполнения.
Да, я решил отказаться от совместимости программы с нетбуком и дальнейшие "игры" с этой программой продолжу только на большом компе. Здесь у меня разрешение экрана либо 1920х1080, либо 1280х720. Оперативно переключаюсь на укрупнение с помощью утилиты nircmd.exe, когда что-то мелкое требуется разглядеть. Есть такая программа Laitis, с помощью которой можно "разговаривать" с компьютером. Ну вот и командую ему время от времени: "Экран!", он запускает эту утилиту и она переключает между двумя этими разрешениями.

Цитата Сообщение от AZJIO Посмотреть сообщение
Если размер окна приложения не регулируется, то получаешь размеры экрана ExamineDesktops() и используешь в полях размера окна и элементов окна, типа "x - 6, (y - 40) / 2".
А, ну да, понятно. Короче говоря, перебираем все контролы на Форме в цикле и для каждого из них вычисляем новую координату левого верхнего угла и новые габариты.

Цитата Сообщение от AZJIO Посмотреть сообщение
Если есть ресайз, тогда при запуске он должен сработать и подстроить элементы под текущий размер окна.
А это как?! Что подразумевается под термином Resize?
Может быть это имеет отношение к той настройке компилятора, о которой в справочной системе говорится вот так:

Включить поддержку DPI Aware в исполняемом файле (Enable DPI Aware Executable) (Только для Windows)
Этот параметр включает поддержку DPI при создании исполняемого файла. Это означает, что графический интерфейс, созданный в PureBasic, будет автоматически масштабироваться, если DPI экрана превышает 100%.
Большая часть процесса окажется незаметной, но необходимо разобраться с некоторыми случаями, такими как пиксельные гаджеты (ImageGadget, CanvasGadget и т. д.).


Цитата Сообщение от AZJIO Посмотреть сообщение
Минимальный размер окна 1024/600 у нетбука,
У моего нетбука 800×480 пикселей при диагонали 7 дюймов

Цитата Сообщение от AZJIO Посмотреть сообщение
нерегулируемое окно больше этого размера будет вызывать проблемы для пользователей.
За пользователей можно не беспокоиться, поскольку я и есть единственный пользователь абсолютно всех своих программ
0
Эксперт по электронике
6531 / 3160 / 333
Регистрация: 28.10.2011
Сообщений: 12,406
Записей в блоге: 7
05.03.2023, 16:07
Цитата Сообщение от Power_Basic Посмотреть сообщение
Что подразумевается под термином Resize?
Изменение размера окна мышкой или кнопками в заголовке.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
05.03.2023, 20:06  [ТС]
Цитата Сообщение от locm Посмотреть сообщение
Значит ваши программы не требовательны к скорости выполнения.
Некоторые из моих приложений грузят все ядра процессора на 100% и все равно кажется что программа выполняется медленно.
Ну да, это и для меня знакомая ситуация. Поэтому даже само определение "скриптовый язык" уже заведомо вызывает недоверие и отталкивает.

Цитата Сообщение от locm Посмотреть сообщение
Представьте что у пользователя есть фоновое приложение которое постоянно или периодически производит некоторое вычисления. Есть разница будет ли при этом длительное время загружен проц на 100% или 1%? В ноуте это сэкономит заряд аккумулятора и он не будет шуметь из-за высоких оборотов вентилятора.
Вот-вот-вот, как раз моя ситуация с моим нетбуком. Это ASUS EEE PC 4G (701).
4G это объём встроенного SSD, который уже невозможно увеличить.
ОЗУ: изначально было 512 МБ, расширил до 2 гигов.
Процессор: 900 МГц Intel Celeron_M ULV 353[6], работающий на частоте 630 МГц. То есть производитель намеренно урезал частоту процессора, чтобы нетбук не перегревался и для экономии ресурса батареи.
С помощью сторонней утилиты я его "разгоняю" до штатной частоты, то есть до 900 МГц.
Заменить штатный процессор невозможно, он впаян в материнскую плату.

Покупал в 2008 или в 2009 году. Изначально там была Win_XP. Сейчас чудом впихнул туда полноценную семёрку (х32). Для этого приходится использовать внешний HD с объёмом 40 ГБ, врочем, это сильно избыточно. Как сильно избыточен и нынешний объём ОЗУ (2 ГБ). А вот как раз частоты процессора сильно не хватает даже в "разогнанном" состоянии.

Мало того, последнее время запускаю этот нетбук дистанционно с планшета, лёжа под одеялом
Кстати, мой первый вариант тестера рег. выражений
Изучение PureBasic с точки зрения новичка
был частично написан именно в режиме "из-под одеяла", потому и разрешение экрана там такое скромное

А программа, связывающая двух этих "друзей" по Wi-Fi жрёт процессор очень сильно. В таком режиме он всегда загружен именно на 100%. Несколько раз полностью слетала винда по причине сильных перегрузок. Но у меня всё хорошо заархивировано, переустанавливать ничего не приходится. Просто заливаю архивную копию на HD вместо бракованного варианта.

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

Цитата Сообщение от locm Посмотреть сообщение
Меньшая скорость выполнения при той же загруженности процессора, это не только большее время ожидания, но и больший нагрев компа (в ноутах еще и меньшее время автономной работы), больше шума от вентиляторов и больше счет за электричество.
Да, да, да, именно так!

Добавлено через 8 минут
Цитата Сообщение от locm Посмотреть сообщение
Цитата Сообщение от Power_Basic Посмотреть сообщение
Что подразумевается под термином Resize?
Изменение размера окна мышкой или кнопками в заголовке.
Да нет, не похоже. AZJIO явно подразумевал что-то другое. Мышкой-то и кнопками мы действуем сами, а он говорил о чём-то, что должно, как я понял, срабатывать автоматически при запуске:

Цитата Сообщение от AZJIO Посмотреть сообщение
Если есть ресайз, тогда при запуске он должен сработать
Добавлено через 3 часа 47 минут
А что, уже совсем отказались от твипов? Я смотрю, все размеры в PureBasic вроде бы исключительно в пикселях. Если да, то это отлично. А то много лишних проблем и путаницы из-за них всегда было. Ну у меня, по крайней мере
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2023, 20:06
Помогаю со студенческими работами здесь

Изучение функция стандартной библиотеки для новичка
Здравствуйте! Поделитесь опытом: каким образом надо изучать функции стандартных библиотек С++. Может, надо читать какие-либо книги (книги,...

С точки зрения экономики
||||"]Ты пришла на вечеринку с друзьями и видишь симпатичного парня. Подходишь к нему и говоришь, что с тобой классно в постели. ...

С точки зрения закона
Поделитесь опытом, как лучше сделать. Регистрировался кто нибудь, как ООО или как нибуть ещё? И вообще стоит ли? /' border='0'...

Точки зрения на фигуру
Здравствуйте, прошу помочь с решение задачи 1) Нужно построить фигуру с помощью матрицы которая во вложении с помощью numpy и matplotlib ...

C точки зрения професcионала.
Существует сайт palazzo.su который я взялся и создать и продвинуть. На мой субъективный взгляд, сайт вполне готов для выскакивания на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru