PureBasic - форум

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

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


Вы здесь » PureBasic - форум » OffTop » Программа поиска и выбора констант API


Программа поиска и выбора констант API

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

1

обе 86\64 в одном архиве, примерно пол метра
https://disk.yandex.ru/d/AEB2_pqU7BrR8A

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

пока версия 0.0, может что вылезет
https://forumupload.ru/uploads/0009/ae/28/416/t170608.png

0

2

newJS
Был бы удобен поиск констант не только по первым символам.

Вот, кстати, "конкурент" https://www.manhunter.ru/releases/1570_ … r_1_1.html

0

3

И ещё баг - если папка программы не текущая, программа не может загрузить dll-ки из library (решение - для загрузки использовать полный путь).

0

4

newJS
1. Вроде полезная прога, зачем её в раздел "Оффтоп" выкладывать? "PureBasic для Windows" вроде больше подходит
2. Просто интересно, х64 зачем?
3. library5.dll, library6.dll - улыбнули
4. Имхо вкладки "Настройки" и "Работать" - лучше поменять местами для удобности

0

5

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

И ещё баг - если папка программы не текущая, программа не может загрузить dll-ки из library (решение - для загрузки использовать полный путь).

непонял, что значит "папка программы не текущая"
да вроде полный, перед папкой подставляется GetCurrentDirectory()

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

Был бы удобен поиск констант не только по первым символам.

так не я ищу, а оно само ищет

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

Вот, кстати, "конкурент"

не, это не конкурент, он же только число даёт, а у меня зачем она нужна и по возможности пример

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

2. Просто интересно, х64 зачем?

всё в ней делаю, да вроде как шустрее, ну и 32 умрёт раньше чем 64

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

3. library5.dll, library6.dll - улыбнули

не все поймут что там, просто маскировка, а зачем сам незнаю, сделал и не трогаю

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

4. Имхо вкладки "Настройки" и "Работать" - лучше поменять местами для удобности

так было когда то в начале, потом оказалось что это неудобно когда есть несколько вкладок для работы, а так всё последовательно
время и практика сами всё расставили

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

0

6

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

0

7

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

всё в ней делаю, да вроде как шустрее, ну и 32 умрёт раньше чем 64

в данном случае никакого смысла нет в х64, и на скорость не влияет

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

так было когда то в начале, потом оказалось что это неудобно когда есть несколько вкладок для работы, а так всё последовательно
время и практика сами всё расставили

Просто при запуске открывается вкладка настроек, а настройки дело такое, один раз настроил и забыл

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

да вроде полный, перед папкой подставляется GetCurrentDirectory()

сталкивался с этим, чтоб учесть все варианты этого мало, или так

Код:
Result$ = GetPathPart(ProgramFilename()) + "library"

или (если либы грузят ещё либы из этой папки)

Код:
TempDir$ = GetCurrentDirectory()
SetCurrentDirectory(GetPathPart(ProgramFilename()) + "library")
OpenLibrary()
SetCurrentDirectory(TempDir$)

Отредактировано Lin (24.08.2022 20:08:38)

0

8

newJS

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

непонял, что значит "папка программы не текущая"
да вроде полный, перед папкой подставляется GetCurrentDirectory()

---------------------------
Ошибка
---------------------------
DLL не найдена или не соответствует разрядности

Дальнейшая работа программы невозможна

P:\Programs\library\getBarDesctop-X64.dll
---------------------------
ОК   
---------------------------

Надо подставлять не GetCurrentDirectory, которая МОЖЕТ ОТЛИЧАТЬСЯ от папки программы, а путь к самой программе, полученный из полного пути к исполняемому файлу, полученному, например, через GetModuleFileName_ (WinApi) или ProgramFilename.

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

так не я ищу, а оно само ищет

Иногда нужен поиск не только по первым символам. Посмотрите как у конкурента (хотя он и отстаёт по функционалу).

0

9

А константы, как я понял, только по графическому интерфейсу. Остальными будет пополняться?

0

10

Smitis не могу я это спровоцировать
у меня 7-32\64 и 10-32\64
на всех четырёх запускается именно из той папки котрую подготовил, упаковал и выложил на диск
на 64 запускаются и 32 и 64
в какой системе не запускается?

Возвращает полный путь к текущему каталогу приложения. Он будет заканчиваться разделителем каталогов ('\' в Windows или '/' в ином случае).
Это очень маловероятно, но если эта функция не сработает, она вернет пустую строку.

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

Иногда нужен поиск не только по первым символам. Посмотрите как у конкурента (хотя он и отстаёт по функционалу).

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

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

А константы, как я понял, только по графическому интерфейсу. Остальными будет пополняться?

да с гаджетами и то не всё будет, я то пенс-самоучка и всё это уже в печёнках сидит
понемногу будет пополнятся, а там куда кривая вынесет

0

11

newJS
Дело не в системе. Это даже в Win95 так и под ДОС - текущая папка совсем необязательно совпадает с папкой программы.
Самый простой способ - создать ярлык на рабочем столе и в свойствах ярлыка поле "рабочая папка" оставить пустым.

П.С.
Поверьте опыту - текущая папка вещь предельно ненадёжная.

0

12

На счёт "текущая папка программы" столкнулся когда прописал в батник запуск своей программы. Батник в другой папке и там где батник папка была текущей, программа запустившись не видит своих библиотек.  Другой аналогичный случай с любым практически редактором, прописываем запуск программы из Notepad++ и папка Notepad++ становится текущей, поэтому когда в скрипте указываешь относительный путь _ только имя файла он появится в корне папки Notepad++, а если бы запустить прогу кликнув на EXE, то сохранился бы в папке программы. Но мы то уже научены как это работает и уже знаем где искать файл, если он не найден в папке программы. Поэтому я в проге всегда использовал функцию установки текущей рабочей папки, причём не той что указывается при открытии диалога выбора папки, в AutoIt3 есть функция и после её использование программа видит свои файлы с какого бы батника она не запустилась.

Сейчас думаю, а не создаст ли это проблемы для батника? Может тогда правильней получить просто папку программы и указывать абсолютные пути для подключения ресурсов?

newJS
А поиск по тексту справки есть? Например ввёл TreeGadget и программа вывела все константы в комментариях которых есть слово TreeGadget.

Отредактировано AZJIO (25.08.2022 16:03:04)

0

13

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

Smitis не могу я это спровоцировать

Да просто добавь в пурик:
https://i120.fastpic.org/big/2022/0825/c6/c5171e44fb49c505033f79d08e562fc6.jpg

0

14

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

Шрифт очень тяжело читать. Например я предпочитаю шрифты без засечек, и принудительно в браузере переопределяю шрифты и запрещаю использовать шрифты указанные сайтом, несмотря на стилистику и прочее, задаю минимальный размер 15-16, то есть как бы сайт не подсовывал мелкий шрифт, у меня он будет 16. И всегда одно и то же начертание Arial, то есть мозг не пытается анализировать иное начертание, привыкать к нему, чтобы воспринимать машинально. Поэтому по возможности вынести все параметры шрифта в ini-файл (имя, размер)

Цвета тоже вынести в ini-файл, чтобы фон можно было сделать чёрным, текст белым, цвета ключевых слов в своём стиле.
Кстати, попытаться открыть цвета из конфига PureBasic в AppData\Roaming\PureBasic.

Отредактировано AZJIO (25.08.2022 21:34:30)

0

15

AZJIO
Хватило бы .chm файла. И маленькой проги, которая по Ctrl+1,Ctrl+2.. или Ctrl+F1,Ctrl+F2.. открывала на выделенном слове тот или иной пользовательский .chm файл с константами, WinApi, командами asm и т.п. По функционалу как плагин LanguageHelp для npp.

0

16

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

Сейчас думаю, а не создаст ли это проблемы для батника?

Нет. Текущая папка у каждого процесса своя. Она же "текущая директория", она же "рабочая директория".
Хотя на самом деле у процесса для каждой буквы диска своя рабочая директория. Т.е, если дисков несколько, то и их несколько.

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

Может тогда правильней получить просто папку программы и указывать абсолютные пути для подключения ресурсов?

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

Отредактировано Smitis (26.08.2022 02:27:42)

0

17

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

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

как я понимаю относительные пути только визуально относительные, для системы все они абсолютные. Проблема что система не может раскрыть относительный путь, если рабочая директория получена не верно по причине того что родительский процесс каким то образом передаёт переменные запускаемым из себя прогам, такие как переменные окружения получаемые через GetEnvironmentVariable().

0

18

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

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

Это как?
Текущую папку можно получить функцией GetCurrentDirectory().

0

19

Пётр написал(а):

Это как?

Это когда Вы обращаетесь к файлам по относительному пути вида "диск:имяфайла", т.е. без использования "\".
Функция WinApi SetCurrentDirectory меняет не просто текущую папку, но и текущий диск и текущую папку на нём.
Отдельно текущий диск через WinApi не установить (я могу ошибаться). А вот в cmd подобную возможность сохранили для совместимости и команда cd там имеет ключ /d с которым работает как аналог SetCurrentDirectory.
Например

Код:
Debug SetCurrentDirectory("C:\Program Files")
Debug GetCurrentDirectory()
Debug SetCurrentDirectory("D:\")
Debug GetCurrentDirectory()
Debug SetCurrentDirectory("C:")
Debug GetCurrentDirectory()
Debug SetCurrentDirectory("D:")
Debug GetCurrentDirectory()

у меня после SetCurrentDirectory("C:") показывает не ту папку, которая была в первой команде (и не корень диска).

Отредактировано Smitis (26.08.2022 11:38:20)

0

20

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

Это когда Вы обращаетесь к файлам по относительному пути вида "диск:имяфайла"

Как этим пользоваться не зная какая папка будет текущей?
Результат ожидаем (корень диска).

Код:
Directory$ = "D:"
If ExamineDirectory(0, Directory$, "*.*")
  While NextDirectoryEntry(0)
    If DirectoryEntryType(0) = #PB_DirectoryEntry_File
      Type$ = "[File] "
      Size$ = " (Size: " + DirectoryEntrySize(0) + ")"
    Else
      Type$ = "[Directory] "
      Size$ = "" ; A directory doesn't have a size
    EndIf
    Debug Type$ + DirectoryEntryName(0) + Size$
  Wend
  FinishDirectory(0)
EndIf

0

21

Пётр написал(а):

Как этим пользоваться не зная какая папка будет текущей?

Наследие тяжёлого прошлого - для совместимости с DOS 1.0

Пётр написал(а):

Результат ожидаем (корень диска).

Код:
EnableExplicit
SetCurrentDirectory_("C:\Program Files")
Define ffd.WIN32_FIND_DATA
Define hfind = FindFirstFile_("C:*",ffd)
Define find = hfind
While find
	Debug PeekS(@ffd\cFileName)
	find = FindNextFile_(hfind,ffd)
Wend

0

22

В википедии, как не странно, всё есть
https://ru.wikipedia.org/wiki/Рабочий_каталог

0

23

сделал поиск, заменил архив на диске, ссылка в первом посте
версия пока осталась два нуля

люди, а как вы умудряетесь стартовать экзешник не из папки программы?

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

если что упустил, ещё раз скажите, а я пошёл это делать

0

24

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

ком строки наверно не будет, не понимаю мазохистов набирающих с клавы эту строку, если есть окно, и пусть висит запущенная

никто из ком-строки запускать не будет. Запускают из редактора. Редактор позволяет передать параметры поиска через ком-строку. Это не значит что будет открыт cmd.exe, это значит, что программа откроется сразу там где надо. К примеру я не так давно прописал в нескольких своих программа ком-строку, теперь проги можно открывать из проводника, передавая через ком-строку путь к файлу или папке, а без этого прога откроется с настройками по умолчанию и путь надо было бы копировать из папки в поле программы. Это не обязательно должен быть путь, например в другой проге открывает библиотеку связанную с PureBasic, потому что программная среда PureBasic, в другую программную среду можно прописать другую библиотеку открываемую по умолчанию. То есть запустить прогу учитывая что она запущена из какой то среды. Например, можно даже не константу передавать а гаджет, например ButtonGadget, то есть я в IDE PureBasic ставлю курсор на ButtonGadget и вызываю хоткей запуска твоей проги, IDE передаёт выделенное слово или слово в котором находится курсор, то есть ButtonGadget, используя параметр %WORD в функционале запуска инструментов. Твоя прога получает ButtonGadget как параметр, ты проверяешь, если параметр пуст, то запускаем по умолчанию, если параметр некое ключевое слово, то открывает в комбо ButtonGadget и в левом списке автоматически открываются константы ButtonGadget. То есть прога сразу открывает то что человеку нужно. Можно например проверить есть ли слева у переданного слова "#", если есть , то это константа и открываем сразу на этой константе и открываем описание, то есть программист  сразу открывает описание константы не набирая её повторно в поисковой строке. Если не константа и не один из элементов комбо-списка, то воспринимаем это как текст поиска по описанию с открытием первого найденного в описании.

Отредактировано AZJIO (29.08.2022 11:05:55)

0

25

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

люди, а как вы умудряетесь стартовать экзешник не из папки программы?

Например, из меню менеджера файлов. Я из FAR запускал. В общем, из любой другой программы, не из проводника через ярлык. Да и через ярлык тоже, если в нём поле "Рабочая папка" пустое.

0

26

И ещё. Зачем программа создаёт папку library и сохраняет в ней две dll? Во-первых, эти файла в архиве и так есть, во-вторых, без двух других файлов (а их нет, если нет и library) программа всё равно не работает.

П.С.
Таки пришлось сканировать диск и удалять эти левые library. Аж 4 экземпляра нашлось, включая рабочий стол. Прямо вирус какой-то ;)

0

27

что то сделал и обновил архив на диске, ссылка в голове
добавил, исправил как просили, если что то упустил, говорите

AZJIO, да я непротив, но не понимаю что это и как к этому подступиться
и мне это видится подругому, ты сначала будешь искать константу подходящию под твою зададачу

Smitis, из тоталя всё стартует, других нет, если ярлык создавать в папке проги или на столе, то всё работает
не работает если перетаскивать экзешник на стол, не работает с любым определением пути
не понимаю как можно пинать экзешник из папки и чтобы он не понял откуда его пнули
у меня нет стола, отключен, у меня древняя прога H-Menu, на неё экзешник затягивается, и всё работает
а про папку понял, это наследие, уберу

0

28

Код:
Procedure SetProgParam()
	Protected CountP, Param$, i, find, Count
	CountP = CountProgramParameters()
	If CountP
    Param$ = ProgramParameter(0)
    If Left(Param$, 1) = "#"
    	SetGadgetText(#field, Param$)
    	ProcedureReturn
    EndIf
    ; вариант 1
    ForEach Combo()
    	;     	If Combo() = Param$
    	If FindString(Combo(), Param$)
        SetGadgetText(#Combo, Param$)
        find = 1
    	EndIf
    Next
    ; вариант 2
    Count = CountGadgetItems(#Combo)
    For i = 0 To Count - 1
    	tmp$ = GetGadgetItemText(#Combo, i)
    	If FindString(tmp$, Param$)
        ;         SetGadgetText(#Combo, tmp$)
        SetGadgetState(#Combo , i)
        find = 1
    	EndIf
    Next
    If Not find
    	; тогда поиск по содержимому, поиск файлов в папке "constans", чтение, поиск текста, поиск "constantData" назад,
    	; сохранение константы в список, вывод списка в гаджет для клика.
    EndIf
	EndIf
EndProcedure

Отредактировано AZJIO (03.09.2022 08:43:17)

0

29

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

не понимаю как можно пинать экзешник из папки и чтобы он не понял откуда его пнули

Вроде мы уже разобрались с этим - если определять путь по рабочей папке.

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

то всё работает

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

П.С.
Кстати, хороший программист Horst Schaeffer тоже в своё время наступил на эти грабли - сохранял ini-файл в рабочей директории. Потом исправился, но только частично (остались недоделанные программы которые приходится запускать через специальный лаунчер, чтобы обеспечить портабельность) :(

0

30

что то сделал и обновил архив на диске, ссылка в голове
добавил, исправил как просили, если что то упустил, говорите

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

Кстати, хороший программист Horst Schaeffer тоже в своё время наступил на эти грабли - сохранял ini-файл в рабочей директории. Потом исправился, но только частично (остались недоделанные программы которые приходится запускать через специальный лаунчер, чтобы обеспечить портабельность) :(

не понял, на пальцах можно

AZJIO, что за код, что не так

0


Вы здесь » PureBasic - форум » OffTop » Программа поиска и выбора констант API