Спасибо огромное!
Вопросы новичка (продолжение…)
Сообщений 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 i31 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 |