Спасибо огромное!
Вопросы новичка (продолжение…)
Сообщений 841 страница 870 из 990
Поделиться84223.01.2013 10:17:21
В Пурике есть команда "GetCurrentDirectory". Но дело в том, что она ведет корневой каталог от диска С, а мне нужно, что бы она вела его от моего файла. То есть: не C:\Users\User\Desktop...бла-бла-бла, а примерно вот так: MD/SystemDrive/. Как это сделать?
Поделиться84323.01.2013 12:51:35
что бы она вела его от моего файла.
Папка, из которой запущена программа:
Debug GetPathPart(ProgramFilename())
Поделиться84407.12.2013 00:40:06
Всем привет!
Подскажите, кому не жалко, как запретить повторный запуск уже открытого exe.
И еще вопрос: я использовал несколько картинок в программе в качестве логотипа. Они скомпиллируются в exe и будут доступны на чужом компьютере или их нужно переносить отдельно или засунуть в dll?
Поделиться84507.12.2013 11:11:34
Подскажите, кому не жалко, как запретить повторный запуск уже открытого exe.
;---------Запрет на запуск программы более одного раза--------
;{------------------------------------------------------------
a = CreateSemaphore_(#Null,0,1,"ИМЯ ПРОГИ")
If a<>0 And GetLastError_()= #ERROR_ALREADY_EXISTS
CloseHandle_(a)
If MessageRequester("MS-2", "Программа уже запущена!", #MB_OK|#MB_ICONWARNING)=#IDOK
End
EndIf
EndIf
;}---------------------------------------------------------------
я использовал несколько картинок в программе в качестве логотипа. Они скомпиллируются в exe и будут доступны на чужом компьютере
Если загруженны через DataSection EndDataSection, то да.
Поделиться84607.12.2013 12:31:15
И еще вопрос: я использовал несколько картинок в программе в качестве логотипа. Они скомпиллируются в exe и будут доступны на чужом компьютере или их нужно переносить отдельно или засунуть в dll?
Это зависит от кода. Можно сделать все перечисленные варианты.
Поделиться84707.12.2013 13:46:59
max, Пётр, спасибо что откликнулись!
С запретом на повторный запуск я всё понял, а вот с тем, чтобы зашить рисунок в exe - возникли проблемы.
DataSection
Logo: IncludeBinary "c:/..."
EndDataSection
Этот кусок кода пропадает каждый раз, когда я делаю пробный запуск.
Поделиться84807.12.2013 14:21:55
Что значит пропадает?
Без кода сложно сказать что сделано не так.
Поделиться84901.01.2014 19:02:15
Читаю файл построчно. К примеру, в файле 3000 строк. Не знаю как объяснить, но надо определять строки под номерами:
31, 61, 91, 121 и т.д.
Т.е. как бы с шагом в 30, прибавляя 1.
Или например, с 1 до 3 с тем же шагом в 30, т.е.:
31 32 33, 61 62 63, 91 92 93, 121 122 123 и т.д.
Как такое лучше сделать?
EnableExplicit Enumeration #f_data EndEnumeration #f_path = "D:\file.txt" #step = 30 If ReadFile(#f_data, #f_path) While Eof(#f_data) = 0 Define string_num.i string_num + 1 Debug string_num Define current_string.s = ReadString(#f_data) Wend CloseFile(#f_data) EndIf
Поделиться85001.01.2014 19:44:31
31, 61, 91, 121 и т.д.
For i=1 To 200 If i>30 And i % 30 = 1 Debug i EndIf Next i
31 32 33, 61 62 63, 91 92 93, 121 122 123 и т.д.
For i=0 To 200 x=i % 30 If i>30 And x>=1 And x<=3 Debug i EndIf Next i
Поделиться85108.01.2014 15:02:27
Как заставить консоль проверять сразу два и более условий?
Пример - простая программа цветовых ассоциаций:
OpenConsole() Repeat Print("Введите название цвета: ") If Input() = "красный" PrintN("Кровь, клубника, тревога") EndIf Print("Введите название цвета: ") If Input() = "синий" PrintN("Небо, слива") EndIf Print("Введите название цвета: ") If Input() = "зелёный" PrintN("Трава, стереотипно выглядящие радиоактивные отходы") EndIf Until RawKey() = 13
При If проверяется только одно - либо "красный", либо "синий", либо "зелёный".
Поделиться85206.04.2014 04:37:22
Здравствуйте !!! Подскажите пожалуйста ,
Имеется ini файл - в нём несколько групп - возможно ли удалить ключ не зная имени группы ??? (удаление по имени ключа)
Заранее спасибо
Поделиться85306.04.2014 16:09:43
Да можно.
FileName.s = "C:\boot.ini" If OpenPreferences(FileName) If ExaminePreferenceGroups() While NextPreferenceGroup() If ExaminePreferenceKeys() While NextPreferenceKey() Debug PreferenceKeyName() Wend EndIf Wend EndIf ClosePreferences() Else MessageRequester("", "Нет файла", #MB_OK|#MB_ICONERROR) EndIf
Поделиться85406.04.2014 19:47:15
Пётр
Спасибо !!! Но у меня либо удаляются все ключи либо последний из перечисленых - я код приведу в божеский вид и выложу чтоб было вам виднее что я хочу . Ещё раз спасибо
Поделиться85506.04.2014 21:38:07
Пётр доброго времени суток , вот код - там я пометил где не хочет работать RemovePreferenceKey(Preference_KeyName()) - подскажите как это сделать . Заранее спасибо !!!
Enumeration #Window_0 EndEnumeration Enumeration #Text_0 #String_0 #Button_0 #Text_1 #Tree_0 #Text_2 #String_1 EndEnumeration Global NewList Preference_KeyName.s() Define.l Event, EventWindow, EventGadget, EventType, EventMenu Procedure ScanINI_File(FileName.s) PosList=0 ;SetGadgetText(#String_1,"") ClearGadgetItems(#Tree_0) ClearList(Preference_KeyName()) If OpenPreferences(FileName) If ExaminePreferenceGroups() While NextPreferenceGroup() AddGadgetItem(#Tree_0,-1,PreferenceGroupName(),0,0) If ExaminePreferenceKeys() While NextPreferenceKey() AddGadgetItem(#Tree_0,-1,PreferenceKeyValue(),0,1) AddElement(Preference_KeyName()) Preference_KeyName()=PreferenceKeyName() SetGadgetItemData(#Tree_0, CountGadgetItems(#Tree_0)-1, PosList) PosList+1 Wend EndIf Wend EndIf x=0 PreferenceGroup("") If ExaminePreferenceKeys() While NextPreferenceKey() If x=0 AddGadgetItem(#Tree_0,-1,"Разное",0,0) x=1 EndIf AddGadgetItem(#Tree_0,-1,PreferenceKeyValue(),0,1) AddElement(Preference_KeyName()) Preference_KeyName()=PreferenceKeyName() SetGadgetItemData(#Tree_0, CountGadgetItems(#Tree_0)-1, PosList) PosList+1 Wend EndIf ClosePreferences() Else MessageRequester("", "Нет файла", #MB_OK|#MB_ICONERROR) EndIf EndProcedure If CreatePopupMenu(111) MenuItem(1,"Перейти") MenuBar() MenuItem(2,"Удалить") EndIf Procedure Open_Window_0() hWnd.l=OpenWindow(#Window_0, 303, 234, 290, 400, "", #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered ) StickyWindow(#Window_0,1) TextGadget(#Text_1, 5, 35, 100, 15, "Закладки:") TreeGadget(#Tree_0, 5, 50, 280, 340, #PB_Tree_NoLines) File.s="bookmarks.ini" If File<>"" And FileSize(File)>0 ScanINI_File(File) Else If FileSize("bookmarks.ini")=>0 SetGadgetText(#String_0,"") SetGadgetText(#String_1,"") EndIf EndIf EndProcedure Open_Window_0() Repeat EventID.l=WaitWindowEvent() Select EventID Case #PB_Event_Gadget Select EventGadget() Case #Tree_0 MB.l=EventType() GetCursorPos_(@var.TV_HITTESTINFO\pt) ScreenToClient_(GadgetID(#Tree_0),@var.TV_HITTESTINFO\pt) SendMessage_(GadgetID(#Tree_0),#TVM_HITTEST,0,var) SendMessage_(GadgetID(#Tree_0),#TVM_SELECTITEM,#TVGN_CARET,var\hItem) itemsel=GetGadgetState(#Tree_0) Select MB Case #PB_EventType_RightClick Pos=GetGadgetState(#Tree_0) If GetGadgetItemAttribute(#Tree_0,Pos, #PB_Tree_SubLevel)=1 DisplayPopupMenu(111,WindowID(#Window_0)) EndIf Case #PB_EventType_LeftDoubleClick Pos=GetGadgetState(#Tree_0) If GetGadgetItemAttribute(#Tree_0,Pos, #PB_Tree_SubLevel)=1 PosList=GetGadgetItemData(#Tree_0, Pos) SelectElement(Preference_KeyName(), PosList) RunProgram(Preference_KeyName()) EndIf EndSelect EndSelect Case #PB_Event_Menu Select EventMenu() Case 1 Pos=GetGadgetState(#Tree_0) If GetGadgetItemAttribute(#Tree_0,Pos, #PB_Tree_SubLevel)=1 PosList=GetGadgetItemData(#Tree_0, Pos) SelectElement(Preference_KeyName(), PosList) RunProgram(Preference_KeyName()) EndIf Case 2 Pos=GetGadgetState(#Tree_0) If GetGadgetItemAttribute(#Tree_0,Pos, #PB_Tree_SubLevel)=1 PosList=GetGadgetItemData(#Tree_0, Pos) SelectElement(Preference_KeyName(), PosList) Debug Preference_KeyName() RemovePreferenceKey(Preference_KeyName()) ; ВОТ ЗДЕСЬ У МЕНЯ НЕ РАБОТАЕТ !!! EndIf EndSelect EndSelect Until EventID=#PB_Event_CloseWindow
Поделиться85606.04.2014 22:25:34
Нужно сначала выбрать группу PreferenceGroup() в которой находится удаляемый ключ.
Кроме того, необходимо открыть файл.
Поделиться85706.04.2014 22:55:40
Нужно сначала выбрать группу PreferenceGroup() в которой находится удаляемый ключ.
Кроме того, необходимо открыть файл.
Вот в том то и вопрос что не могу определить PreferenceGroup()
а сам файл я и открывал и закрывал --- вот застрял в том что не могу определить группу в дереве - почему ведь я и задал первый вопрос
возможно ли удалить ключ не зная имени группы ???
Подскажите пожалуйста !!!
Отредактировано kaaamid (06.04.2014 23:01:38)
Поделиться85807.04.2014 01:01:01
Или записывай в список имена групп, или бери имя группы из TreeGadget.
Поделиться85907.04.2014 02:20:18
Спасибо ! буду думать - правда уже голову поломал:) - не много не могу понять - я ведь пытаюсь удалить элемент из подгруппы #PB_Tree_SubLevel а вот как определить к чему это подгруппа относится
Поделиться86007.04.2014 04:45:10
Вариант
Global IniFileName$="bookmarks.ini"
добавил в дерево для наглядности
AddGadgetItem(#Tree_0,-1,PreferenceKeyName()+"="+PreferenceKeyValue(),0,1)
обработка удаления
Case #PopUpMenu2 ;Удалить Pos=GetGadgetState(#Tree_0) If GetGadgetItemAttribute(#Tree_0,Pos, #PB_Tree_SubLevel)=1 Debug Str(pos)+":"+Preference_KeyName() ;найти имя группы и удалить pos2=pos While pos2>-1 ;самая первая позиция 0 pos2-1 If GetGadgetItemAttribute(#Tree_0,Pos2, #PB_Tree_SubLevel)=0 GroupeName$=GetGadgetItemText(#Tree_0, Pos2 ) Debug GroupeName$ KeyName$=StringField(GetGadgetItemText(#Tree_0, Pos ), 1, "=") Debug KeyName$ If OpenPreferences(IniFileName$) ;открыть файл PreferenceGroup(GroupeName$) ;задать группу RemovePreferenceKey(KeyName$) ;удалить ключ ClosePreferences() ;закрыть файл RemoveGadgetItem(#Tree_0, pos) ;удалить элемент из дерева EndIf Break EndIf Wend EndIf
и никакой LinkedList не нужен и SetGadgetItemData
Поделиться86107.04.2014 07:24:15
SadStar
Спасибо огромное !!! Вечером попробую - отпишусь
Не вытерпел до вечера - Огромное спасибо - то что и нужно !!!
ps: только
AddGadgetItem(#Tree_0,-1,PreferenceKeyName()+"="+PreferenceKeyValue(),0,1)
оставил прежним - а то не красиво отображается в TreeGadget это всё таки ссылки
а в месте удаления лучше работает
RemovePreferenceKey(Preference_KeyName())
Ещё раз огромное Спасибо !!!
Отредактировано kaaamid (07.04.2014 09:42:53)
Поделиться86217.04.2014 09:27:27
Здравствуйте !!!
Есть код написанный на Autoit -е - всё бы ни чего - можно его запускать в программе написанной на PureBasic - нО есть НО скрипт Autoit-а работает медленней чем код программы - одним словом данные в ini файле созданные скриптом Autoit-а появляются позже чем надо . #PB_Program_Wait и паузы - не помогают - наоборот каким то образом тормозят работу скрипта - так вот вопрос в том можно ли переписать код Autoit-а на PureBasic ??? - если можно - помогите плиз . Заранее СПАСИБО !!!
код Autoit-а
#include <Array.au3> $Ret = OpenGetURL("", -1, 1, "Opera") _ArrayDisplay($Ret, "Opera") ;=============================================================================== ; ; Function Name: OpenGetURL() ; ; Parameter(s): $sURL [optional] Address of page to open, ; if this is empty string (default), then returned Url from address field of particular tab. ; $hWin [optional] Number of tab: ; -1 = Current tab. ; 0 = New tab (when opening). ; $RetType [optional] Definds returned value: ; 0 = String with Title and URL address. ; 1 = Array with 3 elements... ; [0] = Title ; [1] = URL address ; [2] = String with Title And URL address. ; $Server [optional] Serever to open/get Url in/from. ; $iWait [optional] Waiting Timeout in milliseconds, on overload will return an error. ; ; Requirement(s): None ; Return Value(s): On Success - See 'Parameter(s)'. ; On Failure - Empty string and set @error as following: ; 1 = Error to open Dll (user32.dll) ; 2 = Error Initializing DDE (@extended include more details about the returned value from DllCall). ; 3 = Other DDE Errors (@extended include more details about the returned value from DllCall). ; Author(s): amel27 ; ;===================================================================== Func OpenGetURL($sURL = "", $hWin = -1, $RetType = 0, $Server="IExplore", $iWait = 10000) Local $ret, $err, $uIdInst = DllStructCreate("int") Local $hServer[1], $hTopic[1], $hItem[1], $hConv[1], $hData[1], $sData[1] Local $sTopic = "WWW_OpenURL", $sItem = $sURL & ',,0x' & Hex($hWin) If $sURL = '' Then $sTopic = "WWW_GetWindowInfo" $sItem = "0x" & Hex($hWin) EndIf Local $hDll = DllOpen("user32.dll") If $hDll=-1 Then Return SetError(1, 0, "") ; Error to open Dll $ret = DllCall("user32.dll", "int", "DdeInitialize", "ptr", DllStructGetPtr($uIdInst), "ptr", 0, "int", 0, "int", 0) If $ret[0] Then Return SetError(2, $ret[0], "") ; Error Initializing DDE $hServer = DllCall($hDll, "int", "DdeCreateStringHandle", "int", DllStructGetData($uIdInst,1), "str", $Server, "int", 1004) If $hServer[0] Then $hTopic = DllCall($hDll, "int", "DdeCreateStringHandle", "int", DllStructGetData($uIdInst,1), "str", $sTopic, "int", 1004) If $hTopic[0] Then $hItem = DllCall($hDll, "int", "DdeCreateStringHandle", "int", DllStructGetData($uIdInst,1), "str", $sItem, "int", 1004) If $hItem[0] Then $hConv = DllCall($hDll, "int", "DdeConnect", "int", _ DllStructGetData($uIdInst,1), "int", $hServer[0], "int", $hTopic[0], "int", 0) If $hConv[0] Then $hData = DllCall($hDll, "int", "DdeClientTransaction", "ptr", 0, "int", 0, _ "int", $hConv[0], "int", $hItem[0], "int", 1, "int", 0x20B0, "int", $iWait, "ptr", 0) If $hData[0] Then $sData = DllCall($hDll, "str", "DdeAccessData", "int", $hData[0], "ptr", 0) EndIf EndIf EndIf EndIf $iErr = DllCall($hDll, "int", "DdeGetLastError", "int", DllStructGetData($uIdInst, 1)) If $hData[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hData[0]) If $hConv[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hConv[0]) If $hItem[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hItem[0]) If $hTopic[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hTopic[0]) If $hServer[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hServer[0]) If $iErr[0] Then Return SetError(3, $iErr[0], "") ; Othe DDE Errors DllCall($hDll, "int", "DdeUninitialize", "int", DllStructGetData($uIdInst, 1)) DllClose($hDll) $sData[0] = StringRegExpReplace($sData[0], ',""$', '') If $sURL = '' Then $sURL = StringRegExpReplace($sData[0], '^"([^"]*)",.*', '\1') Local $iRetTitle = StringRegExpReplace($sData[0], '^.*","([^"]*)"$', '\1') Local $RetURL[3] = [$sData[0], $sURL, $iRetTitle] $sPath_ini=@ScriptDir & "\\Temp.ini" ; Записывает значение 'Это новое значение' в параметр 'Key' в секцию 'Section'. IniWrite($sPath_ini, "Section", $iRetTitle, $sURL) If $RetType = 1 Then Return $RetURL Return $sData[0] EndFunc
Отредактировано kaaamid (17.04.2014 09:27:59)
Поделиться86317.04.2014 11:34:14
Переписать можно. В коде в основном WinAPI вызовы и код на PureBasic получится даже проще.
Поделиться86417.04.2014 15:26:59
Пётр
Пожалуйста , если можно , сам я не справлюсь . Заранее Спасибо !
Забыл добавить , этот код работает для оперы старых версий до того как они перешли на движок хрома ( но он мне нужен так сам сижу на старой версии оперы)
Для новых версий начиная с 16 - х я снимал url с окна а в последней версии они полностью перешли на хром - этого сделать нет возможности
PS: такой код есть на Delphi , на AutoIt - а Purebasic нет - надо бы пробел заполнить
Отредактировано kaaamid (18.04.2014 19:40:59)
Поделиться86503.07.2014 18:22:49
Здравствуйте, подскажите, пожалуйста, как консольной программе под Windows передать один параметр вида - "Вася" и "Петя". Т.е. в параметре имеем как кавычки, так и пробелы.
Вроде как, надо бы всё в кавычки, а те, что внутри как-то экранировать. Но ни бэкслэш, ни дополнительные кавычки, ни "^" экранировать не хотят! Консоль - стандартная cmd.
PS А под cygwin и вообще работать отказывается, даже если параметры без причуд!
Правда, там у меня раскраска в стиле conio, может, поэтому... Под виндой-то, "нормальные параметры" работают....
Отредактировано Илена (03.07.2014 18:48:59)
Поделиться86603.07.2014 20:51:32
Имеется в виду передача текста через командную строку при запуске исполняемого файла?
Можно получить текст используя функцию GetCommandLine_().
Command.s = PeekS(GetCommandLine_()) Debug Command
И в коде разбирать текст как требуется.
Поделиться86703.07.2014 23:50:45
"Мама, у меня получилось!"
Да, спасибо большое, Пётр. Исхитриться что-нибудь хорошее получить с ProgramParameter(0) .. ProgramParameter(много-много), в общем случае, так и не вышло.
Ну, а при разборе строки после GetCommandLine() у меня вообще тривиальный случай - первый параметр всегда "нормальный", а возможный "кривой" второй
легко берётся до конца строки без всякого экранирования...
Поделиться86804.07.2014 10:50:26
Исхитриться что-нибудь хорошее получить с ProgramParameter(0) .. ProgramParameter(много-много), в общем случае, так и не вышло.
ProgramParameter() считает разделителем пробел при учете что строка не в кавычках. Это связанно с особенностями передачи команд и является стандартом.
Наличие нескольких кавычек в одной команде, это отклонение от стандарта.
Поделиться86904.07.2014 15:00:29
Да, благодарю.
Вообще, язык интересный весьма. Правда, странный и непривычный синтаксис массивов и структур, но это дело такое...
Работает, действительно, быстро, и размер небольшой.
К удивлению, не нашлось сходу функций типа printf()/fprintf()... Разок-то, можно сформатировать строку и в WriteString(), скажем, с помощью Space() и нужной длины поля, но постоянно так делать не сильно удобно...
Правда, второй день только смотрю, может, какие библиотеки ещё отыщутся, народу-то, не так уж мало... Но, в общем, уже очевидно, что язык небесполезный.
Поделиться87004.07.2014 19:40:29
К удивлению, не нашлось сходу функций типа printf()/fprintf()
Есть они.
ImportC "" printf(Format.s, Param) EndImport CompilerIf #PB_Compiler_ExecutableFormat<>#PB_Compiler_Console CompilerError "Формат исполняемого файла должен быть 'Console'" CompilerEndIf OpenConsole() printf("%i parrots", 38) Input()
Похожие темы
Какая версия? | OffTop | 03.10.2021 |
Мне постоянно пищет вот это | Вопросы по PureBasic | 14.10.2011 |
Размер экрана в пикселях | Вопросы по PureBasic | 13.02.2011 |
консоль | Вопросы по PureBasic | 19.03.2015 |
Полноэкранные приложения на purebasic | Вопросы по PureBasic | 08.03.2011 |