PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Улучшение справки


Улучшение справки

Сообщений 1 страница 23 из 23

1

В общем создал тему чтобы отписывать об ошибках Справку. скачал с ru-board последняя ссылка (5.72)

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

Сразу попалась ошибка:

FileSystem\RenameFile.html
"ни чего" - пишется слитно

Ещё проверка орфографии скриптами:

Window3D/index.html
Gadget3D\index.html

имет  -> имеет

MainGuide\history.html
двухкратном   -> двукратном (не критично, можно написать "двойном")

Reference\Explanation.html
инете   -> интернете (минимум сленга)

Material\AddMaterialLayer.html
фотошопе  -> Photoshop`е (не критично, название фирмы пишется как есть)

в функциях Billboard встречается 9 раз:
требуется получить. этот Номер возвращает  (новое предложение должно быть с большой буквы)

часто используется сокращение "т. д." 11 раз с пробелом и 153 раза "т.д." без пробела, я пишу слитно без пробела т.д. т.п. т.е. т.н.

Поиск двойных слов с помощью регулярного выражения

Код:
(?<![А-яЁё])([А-яЁё]{2,})[\t ]+\1(?![А-яЁё])

Gadget\WebGadget.html
С этим Гаджетом могут могут произойти

MainGuide\history.html
25 Июля 2016 : Версия Версия 5.43 LTS

MainGuide\lgpl.html
копию общедоступной библиотеки библиотеки GNU

Mesh\AddMeshManualLOD.html
разных LOD-Сеток для для одной основной Сетки

Reference\ide_debugger.html
X-сервера, или для для удалённой разработки

String\LCase.html
знаками, т.е. 'E' будет будет преобразовано в 'e'.

String\UCase.html
знаками, т.е. 'e' будет будет преобразовано в 'E'.

ListViewGadget()

- SetGadgetItemState(): Выделяет или снимает выделение с указанного элемента.
...
- SetGadgetState(): Делает указанный элемент выделенным (все прочие выделенные элементы теряют этот статус). 'State'- это индекс элемента, если задано -1, не один элемент не будет выделен.

в описании 2 пункта, с одинаковым описанием "выделяет элемент/пункт", это запутывает, SetGadgetItemState не сработал, SetGadgetState работает.

AESEncoder

Пробел для строки и ее завершающий символ

Пространство (место) для помещения строки и её завершающего символа null, нуль-терминированной строки.

во втором примере этот же текст дробится на 2 строки, мне кажется неправильно таким способом комментировать код.

PathRequester
нужен пример с GetHomeDirectory(), чтобы была универсальность, так как C:\ на линуксе нет.

ComboBoxGadget
- SetGadgetState(): Устанавливает для указанного элемента статус выбранного.
на самом деле "Устанавливает указанный пункт выбранным (по индексу)", а указанный элемент выбранный это можно двояко понимать и в большую сторону непонимания, например как то, что комбобокс является активным элементом окна, это тоже выбранный. А чтобы не путаться в терминах, надо разделить элемент окна и пункт внутри элемента окна, а не одним словом "элемент" называть и элемент окна и элемент списка, будь то комбо, листвью, листикон.

PureBasic - Map (Хеш-Карта)
Почему Хеш? Лучше раздел назвать Map (Карта), без PureBasic (и так понятно) и Хеш. Аналогично PureBasic - Array (Массив), PureBasic - List (Связный Список)

MenuItem()

Модификаторы могут комбинироваться с помощью символа "+": "Сохранить Как" + Chr(9) + "Ctrl+Shift+S". На OS X, когда ярлык создан в Меню, нет никакой необходимости вызывать функцию AddKeyboardShortcut() с помощью этого ярлыка.

здесь Shortcut это не ярлык, это быстрые клавиши, то есть работающие только в окне программы и назначаются пунктам меню, чтобы их вызывать. Иногда это можно назвать просто горячими клавишами. Но в контексте горячие клавиши могут означать глобальные, а быстрые клавиши - локальные в окне программы. Если в контексте пишут глобальные горячие клавиши, то те что не глобальные являются быстрыми. Но это точно не понятие ярлыка.

GetJSONMember
Вероятно в примере в последней строке должно быть "z", а не "y".

WriteConsoleData
которая сможет направит эти данные
нет "ь" на конце слова

CreateImageMenu()
пример требует UsePNGImageDecoder() по крайней мере в Linux

CreatePack()
CreatePack#Pack - пропущена скобка

FindString()
Добавить информацию, что #PB_String_NoCase в Linux работает только для английского языка (в регулярных выражениях этой проблемы нет)

Отредактировано AZJIO (15.02.2023 18:40:13)

0

2

AZJIO
добавь в шапку ссылку на актуальный перевод, а то ж не известно какую редачишь..

Fingerprint()
"До регистрации плагина необходимо вызвать UseCRC32Fingerprint()." - До лучше заменить на "Для" ведь "UseCRC32Fingerprint() - Регистрирует плагин CRC32 fingerprint для будущего использования."
или перефразировать как-то так "Перед использованием необходимо вызвать UseCRC32Fingerprint() для регистрации плагина.""

Отредактировано Lin (20.06.2021 22:26:21)

0

3

Кому интересно, я потихоньку ещё добавил кучу ошибок.

0

4

ну и где обновлённая версия?
у меня 5.72 от 02.06.2020

AZJIO написал(а):

нет "ь" на конце слова

на чьём конце?

0

5

newJS написал(а):

ну и где обновлённая версия?

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

newJS написал(а):

на чьём конце?

явно не на конце одушевлённого предмета, к которому можно применить принадлежность "чей". Если после гласных мягкий знак не ставиться, то выбор не большой, всего 2 слова, причём одно из них не может иметь мягкого знака ни в каких склонениях, падежах и каких либо формах использования. Строка выше это и есть строка содержащая ошибку, и предоставлена для поиска по тексту, чтобы было меньше телодвижений при исправлении. Извиняюсь но выглядит вопрос как сарказм.

0

6

AZJIO написал(а):

Надеюсь sergey2400 появится здесь, потому что где ещё обсуждать.

а ты пробовал ему писать в личку на кибере?

AZJIO написал(а):

Извиняюсь но выглядит вопрос как сарказм.

так оно само напрашивалось приколоться

0

7

newJS написал(а):

а ты пробовал ему писать в личку на кибере?

в июне спрашивал: "Пока крайний. Осенью сделаю обновление, сейчас не до этого..."

Отредактировано Lin (01.10.2021 20:49:49)

0

8

EventlParam(), EventwParam()

Код:
            x = EventlParam() & $FFFF  ; Не-полновесное слово (16 Bits)
            y = EventlParam()>>16        ; Полновесное слово  (16 Bits)

Надо так:

Код:
            x = EventlParam() & $FFFF  ; Младшее слово (16 бит)
            y = EventlParam()>>16        ; Старшее слово  (16 бит)

Здесь одно длинное число типа Quad (8 байтов) состоит из двух чисел по 4 байта Long. Визуально напишем в виде числа 55552222, здесь старшее слово 5555, а младшее 2222, чтобы взять старшее слово надо сдвинуть число вправо на 16 байт и получим 5555 уже в младшем регистре, а чтобы взять младшее слово, надо 5555 обнулить превратив в 0000 и получится 00002222 т.е. 2222. Вот смысл операции, хранить два числа рядом в одной ячейке и взять любое из них битовыми операциями. Можно также сделать структуру POINT и взять из неё x.l или y.l. Хоть это и не привычно, причём тут слово (тип Word), но в любой литературе именно так описывают эти термины. В WinAPI есть макросы MAKEWORD объединяет два числа High и Low и макросы LoWord, HiWord для взятия одного из чисел двойного числа.

Отредактировано AZJIO (08.02.2022 02:38:43)

0

9

SizeOf

Как функция времени компиляции, SizeOf(x) присваивается константе

Я бы перефразировал: Как функция выполняющаяся во время компиляции ... То есть смысл этого текста в том, чтобы дать понять пользователю, что функция будет работать не во время выполнения программы, а на этапе компиляции вычислит размер необходимый для этого типа данных и вернёт число, как если бы это была константа, типа Size=#sizew.

Помните понятие Runtime? Ну что-то похожее видимо имелось ввиду в "compile time". То есть когда говорят что происходит в режиме Runtime подразумевается во время выполнения программы, соответственно  "compile time" - во время выполнения компиляции.

Отредактировано AZJIO (04.03.2022 19:48:20)

0

10

AZJIO написал(а):

EventlParam(), EventwParam()

они устарели, рекомендуют использовать WinCallback(hWnd, Msg, wParam, lParam)

AZJIO написал(а):

Визуально напишем в виде числа 55552222, здесь старшее слово 5555, а младшее 2222

Код:
n=55552222
m=n&$FFFF
Debug m; = 43230
b=n>>16
Debug b; = 847


m=5555
b=2222
n=m+b<<16
Debug n; = 145626547

именно так винда пакует\распаковывает два числа
а макросы в РВ не работают, или я не понял как ими пользоваться
да и зачем вызывать функцию если можно напрямую получить

а так винда rgb() пакует
rn+gn<<8+bn<<16
или
rn+gn*256+bn*65536
а так распаковывает rgba(), а rgb() три первых

Код:
c=RGBA(34, 177, 248, 55)
r=c&$FF
g=c>>8&$FF
b=c>>16&$FF
a=c>>24&$FF

0

11

newJS
Я говорю о правильности перевода и использую числа для того? чтобы показать смысл, а не для того чтобы вставить его в пример PureBasic и оно в точности показало, для этого числа должны быть шестнадцатеричными и большими, тогда ещё можно показать визуально, а c десятеричными это не сработает, так как после сдвига регистра, который происходит в бинарном виде, в десятеричном будет не одно и тоже.
Да и причём тут "устаревшая", на форуме события WinCallback многие используют в основном цикле как события, чуть ли не каждый второй пример, в том числе есть и примеры с EventlParam(), EventwParam().

0

12

В описании SetGadgetItemState для ListIconGadget я не увидел флаг что-то типа UnChecked, проверил "0", работает.

DatabaseQuery()

PostgreSQL использует другой синтаксис: символы $ 1, $ 2

$1, $2 - тут пишется слитно

————————————————————————————————————————————

В "Структуры" упоминается про "динамические объекты" возможно стоит упомянуть что под этим подразумевается, например строки, списки, карты, массивы, то есть как я понимаю объекты, которые не определяют размер структуры как SizeOf, а содержат только указатели на данные. То есть когда мы очищаем структуру с помощью ClearStructure(), она должна сначала очистить контент на который ссылается указатель структуры, то есть вызвать FreeList(), FreeMap(), FreeArray() и т.д., а потом уже заполнить нулями собственно элемент структуры - указатель, иначе в памяти останется список, не смотря что указатель в структуре был затёрт. В то же время в описании  ResetStructure() из сказаного я понимаю что для динамических объектов используется ClearList(), ClearMap(), ReDim. То есть динамические объекты для структуры является всё то, что указывается с помощью указателя.

ReadByte()
В примере комментарий, но понятно что не построчный, а побайтовый.

Код:
ReadByte(0) ; Построчный просмотр содержимого файла

Резидентные объекты
что бы - пишется вместе

Встроенный отладчик
Структур считается
со запуска
byref (не по ссылке, а по указателю)

CheckFilename

Возвращает не нулевое значение, если имя файла не содержит недопустимые символы

двойное отрицание, проще написать "Возвращает не нулевое значение, если имя файла допустимое", а ещё хот и это выглядит неофициально, но кратко "Возвращает #True, если имя файла правильное"

Preferences
В этом разделе по работе с ini-файлами стоит упомянуть некоторое поведение:
1. ExaminePreferenceKeys перечисляет все ключи, даже если они имеют одинаковое имя, в отличии от ReadPreference...(), которое читает первое попавшееся. То есть если ini-файл предназначен только для чтения, то можно не заботиться о разности имён ключей.
2. Игнор пробелов: пробелы перед и после ключа игнорируются. Для значения ситуация иная, перед значением игнорируются, после значения не игнорируются. Чтобы не игнорировать перед значением, надо использовать кавычку, естественно потом её удалять после прочтения.
3. Так как кодировка UTF-8, то ключ может состоять из любого символа, даже пробела если он не первый и не последний, то есть понятие ключ определяется началом некого символа отличным от пробела и до первого символа "=", а всё что после "=" является значением до конца строки (до \r или до \n). Это позволяет использовать ключ как носитель информации при использовании ExaminePreferenceKeys, как бы 2 ячейки разделённых символом "=".
4. Если в строке отсутствует "=", то при использованиии ExaminePreferenceKeys вся строка является ключём, то есть с помощью PreferenceKeyName() можно перечислить строки в файле.

Отредактировано AZJIO (16.11.2022 05:22:28)

0

13

Всем привет! Привет AZJIO и newJS. Ваши соображения прочёл. Сейчас в учебном отпуске... занялся исправлением справки.

0

14

Sergey2400
После работы могу ещё накидать идей, так как пришлось переводить SpiderBasic, в принципе там тоже самое, но я со 2 страницы понял и уже перевёл несколько, а потом сравнивал.
И кстати примеры можно переработать. Если будет желание править, то я и идеи для улучшенных примеров накидаю, точнее можно не только их перевести - переменные с французского на англ., но и немного изменить, а где то и добавить в виду отсутствия.

Я тоже скоро в отпуск, может пересекёмся отпусками и будет продуктивнее.

Отредактировано AZJIO (31.01.2023 17:18:20)

0

15

AZJIO
Ну, у меня ещё неделя отпуска. Почти всё что Ты написал - я исправил.
Единственно: "В описании SetGadgetItemState для ListIconGadget я не увидел флаг что-то типа UnChecked, проверил "0", работает."
С этим надо разбираться, в прошлый раз в "Гаджеты" я многое дописывал (в английской справке не было),  наверно не всё ещё.

У меня работа очень напряжная, всю творческую составляющую убивает, каждая смена - аврал, между сменами не успеваю восстанавливаться (я начальник смены по автоматизации на ТЭЦ), ещё Университет...
Это я к тому, что примеры можно готовить (собирать инфу), но в этот раз внедрить все не успею.

0

16

Sergey2400
Если бы предупредил, то я бы специально подготовил примеры, А то я даже пару ошибок не стал отписывать, потому что думал что подвижек не будет.

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

Код:
EnableExplicit
UseGIFImageDecoder()

DataSection
	icon:
	IncludeBinary "images" + #PS$ + "icon.gif"
EndDataSection

If OpenWindow(0, 0, 0, 220, 100, "Пример...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	If CatchImage(0, ?icon)
    ButtonImageGadget(0, 10, 10, 30, 30, ImageID(0))
	EndIf

	Repeat
	Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Классический GUI (в OpenWindow). Переменная Event там ни к чему. Константы тоже именованные. Перечисление Enumeration ладно опустим.

Код:
#btn0 = 0
#Window = 0

If OpenWindow(#Window, 0, 0, 220, 100, "Пример...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	ButtonGadget(#btn0, 10, 60, 200, 30, "Сообщение")

	Repeat
    Select WaitWindowEvent()
    	Case #PB_Event_Gadget
        Select EventGadget()
        	Case #btn0
            MessageRequester("", "Событие")
        EndSelect
    	Case #PB_Event_CloseWindow
        CloseWindow(#Window)
        End
    EndSelect
	ForEver
EndIf

Пример для ResizeGadget

Код:
#Window = 0
Enumeration Gadget
	#edr0
	#btn0
EndEnumeration

Define ww = 220
Define wh = 100

If OpenWindow(#Window, 0, 0, ww, wh, "Измени размер окна", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
	WindowBounds(0, ww, wh, #PB_Ignore, #PB_Ignore)

	EditorGadget(#edr0, 10, 10, ww - 20, wh - 60)
	ButtonGadget(#btn0, 10, wh - 40, ww - 20, 30, "Кнопка")

	Repeat
    Select WaitWindowEvent()
    	Case #PB_Event_SizeWindow
        wh = WindowHeight(#Window) 
        ww = WindowWidth(#Window) 
        ResizeGadget(#edr0, #PB_Ignore, #PB_Ignore, ww - 20, wh - 60) 
        ResizeGadget(#btn0, #PB_Ignore, wh - 40, ww - 20, #PB_Ignore) 
    	Case #PB_Event_CloseWindow
        CloseWindow(#Window)
        End
    EndSelect
	ForEver
EndIf

Пример для EventDropFiles и/или EnableGadgetDrop

Код:
#Window = 0
Enumeration Gadget
	#str0
	#edr0
EndEnumeration

If OpenWindow(#Window, 0, 0, 500, 200, "Кинь сюда файл", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

	StringGadget(#str0, 10, 10, 500 - 20, 30, "")
	EditorGadget(#edr0, 10, 50, 500 - 20, 140)
	
	EnableGadgetDrop(#str0, #PB_Drop_Files, #PB_Drag_Copy)
	EnableGadgetDrop(#edr0, #PB_Drop_Files, #PB_Drag_Copy)

	Repeat
    Select WaitWindowEvent()
    	Case #PB_Event_GadgetDrop ; событие перетаскивания
        Select EventGadget()
        	Case #str0 ; гаджеты, которые получили событие перетаскивания файлов/папок
            If Not FindString(EventDropFiles(), Chr(10))
            	SetGadgetText(#str0, EventDropFiles())
            EndIf
        	Case #edr0
            SetGadgetText(#edr0, EventDropFiles())
        EndSelect
    	Case #PB_Event_CloseWindow
        CloseWindow(#Window)
        End
    EndSelect
	ForEver
EndIf

TailleFichier в примере FileSize, все имена функций и переменных поменять на англоязычные

ReadAsciiCharacter, ReadByte, ReadCharacter, ReadDouble, ReadFloat, ReadInteger, ReadLong, ReadQuad, в примерах в комментарии "Построчный просмотр содержимого файла", на самом деле везде разный, посимвольный, побайтовый.

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

В "Структуры" можно добавить пример список списков структур, обрабатывая в двух вложенных циклах. Я подобное делал в одной из своих программ (поиск дубликатов), что показывает сложную вложенность структур. В общем я не один раз пытался там найти пример структур со списками и каждый раз не находил и говорил себе надо бы этот пример добавить. Самое интересное что доступ к элементу выглядел так a()\b()\x и это работало и даже сортировка по вложенному списку работала.

Reference\links.html - Полезные ссылки - там теперь ссылка на русский форум не работают, думаю надо указать этот форум и раздел киберфорума по PureBasic.

Я делаю дерево, куда включил ключевые слова, разные темы и доп.инфу. Пробуйте
В связи с этим вопрос, как сделать, например в AutoIt3 ключевые слова сортированы, то есть в одном списке указаны ВСЕ ключевые слова, а не группами: основные, разные, прочие, другие. То есть Global, If, For, Goto, Include, Data - все они являются ключевыми словами и не разделяются на важные и не важные. И удобство что когда я кликнул ключевое слова в "Указатель", то на вкладке "Содержание" автоматически открывается раздел ключевых слов и можно просматривать там другие варианты, а не возвращаться на общую страницу.и искать там, то есть сразу в дереве кликать любые.

Отредактировано AZJIO (02.02.2023 07:38:31)

0

17

В разделе "FileSystem" слишком много используется однотипных примеров перечисления файлов. Например в GetExtensionPart() - получить расширения, лучше сделать пример одной строкой, например:

Код:
Debug GetExtensionPart("C:\file.txt") ; вернёт txt

Можно в качестве примеров в одной из функций ExamineDirectory(), NextDirectoryEntry(), DirectoryEntryType(), DirectoryEntryName(), FinishDirectory() использовать другие варианты поиска, например рекурсивный:

Код:
Procedure FileSearch(List Files.s(), dir.s, mask.s = "")
  Protected name.s, id
  
  If Right(dir, 1) <> #PS$
    dir + #PS$
  EndIf

  id = ExamineDirectory(#PB_Any, dir, "")
  If id
    While NextDirectoryEntry(id)
      name = DirectoryEntryName(id)
      If name = "." Or name = ".."
        Continue
      EndIf
      If DirectoryEntryType(id) = #PB_DirectoryEntry_Directory ; если путь является папкой, то
        FileSearch(Files(), dir + name + "\", mask) ; рекурсивный вызов во вложенную папку
      ElseIf (Not Asc(mask) Or GetExtensionPart(name) = mask) And AddElement(Files())
        Files() = dir + DirectoryEntryName(id)
      EndIf
    Wend
    FinishDirectory(id)
  EndIf
EndProcedure

Define NewList Files.s()
FileSearch(Files(), GetTemporaryDirectory(), "exe") ; пустая строка чтобы найти все файлы

ForEach Files()
  Debug Files()
Next

Специально сделал полноценный кроссплатформенный пример сократив до минимума функционал.

ExamineMouse() - пример отсюда у меня просто завис и не реагирует. Через диспетчер задач снимал процесс.

Отредактировано AZJIO (14.02.2023 12:51:23)

0

18

newJS написал(а):

n=55552222
m=n&$FFFF
Debug m; = 43230
b=n>>16
Debug b; = 847

m=5555
b=2222
n=m+b<<16
Debug n; = 145626547

Открываем калькулятор программист и пишем  десятичное число 55552222 и видим старшие биты слова и младшие открываем повторно калькулятор и вводим младшие биты слова =50198(деястичное) и старшие биты слова=84(деястичное), я к тому что вы изначально уже десятичное число возомнили как два слова старшее и младшие пополам хотя число(55552222 =32 бита) но не с такими значениями бит. :no:

Отредактировано Sergeihik (14.02.2023 18:20:25)

0

19

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

Sergey2400
Для функции RunProgram() можно добавить примеры популярных команд как я делал в AutoIt3, это было для новичка в неком смысле справочник по запуску справки, ссылок и т.д. Например:

Код:
; === Windows ===
RunProgram("hh.exe", Chr(34) + "help.chm::/html/index.htm" + Chr(34), "") ; открыть справочный файл
RunProgram("explorer.exe", "/select," + #PB_Compiler_File, "") ; открыть проводник выбрав файл

 ; Сжатие файла "Boot.ini" в архив "Archive.7z" с паролем "Мой пароль"
 #q$ = Chr(34)
 RunProgram(GetUserDirectory(#PB_Directory_Programs) + "7-Zip\7z.exe",
            "a " + #q$ + "C:\ProgramData\PureBasic\Archive.7z" + #q$ + " -p" + #q$ + "Мой пароль" + #q$ + " -mhe -mx9 " + #q$ + "C:\Boot.ini" + #q$, "")

; === Linux ===
tmp$ = "/usr/share/help/ru/myprog/index.html"
RunProgram("xdg-open", tmp$, GetPathPart(tmp$)) ; открыть справочный файл

GetUserDirectory

Код:
Debug GetUserDirectory(#PB_Directory_Programs)
Debug GetUserDirectory(#PB_Directory_Desktop)
Debug GetUserDirectory(#PB_Directory_Downloads)
Debug GetUserDirectory(#PB_Directory_Documents)
Debug GetUserDirectory(#PB_Directory_Videos)
Debug GetUserDirectory(#PB_Directory_Musics)
Debug GetUserDirectory(#PB_Directory_Pictures)
Debug GetUserDirectory(#PB_Directory_Public)
Debug GetUserDirectory(#PB_Directory_ProgramData)
Debug GetUserDirectory(#PB_Directory_AllUserData)

или так

Код:
For i = 0 To 9
	Debug GetUserDirectory(i)
Next

Отредактировано AZJIO (15.02.2023 13:32:28)

0

20

у Серёги экзамены на работе, сказал что где то в марте продолжит, уж больно объект ответственный
предложил Серёге айпишные примеры добавить, он согласился
а чё народ скажет?
или таки их отдельно?
пингвиноводов в расчёт не беру
например Len() и lstrlen(), здесь встроенная просто оболочка

AZJIO написал(а):

Да и причём тут "устаревшая", на форуме события WinCallback многие используют в основном цикле как события, чуть ли не каждый второй пример, в том числе есть и примеры с EventlParam(), EventwParam().

открой нерусскую справку, там это написано, в Серёгином переводе это по русски написано
я тоже эти старые функции использовал, но это не отменяет Федины рекомендации

Sergeihik написал(а):

Открываем калькулятор программист

ты не понял о чём я написал
я писал о том как винда пакует числа, тот же RGB(), wParam, lParam они тоже могут быть упакованы, например сразу обе координаты мыши в одном параметре

AZJIO написал(а):

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

тоже сталкивался, задолбишся искать

0

21

Может лучше новую тему создать "обсуждение справки"? Чтобы разделить общение от логов. Просто мы сейчас, задай я вопрос про айпишники, наговорим на 5 страниц, потом Сергей будет читать это всё ненужное обсуждение, чтобы найти в них логи для правки.

Left

Возвращает указанное число символов, считая от начала (слева) строки.

Возвращает строку заданной длины, считая от начала строки (слева).
В комментариях можно добавить, что строка не увеличивается если указано число больше длины строки.

Random
целочисленное значение.
Эта фраза не даёт понимание используемого типа переменной. Я понимаю integer, а "целочисленное" это может быть Long, Integer, Quad. Например я хочу задать значение Quad и думаю, есть ли смысл, если функция приведёт значение к Integer, тогда я задаю максимальное Integer.

Отредактировано AZJIO (04.03.2023 08:47:24)

0

22

Код:
Repeat
  ...
Until <expression> [или Forever]

У меня в справке: эта функция повторяет цикл до тех пор, пока <expression> не станет истинным...
Такое описание запутывает. Лучше упростить до примерно такого: если <expression> истинно, то происходит выход из цикла.
То же самое касается While-Wend

0

23

Webarion написал(а):

Такое описание запутывает.

Мне казалось что я это уже говорил, но нет. Вот буквально сегодня просматривая очередной Until (Until Event = #PB_Event_CloseWindow) мне показалось что идеальный бы формулировкой для меня было что-то в виде
"Until 0" и "While 1" - бесконечный цикл.
То есть эта короткая фраза показывает что подвыражение для этих двух циклов для одного и того же действия неодинаковы, точнее инвертированы. Если это откладывается в память как и одно из значений подвыражения, то для другого становится понятным что оно инвертировано. Например в AutoIt3 нет Repeat и там бесконечный цикл записывается как "While 1", поэтому у меня стойкое восприятия по поводу логики с While, но вот с Until я постоянно перечитываю логику подвыражения, с трудом выворачивая запутанную формулировку в голове.
В итоге я за то, чтобы было две формулировки:

Если <expression> истинно, то происходит выход из цикла. "Until 0" и "While 1" - бесконечный цикл.

причём последняя формулировка была бы в обоих описаниях в Until и While.
Кстати, вот из справки AutoIt3

Если <expression> равно True - выход из цикла
Если <expression> равно False - выполнить ещё раз операторы <statements>

Ещё у меня 3 кнопки на панели инструментов справки. Решил добавить кнопку "Параметры", так как она появляется справа и в меню имеет пункт "Скрыть вкладки". Так как часто код не вмещается в экран по ширине и есть возможность убрать дерево и это место будет занято окном текста описания функций, а некоторые тексты многостраничные (структуры и описания работы с IDE).

ReadUnicodeCharacter, ReadString, WriteByte, ReadWord, WriteDouble, WriteCharacter, WriteQuad, WriteLong, WriteInteger, WriteFloat, WriteWord, WriteUnicodeCharacter, WriteStringN, WriteString, ReadLong, ReadQuad, ReadInteger, ReadFloat, ReadByte, ReadCharacter, ReadAsciiCharacter

Код:
If CreateFile(0, "Test.txt") ; Открывает существующий файл или создайте новый, если он не существует

CreateFile() не открывает, он только создаёт пустой файл.  Существующий будет превращён в пустой файл.

FileSize

Код:
        Case -1
            Reponse$ = "Файл не существует"

объект (файл/каталог) не существует

Отредактировано AZJIO (18.09.2023 20:21:06)

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Улучшение справки