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

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

23.02.2023, 19:22. Показов 15103. Ответов 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
12 / 12 / 0
Регистрация: 02.07.2014
Сообщений: 115
08.03.2023, 20:31
Студворк — интернет-сервис помощи студентам
>Да это я уже понял. Но меня, в принципе, пока интересует исключительно Windows, ну и, соответственно, список и описание всех флагов, доступных только для Windows.
Построение вашей фразы однозначно говорит о том, что вы так и не поняли.
Остановитесь и ещё раз перечитайте то, что вам пишут.
Инструмент задуман принципиально так, что бы использующий его не думал о том, под какой системой а на сегодня ещё и на какой архитектуре потом код будет работать.
А вы упорно пишите про Windows.

Исключения естественно возможны. Например вот этот человек пишет много полезных дополнений только под windows
https://www.purebasic.fr/engli... 8&sr=posts

Добавлено через 17 минут
эта ссылка наглядней https://www.purebasic.fr/engli... hp?t=60881
0
63 / 61 / 3
Регистрация: 06.11.2010
Сообщений: 186
Записей в блоге: 1
09.03.2023, 02:31
Цитата Сообщение от useful Посмотреть сообщение
этот человек пишет много полезных дополнений только под windows
Там ссылка либо на тот же список, либо на сайт с платным контентом, где я там и не смог ничего скачать полезного.
0
12 / 12 / 0
Регистрация: 02.07.2014
Сообщений: 115
09.03.2023, 06:52
Цитата Сообщение от AZJIO Посмотреть сообщение
Там ссылка либо на тот же список, либо на сайт с платным контентом, где я там и не смог ничего скачать полезного.
Очень смешно!!!
Платная система, платный компилятор и как он смеет свои разработки тоже делать платными?
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
09.03.2023, 13:51  [ТС]
useful, смешно вам или не смешно, это ваши личные эмоции.
AZJIO прекрасно понимает, что меня интересует прежде всего бесплатный софт, ну вот и исходит в своих рекомендациях именно из этой предпосылки.

Про Windows я "упорно писать" больше не буду, торжествено обещаю

Добавлено через 4 часа 45 минут
AZJIO, всё-таки я решил пока не добавлять никакого стороннего софта, потому что на нынешнем этапе моего знакомства с PureVBasic для написания своих собственных простеньких тренировочных программ на этом ЯП с лихвой хватает встроенных средств. Я просто знаю самого себя и знаю чем, в конечном итоге, оборачивается мой "хватательный рефлекс".

Это всегда выглядит так: понаустанавливал дополнительных программ и плагинов на все случаи жизни, растратил весь кураж на знакомство и обкатку этого софта, а потом возникает классическая ситуация "купил билет, а ехать уже расхотелось"

Добавлено через 9 минут
По этой же причине мне не хочется сейчас отвлекаться и на AutoIt3 тоже.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
09.03.2023, 18:34  [ТС]
А можно как-нибудь изменять размер шрифта всплывающих подсказок?
Хотелось бы сделать его покрупнее, чтобы зрение лишний раз не напрягать.
Миниатюры
Изучение PureBasic с точки зрения новичка  
0
63 / 61 / 3
Регистрация: 06.11.2010
Сообщений: 186
Записей в блоге: 1
09.03.2023, 20:13
Лучший ответ Сообщение было отмечено Power_Basic как решение

Решение

Урощённый вариант

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
EnableExplicit
Global hFont0
#Window = 0
#btn = 0
 
Procedure BalloonTip(WindowID, Gadget, Text$ , hFont = 0)
    Protected ToolTip, Balloon.TOOLINFO
    ToolTip = CreateWindowEx_(0, "ToolTips_Class32", "", #WS_POPUP | #TTS_NOPREFIX, 0, 0, 0, 0, WindowID, 0, GetModuleHandle_(0), 0)
    If hFont
        SendMessage_(ToolTip, #WM_SETFONT, hFont, 0)
    EndIf
    SendMessage_(ToolTip, #TTM_SETMAXTIPWIDTH, 0, 220)
    Balloon.TOOLINFO\cbSize = SizeOf(TOOLINFO)
    Balloon\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
    Balloon\hWnd = GadgetID(Gadget)
    Balloon\uId = GadgetID(Gadget)
    Balloon\lpszText = @Text$
    SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
EndProcedure
 
If OpenWindow(#Window, 0, 0, 300, 200, "Пример", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ButtonGadget(#btn, 10, 10, 100, 30, "Кнопка", 0)
    If LoadFont(1, "Arial", 18)
        hFont0 = FontID(1)
    EndIf
    BalloonTip(WindowID(#Window), #btn, "Вот оно", hFont0)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
1
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
09.03.2023, 20:22  [ТС]
AZJIO, спасибо, буду, не спеша, разбирать этот пример по косточкам

Отдельное спасибо за упрощённый вариант, так мне будет гораздо проще отделить зёрна от плевел

Кстати, и тот гораздо более сложный вариант я тоже уже успел скопировать. Хотя для меня - новичка он пока ещё явно сложноват. Про него-то сначала и написал, что буду разбирать по косточкам
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
09.03.2023, 20:44
Не очень понятно, зачем вам понадобилось увеличить шрифт в подсказках для этой программы. Вас же устраивает шрифт в подсказках у других программ, а если не устраивает, то нужно зайти в настройки системы с сделать масштаб интерфейса 125% или больше.
0
63 / 61 / 3
Регистрация: 06.11.2010
Сообщений: 186
Записей в блоге: 1
09.03.2023, 21:08
Вот как-то я оптимизировал, чтобы дескриптор подсказки получить 1 раз. Если заголовка и иконки не требуется, то дескриптор создаётся один раз. Вот не знаю надо ли его удалять или он уничтожается вместе с родительским окном.

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
EnableExplicit
 
#Font = 0
#Window = 0
Enumeration
    #btn1
    #btn2
EndEnumeration
 
 
Global TipWidth = 222
Global TipTime = 15 * 1000
Global TipStyle = 64
Global hFont
Global TTip
 
Procedure BalloonTip()
    Protected null.w
    Protected TStyle = #TTS_NOPREFIX | #TTS_ALWAYSTIP | #WS_POPUP
    TTip = CreateWindowEx_(#WS_EX_TOPMOST, "tooltips_class32", 0, TStyle, 0, 0, 0, 0, WindowID(#Window), 0, GetModuleHandle_(0), 0)
    SetWindowTheme_(TTip, @null.w, @null.w)
    SendMessage_(TTip, #TTM_SETTIPTEXTCOLOR, GetSysColor_(#COLOR_INFOTEXT), 0)
    SendMessage_(TTip, #TTM_SETTIPBKCOLOR, GetSysColor_(#COLOR_INFOBK), 0)
    SendMessage_(TTip, #TTM_SETMAXTIPWIDTH, 0, TipWidth)
    SendMessage_(TTip, #TTM_SETDELAYTIME, 2, TipTime)
EndProcedure
 
Procedure BalloonTip2(Gadget, Tip$)
    Protected ti.TOOLINFO
    If hFont
        SendMessage_(TTip, #WM_SETFONT, hFont, 0)
    EndIf
    ti\cbSize = SizeOf(ti)
    ti\hInst = GetModuleHandle_(0)
    ti\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
    ti\hwnd = GadgetID(Gadget)
    ti\uId = GadgetID(Gadget)
    ti\lpszText = @Tip$
    SendMessage_(TTip, #TTM_ADDTOOL, 0, ti)
EndProcedure
 
 
If OpenWindow(#Window, 0, 0, 220, 100, "Пример...", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
 
    If LoadFont(#Font, "Arial", 18)
        hFont = FontID(#Font)
    EndIf
    BalloonTip()
 
    ButtonGadget (#btn1, 10, 10, 200, 30, "Открыть")
    BalloonTip2(#btn1, "Открыть окно")
    ButtonGadget (#btn2, 10, 60, 200, 30, "Закрыть")
    BalloonTip2(#btn2, "Закрыть окно")
 
    Repeat
        Select WaitWindowEvent()
            Case #PB_Event_Gadget
                Select EventGadget()
                    Case 1
                        CloseWindow(0)
                        End
                EndSelect
            Case #PB_Event_CloseWindow
                CloseWindow(0)
                End
        EndSelect
    ForEver
EndIf

Power_Basic
Если у кого то зрение хорошее, то чел будет против крупного шрифта. У себя в системе добавь лучше, можно с помощью WindowsFont. У меня этот код использовался в лаунчере и там настройками позволяется регулировать если автор имеет свои задумки, а в стандартном случае, лучше жёстко шрифт не задавать. Вот недавно на форуме чел просто мелкий шрифт включил принудительно, когда я сказал что текст не умещается и можно было бы поля чекбоксов сделать больше, окно позволяет.
1
Эксперт по электронике
6866 / 3289 / 340
Регистрация: 28.10.2011
Сообщений: 12,892
Записей в блоге: 7
09.03.2023, 22:09
Может кому-то пригодится https://learn.microsoft.com/ru... plications
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
10.03.2023, 11:54  [ТС]
Цитата Сообщение от Замабувараев Посмотреть сообщение
Не очень понятно, зачем вам понадобилось увеличить шрифт в подсказках для этой программы. Вас же устраивает шрифт в подсказках у других программ, а если не устраивает, то нужно зайти в настройки системы с сделать масштаб интерфейса 125% или больше.
Цитата Сообщение от AZJIO Посмотреть сообщение
У себя в системе добавь лучше, можно с помощью WindowsFont.
Когда-то давным-давно (в 2004 году или около того) я именно так и поступал, но впоследствии отказался от этой практики. Причина в том, что в некоторых сторонних программах текст начинал выходить за пределы отведённого для него поля и частично отрезаться. Ну или какие-то другие неприятности вылезали, сейчас уже даже не помню, какие именно.

Цитата Сообщение от AZJIO Посмотреть сообщение
Если у кого то зрение хорошее, то чел будет против крупного шрифта.
Да пофиг мне на того чела, поскольку я и есть тот самый единственный-разъединственный чел, который будет юзать мои самодельные проги
Мне самому удобно будет, ну вот и чудненько

Добавлено через 25 минут
Цитата Сообщение от locm Посмотреть сообщение
Может кому-то пригодится
Для моего уровня развития это пока немного рановато
Но если присутствующим на нашем подфоруме профессионалам захочется обсудить вопрос "Предотвращение зависаний в приложениях для Windows", то мне было бы очень интересно и полезно понаблюдать за этим обсуждением.
На правах топикстартера этой ветки могу пригласить сделать это прямо здесь, поскольку тема ветки изначально достаточно широкая и флудная.
0
63 / 61 / 3
Регистрация: 06.11.2010
Сообщений: 186
Записей в блоге: 1
10.03.2023, 15:57
Цитата Сообщение от Power_Basic Посмотреть сообщение
я и есть тот самый единственный-разъединственный чел, который будет юзать мои самодельные проги
В таком случае подсказка не нужна. На F1 прикрути справку .hta (тоже что html, только активный), подсказку по регулярным выражениям.
PureBasic
1
AddKeyboardShortcut(#Window, #PB_Shortcut_F1 , #mHelp)
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
10.03.2023, 18:16  [ТС]
Цитата Сообщение от AZJIO Посмотреть сообщение
Цитата Сообщение от Power_Basic Посмотреть сообщение
я и есть тот самый единственный-разъединственный чел, который будет юзать мои самодельные проги
В таком случае подсказка не нужна. На F1 прикрути справку .hta (тоже что html, только активный), подсказку по регулярным выражениям.
PureBasic
1
AddKeyboardShortcut(#Window, #PB_Shortcut_F1 , #mHelp)
Да нет, это вроде бы не то, что мне нужно. Подсказка должна выскакивать безо всяких нажатий на клавиши. Просто наводим курсор на поле, и выскакивает подсказка, например, "Вставьте сюда регулярное выражение".
Дело в том, что на большом компе (с большим монитором) места на экране много, а вот на крошечном нетбуке очень мало. Поэтому занимать место ещё и под лишние лейблы (они же статики) не хотелось бы. В идеале, на экране должны быть только 3 поля для ввода-вывода текста и 1 кнопка. Наводим курсор на любое из этих полей, и сразу выскакивает крупная подсказка.
Ну или как вариант, можно размещать в этих полях соответствующий "стартовый" текст, который впоследствии удаляем и вместо него вставляем другой. Но всплывающие подсказки всё-таки выглядят гораздо приятнее. Впрочем, как известно, на вкус, на цвет

----------------
Сейчас как раз занимаюсь тем, что разбираю по косточкам ваш код

Добавлено через 16 минут
Иду по пути максимального упрощения

Пока выяснил, что, например, и без этого фрагмента всё прекрасно работает:

PureBasic
1
2
3
4
5
    SetWindowTheme_(TTip, @null.w, @null.w)
    SendMessage_(TTip, #TTM_SETTIPTEXTCOLOR, GetSysColor_(#COLOR_INFOTEXT), 0)
    SendMessage_(TTip, #TTM_SETTIPBKCOLOR, GetSysColor_(#COLOR_INFOBK), 0)
    SendMessage_(TTip, #TTM_SETMAXTIPWIDTH, 0, TipWidth)
    SendMessage_(TTip, #TTM_SETDELAYTIME, 2, TipTime)
И ещё, вроде бы, совершенно безнаказанно удалил из этой строки флаг #TTS_NOPREFIX:
PureBasic
1
Protected TStyle = #TTS_NOPREFIX | #TTS_ALWAYSTIP | #WS_POPUP
Добавлено через 39 минут
Цитата Сообщение от AZJIO Посмотреть сообщение
Вот как-то я оптимизировал, чтобы дескриптор подсказки получить 1 раз. Если заголовка и иконки не требуется, то дескриптор создаётся один раз. Вот не знаю надо ли его удалять или он уничтожается вместе с родительским окном.
Да это пофиг
В любом случае он в памяти мало места занимает.

Добавлено через 46 минут
AZJIO, ну всё, вставил я немного урезанный вариант вашего кода в свой "Тестер регулярных выражений".
Подсказки работают идеально, спасибо!!

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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
EnableExplicit
 
Enumeration FormWindow
  #Window
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_0
  #Font_Window_1
EndEnumeration
 
#Log_of_used_regular_expressions$ = "Лог_использовавшихся_рег_выражений.txt"
 
Global hFont
Global TTip
Define event, DesktopWidth, DesktopHeight
 
Procedure proc_BalloonTip()
  Protected null.w
  Protected TStyle = #TTS_ALWAYSTIP | #WS_POPUP
  
  TTip = CreateWindowEx_(#WS_EX_TOPMOST, "tooltips_class32", 0, TStyle, 0, 0, 0, 0, WindowID(#Window), 0, 
      GetModuleHandle_(0), 0)
EndProcedure
 
Procedure proc_BalloonTip2(Gadget, Tip$)
  Protected ti.TOOLINFO
  
  If hFont
      SendMessage_(TTip, #WM_SETFONT, hFont, 0)
    EndIf
    
  ti\cbSize = SizeOf(ti)
  ti\hInst = GetModuleHandle_(0)
  ti\uFlags = #TTF_IDISHWND | #TTF_SUBCLASS
  ti\hwnd = GadgetID(Gadget)
  ti\uId = GadgetID(Gadget)
  ti\lpszText = @Tip$
  SendMessage_(TTip, #TTM_ADDTOOL, 0, ti)
EndProcedure
 
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 OpenFile (0, #Log_of_used_regular_expressions$, #PB_File_Append )    ; opens an existing file or creates one, if it does not exist yet
;     ReplaceString(str_Text, ".", ",", #PB_String_InPlace)    
    WriteString(0, Regular_Expression$ + #CRLF$, #PB_UTF8)
    CloseFile(0)
  Else
    MessageRequester("Information","Не смог сохранить файл на диске " + #Log_of_used_regular_expressions$)  
  EndIf  
 
  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) + #CRLF$
  Next  
    SetGadgetText(#Editor_Result, Result$)  
EndProcedure
 
Procedure proc_Window_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_0,"Consolas", 18)
LoadFont(#Font_Window_1,"Consolas", 16)
hFont = FontID(#Font_Window_0)
 
ExamineDesktops()
DesktopWidth  = DesktopWidth(0) : DesktopHeight = DesktopHeight(0) 
 
OpenWindow(#Window, 0, 0, DesktopWidth, DesktopHeight, "Тестер регулярных выражений", #PB_Window_SystemMenu) 
 
EditorGadget(#Editor_Regular_Expression, 0, 0, DesktopWidth, DesktopHeight * 0.05, #PB_Editor_WordWrap)
EditorGadget(#Editor_Original_text, 0, DesktopHeight * 0.05, DesktopWidth, DesktopHeight * 0.4, #PB_Editor_WordWrap)
 
;Если текущее разрешение экрана 1920Х1080, добавляем к высоте поля" Результат" 10% от общей высоты экрана. 
EditorGadget(#Editor_Result, 0, DesktopHeight * 0.45, DesktopWidth, DesktopHeight * 0.25 + 
  DesktopHeight * 0.1 * Bool(DesktopHeight = 1080), #PB_Editor_WordWrap)
 
ButtonGadget(#Button_Parse, DesktopWidth - 250, DesktopHeight - 80, 230, 50, "Parse")
SetGadgetFont(#Button_Parse, FontID(#Font_Window_0))
 
CheckBoxGadget(#Checkbox_Flag_1, 20, DesktopHeight - 190, 400, 30, "#PB_RegularExpression_DotAll")
GadgetToolTip(#Checkbox_Flag_1, "'.' соответствует любому символу, включая символы новой строки")
SetGadgetFont(#Checkbox_Flag_1, FontID(#Font_Window_1))
 
CheckBoxGadget(#Checkbox_Flag_2, 20, DesktopHeight - 160, 400, 30, "#PB_RegularExpression_Extended")
GadgetToolTip(#Checkbox_Flag_2, "Символы пробела и комментария '#' игнорируются")
SetGadgetFont(#Checkbox_Flag_2, FontID(#Font_Window_1))
 
CheckBoxGadget(#Checkbox_Flag_3, 20, DesktopHeight - 130, 400, 30, "#PB_RegularExpression_MultiLine")
GadgetToolTip(#Checkbox_Flag_3, "Символы '^' и '$' являются началом и концом строки в многострочном тексте")
SetGadgetFont(#Checkbox_Flag_3, FontID(#Font_Window_1))
 
CheckBoxGadget(#Checkbox_Flag_4, 20, DesktopHeight - 100, 400, 30, "#PB_RegularExpression_AnyNewLine")
GadgetToolTip(#Checkbox_Flag_4, "Принимать 'CR', 'LF', и 'CRLF' как символы новой строки")
SetGadgetFont(#Checkbox_Flag_4, FontID(#Font_Window_1))
 
CheckBoxGadget(#Checkbox_Flag_5, 20, DesktopHeight - 70, 400, 30, "#PB_RegularExpression_NoCase")
GadgetToolTip(#Checkbox_Flag_5, "Сравнение и сопоставление без учета регистра")
SetGadgetFont(#Checkbox_Flag_5, FontID(#Font_Window_1))
 
proc_BalloonTip()
 
proc_BalloonTip2(#Editor_Regular_Expression, "Вставьте сюда регулярное выражение")
proc_BalloonTip2(#Editor_Original_text, "Вставьте сюда исходный фрагмент текста")
proc_BalloonTip2(#Editor_Result, "Здесь будет результат")
 
Repeat
  event = WaitWindowEvent()
  proc_Window_Events(event)
Until event = #PB_Event_CloseWindow
Пока "заточено" только под разрешение экрана 1920*1080 и 1280*720.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
11.03.2023, 13:43  [ТС]
Странно, что флаг #PB_Window_SizeGadget назвали именно так, хотя речь вроде бы идёт вовсе не об изменении размеров какого-то гаджета (контрола, элемента управления), а об изменении размеров самого окна. Не логичнее было бы обозначить его как #PB_Window_SizeWindow?

Или я что-то недопонимаю?

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
Enumeration FormWindow
  #Window_0
EndEnumeration
 
OpenWindow(#Window_0, 0, 0, 600, 400, "", #PB_Window_SystemMenu|#PB_Window_SizeGadget)
 
 
Procedure Window_0_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False
 
    Case #PB_Event_MoveWindow
      Debug "Переместили окно"
      
    Case #PB_Event_SizeWindow
      Debug "Изменились размеры окна"      
 
    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure
 
Repeat
  Event = WaitWindowEvent()
  Window_0_Events(event)
Until Event = #PB_Event_CloseWindow
0
12 / 12 / 0
Регистрация: 02.07.2014
Сообщений: 115
11.03.2023, 18:23
Речь идёт о кнопках или других элементах оформления рамки или заголовка окна инициирующих изменение. Т.е. показывать их или нет.
В устоявшейся терминологии кнопка = гаджет.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
11.03.2023, 18:58  [ТС]
Цитата Сообщение от useful Посмотреть сообщение
Речь идёт о кнопках или других элементах оформления рамки или заголовка окна инициирующих изменение. Т.е. показывать их или нет.
В устоявшейся терминологии кнопка = гаджет.
Мы с вами пока ещё на разных языках говорим.

Давайте попробуем отделить котлеты от мух
Окна, если я ничего не путаю, они и есть окна.
А гаджеты это, опять же если я ничего не путаю, это:

ButtonGadget ButtonImageGadget CalendarGadget
CanvasGadget CheckBoxGadget ComboBoxGadget
ContainerGadget DateGadget EditorGadget
ExplorerComboGadget ExplorerListGadget ExplorerTreeGadget
FrameGadget HyperLinkGadget IPAddressGadget
ImageGadget ListIconGadget ListViewGadget
MDIGadget OpenGLGadget OptionGadget
PanelGadget ProgressBarGadget ScrollAreaGadget
ScrollBarGadget ShortcutGadget SpinGadget
SplitterGadget StringGadget TextGadget
TrackBarGadget TreeGadget WebGadget


Кнопка это, несомненно, гаджет, кто бы спорил.
Но вот каким боком к гаджетам причислены "другие элементы оформления рамки или заголовка окна", этого я не понимаю?
Или же в PureBasic рамка и заголовок окна тоже считаются гаджетами наравне, например, с той же кнопкой?
Или в этом контексте к гаджетам относят и окна тоже?

Если да, тогда понятно почему #PB_Window_SizeGadget это, фактически тот же самый несуществующий #PB_Window_SizeWindow.
0
12 / 12 / 0
Регистрация: 02.07.2014
Сообщений: 115
11.03.2023, 19:20
Берём пример:
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  MessageRequester("Information", "Click to move the Window", 0)
  ResizeWindow(0, 200, 200, #PB_Ignore, #PB_Ignore)   ; Move the window to the coordinate 200,200
  MessageRequester("Information", "Click to resize the Window", 0)
  ResizeWindow(0, #PB_Ignore, #PB_Ignore, 320, 200) ; Resize the window to 320,200
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf
  Until Quit = 1
EndIf
В рамке окна две дополнительных кнопки(гаджеты) развернуть, свернуть.
Но мышью за рамку мы не можем произвольно изменить размер окна, программно при этом тоже можем.
Добавим #PB_Window_SizeGadget
И рамка окна становится дополнительным гаджетом, можем цепляясь за неё менять размер.
Смотрите на gadget более широко, как на приспособление и жизнь станет проще

Добавлено через 6 минут
Я только повторю, что многие понятия могут быть унаследованы например с OS Amiga на мотороловском процессоре.
История PB длинная.
window точно не собственность windows!

Добавлено через 3 минуты
По смотрите пример StatusBar.pb Там прям в правом нижнем углу самый настоящий "гаджет" появляется.
1
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
11.03.2023, 19:34  [ТС]
И снова вопрос относительно устаревшей функции CreateGadgetList() .
Цитата из Справки:
Эта функция больше не нужна. OpenWindow() теперь неявно создает список гаджетов (GadgetList).
Мне вот сейчас понадобилось перебрать все гаджеты, размещённые на моём окне, в цикле ForEach ... Next. Ну и как мне это сделать?

Вот так вот не работает:

PureBasic
1
2
3
ForEach GadgetList()     ; ошибка!
  Debug "Следующий гаджет из списка"
Next
Добавлено через 7 минут
Цитата Сообщение от useful Посмотреть сообщение
Смотрите на gadget более широко, как на приспособление и жизнь станет проще
Спасибо за подробные разъяснения.
Теперь мне всё понятно относительно этого вопроса.
0
12 / 12 / 0
Регистрация: 02.07.2014
Сообщений: 115
11.03.2023, 19:35
вы же в СВОЁМ окне исследуете список гаджетов, вот и организуйте его так как вам удобно, а не цепляйтесь за то, про что написано УСТАРЕЛО.
Вы либо статически каждому присвоили "номер" либо динамически #PB_Any. Ну и соберите их куда хотите массив, список, ...
1
63 / 61 / 3
Регистрация: 06.11.2010
Сообщений: 186
Записей в блоге: 1
12.03.2023, 04:37
Цитата Сообщение от Power_Basic Посмотреть сообщение
понадобилось перебрать все гаджеты
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
 
For i = #Editor_Original_text To #Checkbox_Flag_5
; ...
Если мне надо сгенерировать гаджеты, то иногда добавляю #LastGadget перед EndEnumeration и от него генерирую список. Потом если событие больше или равно #LastGadget, то indexGadget = Event - #LastGadget.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.03.2023, 04:37
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru