какая нужна функция.
RunProgram("D:\File.bat")
Как это сделать???
SetGadgetText(#Text_0,Chr(34)+"Text"+Chr(34))
PureBasic - форум |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)
какая нужна функция.
RunProgram("D:\File.bat")
Как это сделать???
SetGadgetText(#Text_0,Chr(34)+"Text"+Chr(34))
Спасибо Пётр. Появился еще вопрос!!! Вот код
Enumeration
#Window_0
EndEnumeration
#Button_0
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 456, 327, 402, 171, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Button_0, 95, 45, 185, 65, "СОЗДАТЬ ")
EndIf
EndIf
EndProcedure
Open_Window_0()
Repeat
Event = WaitWindowEvent()
Gadget = EventGadget()
Type = EventType()
If Event=#PB_Event_Gadget
If Gadget=#Button_4
Помогите продолжить программу, нужно сделать так, чтобы при нажатии кнопки создать, на диск D:\ создавалась EXE программа при открытии которой выполнялась эта команда RunProgram("D:\File.bat")
Отредактировано Игорь (13.04.2015 15:54:23)
Здравствуйте! У меня есть вопрос по PureBasic :
Я хочу написать программу, ну что то типа компилятора, который переводит формат bat вEXE и вот как я хочу это сделать: вот сама программа :
Enumeration
#Window_0
EndEnumeration
Enumeration
#Button_0
#Editor_0
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 470, 210, 600, 300, "оКНО", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Button_0, 150, 215, 235, 45, "СОЗДАТЬ")
EditorGadget(#Editor_0, 25, 25, 540, 135)
EndIf
EndIf
EndProcedure
Repeat
Event = WaitWindowEvent()
Gadget = EventGadget()
Type = EventType()
If Event=#PB_Event_Gadget
If Gadget=#Button_0
МНЕ НУЖНО СДЕЛАТЬ ТАК ЧТОБЫ ПРИ НАЖАТИИ #Button_0 создавалась отдельная exe программа.
Допустим я хочу перевести вот этот bat код : "%SystemRoot%/system32/rundll32 user32, SwapMouseButton >nul" - в exe.
Я записываю этот бат код в поле программы #Editor_0. и нажимаю кнопку создать и вот теперь программа должна создать отдельную EXE программу. которая в свою очередь должна выполнить вот это :
If CreateFile(0,"D:\Проба.bat")
WriteString(0,"%SystemRoot%/system32/rundll32 user32, SwapMouseButton >nul")
CloseFile(0)
If RunProgram("D:\Проба.bat")
CloseProgram(0)
EndIf
DeleteFile("D:\Проба.bat")
EndIf
End
P.S : %SystemRoot%/system32/rundll32 user32, SwapMouseButton >nul : это BAT кот при выполнении которого поменяются местами значения кнопок мыши
P.S : мне нужно чтобы моя программа создавала ехе программу которая бы выполняла этот код: If CreateFile(0,"D:\Проба.bat")
WriteString(0,"%SystemRoot%/system32/rundll32 user32, SwapMouseButton >nul")
CloseFile(0)
If RunProgram("D:\Проба.bat")
CloseProgram(0)
EndIf
DeleteFile("D:\Проба.bat")
ЗАРАНЕЕ СПАСИБО!!!
Можно сделать как в этой программе. http://pure-basic.narod.ru/forum_files/ … ifyRes.rar
Только вместо отображения текста в окне, сохранять его в файл и запускать.
Как скопировать текст из окна EditorGadget? У меня он выделяется, но почему-то не копируется.
После выделения Ctrl+C нажать не пробовали?
После выделения Ctrl+C нажать не пробовали?
Пробовал. Ничего не происходит.
Пример из справки:
If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) EditorGadget(0, 8, 8, 306, 133) For a = 0 To 5 AddGadgetItem(0, a, "Line "+Str(a)) Next Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf
У меня работает.
Пример из справки:
У меня работает.
Данный пример у меня не работает. Версия PureBasic 5.11
Пример из справки:
У меня работает.
Пробовал на компьютерах с ОС WinXP, Win7/32, Win7/64. Текст в окне EditorGadget выделяется, но не копируется. В соседнем (добавил сам) окне ComboBoxGadget текст выделяется и копируется нормально.
Версия PureBasic 5.11
У меня версия 5.31(х86), ОС - WinXP.
В соседнем (добавил сам) окне ComboBoxGadget текст выделяется и копируется нормально.
Дайте весь код, посмотрим.
Отредактировано max (12.06.2015 00:24:15)
У меня версия 5.31(х86), ОС - WinXP.
Дайте весь код, посмотрим.
Отредактировано max (Сегодня 00:24:15)
Это моя первая программа на PureBasic. Буду благодарен за исправления и замечания.
Global Baud.l,Data_bit.l,Stop_bit.f,Parity_status.l,Dim DataRTU.a(7),StringASCII.s Procedure LRC16() Protected lrc.a, i.a, Dim DataASCII.a(7) ;создаём массив данных для передачи: DataASCII(0) = Val("$" + UCase(GetGadgetText(11))) ;адрес DataASCII(1) = Val("$" + UCase(GetGadgetText(12))) ;команда DataASCII(2) = Val("$" + UCase(GetGadgetText(13))) ;старший байт начального регистра DataASCII(3) = Val("$" + UCase(GetGadgetText(14))) ;младший байт начального регистра DataASCII(4) = Val("$" + UCase(GetGadgetText(15))) ;старший байт количества регистров DataASCII(5) = Val("$" + UCase(GetGadgetText(16))) ;младший байт количества регистров lrc = 0 ;подсчитываем LRC For i = 0 To 5 lrc = lrc + DataASCII(i) Next i lrc = 255 - lrc + 1 StringASCII.s="" For i = 11 To 16 If (Len(GetGadgetText(i))=2) StringASCII = StringASCII + GetGadgetText(i) Else StringASCII = StringASCII + "0" + GetGadgetText(i) EndIf Next i StringASCII = UCase(":" + StringASCII + Hex(lrc) + Chr(13) + Chr(10)) EndProcedure Procedure CRC16() Protected crc.u, i.a, j.a ;создаём массив данных для передачи: DataRTU(0) = Val("$" + UCase(GetGadgetText(11))) ;адрес DataRTU(1) = Val("$" + UCase(GetGadgetText(12))) ;команда DataRTU(2) = Val("$" + UCase(GetGadgetText(13))) ;старший байт начального регистра DataRTU(3) = Val("$" + UCase(GetGadgetText(14))) ;младший байт начального регистра DataRTU(4) = Val("$" + UCase(GetGadgetText(15))) ;старший байт количества регистров DataRTU(5) = Val("$" + UCase(GetGadgetText(16))) ;младший байт количества регистров crc = 65535 ;подсчитываем CRC For i = 0 To 5 crc = crc ! DataRTU(i) For j = 1 To 8 If ((crc & 1) <> 0) crc = (crc / 2) crc = (crc ! 40961) Else crc = (crc / 2) EndIf Next j Next i crc = crc & 65535 DataRTU(7) = crc / 256 ;старший байт CRC DataRTU(6) = crc - (DataRTU(7) * 256) ;младший байт CRC EndProcedure Procedure Select_ComPort() Protected Port.s Port = GetGadgetText(3) If IsSerialPort(2) ; Если с таким ИД уже открыт порт. CloseSerialPort(2) ; то закрываем его. SetGadgetColor(5,#PB_Gadget_BackColor, $0000FF) SetGadgetText(17,"Открыть порт") AddGadgetItem(4, -1, "Порт закрыт") Else OpenSerialPort(2, Port, Baud, Parity_status, Data_bit, Stop_bit, #PB_SerialPort_NoHandshake, 1024, 1024) SetGadgetColor(5,#PB_Gadget_BackColor, $00FF00) SetGadgetText(17,"Закрыть порт") AddGadgetItem(4, -1, "Порт открыт") EndIf EndProcedure Procedure InData() ; Прием данных. Protected InBytes.a, Text_In.s="", Temp_Text.s If IsSerialPort(2) ; если с таким ИД порт открыт. InBytes = AvailableSerialPortInput(2) ;получаем число принятых байт If InBytes>0 ; если получены данные Protected Dim InBuffer.a(InBytes); создаём массив соотв. размера RealInBytes = ReadSerialPortData(2, @InBuffer(), InBytes);переписываем в него If RealInBytes>0 For i=0 To (InBytes-1) ;составляем строку для записи в окно Temp_Text = Hex(InBuffer(i)) If Len(Temp_Text) = 2 Else Temp_Text = "0" + Temp_Text EndIf Text_In = Text_In + Temp_Text + " " Next i AddGadgetItem(4, -1, "Получен ответ:") AddGadgetItem(4, -1, Text_In) ;переписываем в окно EndIf EndIf EndIf EndProcedure Procedure Out_RTU() ; Передача данных в порт Protected Text_Out.s="", Temp_Text.s If IsSerialPort(2) ;если порт открыт WriteSerialPortData(2,@DataRTU(),8) ;передаём For i=0 To 7 ;составляем строку для записи в окно Temp_Text = Hex((DataRTU(i))) If Len(Temp_Text) = 2 Else Temp_Text = "0" + Temp_Text EndIf Text_Out.s = Text_Out.s + Temp_Text + " " Next i AddGadgetItem(4, -1, "Отправлен запрос:") AddGadgetItem(4, -1, Text_Out) ;переписываем в окно Else MessageRequester("Ошибка","Текущий порт недоступен!",16);Выводим сообщение об ошибке. EndIf EndProcedure Procedure Out_ASCII() ; Передача данных в порт Protected Text_Out.s="", Temp_Text.s If IsSerialPort(2) ;если порт открыт WriteSerialPortString(2,StringASCII,1) ;передаём For i=1 To 17 Temp_Text = Mid(StringASCII,i,1) Text_Out.s = Text_Out.s + Temp_Text + " " Next i AddGadgetItem(4, -1, "Отправлен запрос:") AddGadgetItem(4, -1, Text_Out) Else MessageRequester("Ошибка","Текущий порт недоступен!",16);Выводим сообщение об ошибке. EndIf EndProcedure If OpenWindow(0, 0, 0, 600, 400, "Modbus Tester. Бесплатное ПО. Разработчик Сёмин ВМ, г.Саратов.", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ButtonGadget(1, 240, 180, 80, 20, "Запрос") ComboBoxGadget(3, 50, 180, 60, 20, #PB_ComboBox_Editable) ;Выбор СОМ порта For i=1 To 99 AddGadgetItem(3,-1,"COM" + Str(i)) Next i SetGadgetState(3,0); Делаем активным нулевой пункт выпадающего списка. EditorGadget(4, 10, 230, 580, 160) ;окно сообщений TextGadget(5,110, 180, 20, 20, " ") ;Здесь будет отображаться результат открытия порта ButtonGadget(6, 340, 180, 90, 20, "Очистить окно") ;очистить окно сообщений ComboBoxGadget(2, 40, 40, 70, 20, #PB_ComboBox_Editable) AddGadgetItem(2,-1,"RTU") AddGadgetItem(2,-1,"ASCII") SetGadgetState(2,0) GadgetToolTip(2,"Протокол"); ComboBoxGadget(7, 120, 40, 60, 20, #PB_ComboBox_Editable) AddGadgetItem(7,-1,"75") AddGadgetItem(7,-1,"110") AddGadgetItem(7,-1,"134") AddGadgetItem(7,-1,"150") AddGadgetItem(7,-1,"300") AddGadgetItem(7,-1,"600") AddGadgetItem(7,-1,"1200") AddGadgetItem(7,-1,"1800") AddGadgetItem(7,-1,"2400") AddGadgetItem(7,-1,"4800") AddGadgetItem(7,-1,"7200") AddGadgetItem(7,-1,"9600") AddGadgetItem(7,-1,"14400") AddGadgetItem(7,-1,"19200") AddGadgetItem(7,-1,"38400") AddGadgetItem(7,-1,"57600") AddGadgetItem(7,-1,"115200") AddGadgetItem(7,-1,"128000") SetGadgetState(7,11); GadgetToolTip(7,"Скорость"); Baud.l=Val(GetGadgetText(7)) ComboBoxGadget(8, 190, 40, 40, 20, #PB_ComboBox_Editable) AddGadgetItem(8,-1,"N") AddGadgetItem(8,-1,"E") AddGadgetItem(8,-1,"M") AddGadgetItem(8,-1,"O") AddGadgetItem(8,-1,"S") SetGadgetState(8,0); GadgetToolTip(8,"Чётность"); ComboBoxGadget(9, 240, 40, 40, 20, #PB_ComboBox_Editable) AddGadgetItem(9,-1,"5") AddGadgetItem(9,-1,"6") AddGadgetItem(9,-1,"7") AddGadgetItem(9,-1,"8") SetGadgetState(9,3); GadgetToolTip(9,"Количество бит данных"); ComboBoxGadget(10, 290, 40, 40, 20, #PB_ComboBox_Editable) AddGadgetItem(10,-1,"1") AddGadgetItem(10,-1,"1.5") AddGadgetItem(10,-1,"2") SetGadgetState(10,0); GadgetToolTip(10,"Количество стоповых бит") EditorGadget(11, 90, 110, 30, 20) GadgetToolTip(11,"Адрес.hex") EditorGadget(12, 120, 110, 30, 20) GadgetToolTip(12,"Команда.hex") EditorGadget(13, 150, 110, 30, 20) GadgetToolTip(13,"Старший байт начального регистра.hex") EditorGadget(14, 180, 110, 30, 20) GadgetToolTip(14,"Младший байт начального регистра.hex") EditorGadget(15, 210, 110, 30, 20) GadgetToolTip(15,"Старший байт количества регистров.hex") EditorGadget(16, 240, 110, 30, 20) GadgetToolTip(16,"Младший байт количества регистров.hex") ButtonGadget(17, 130, 180, 90, 20, "Открыть порт") TextGadget(18,270, 118, 30, 20, ".HEX ") Repeat Baud=Val(GetGadgetText(7)) Data_bit=Val(GetGadgetText(9)) Stop_bit=Val(GetGadgetText(10)) If ((GetGadgetText(8))="N") Parity_status=0 ElseIf ((GetGadgetText(8))="E") Parity_status=2 ElseIf ((GetGadgetText(8))="M") Parity_status=3 ElseIf ((GetGadgetText(8))="O") Parity_status=1 ElseIf ((GetGadgetText(8))="S") Parity_status=4 EndIf InData() ;принимаем данные из UART Event = WaitWindowEvent() If Event=#PB_Event_Gadget Gadget = EventGadget ( ) ;узнаем какой гаджет был активирован If Gadget=1 ;если нажата кнопка Protocol.s = GetGadgetText(2) Select Protocol ;выбираем протокол передачи Case "RTU" CRC16() Out_RTU() Case "ASCII" LRC16() Out_ASCII() Default EndSelect ElseIf Gadget=17 ;если был активирован выпадающий список ComboBox.s=GetGadgetText(3) ; Считываем текст из текущего пункта выпадающего списка. Select_ComPort() ElseIf Gadget=6 ;нажата кнопка очистки ClearGadgetItems(4) ;удаляем содержимое окна с данными EndIf EndIf Until Event=#PB_Event_CloseWindow EndIf End
Текст копируется и вставляется. Непонятно зачем для области HEX использованы EditorGadget'ы если хватило бы StringGadget.
Текст копируется и вставляется. Непонятно зачем для области HEX использованы EditorGadget'ы если хватило бы StringGadget.
Установил PureBasic 5.31. Всё осталось без изменений. Текст в окне EditorGadget выделяется, но не копируется. Текст в окне ComboBoxGadget выделяется и копируется. Не понимаю, почему. Мне нужно скопировать текст, появившийся в окне EditorGadget. Что такое "область HEX"?
Как скопировать текст из окна EditorGadget? У меня он выделяется, но почему-то не копируется.
Никак:http://purebasic.mybb.ru/viewtopic.php?id=326
Нужно копировать с помощью клавиатуры.
Но если так сильно нужно меню, его можно добавить. http://purebasic.ucoz.com/publ/editorgadget/1-1-0-53
Всем привет. Есть варианты написания проги, которая заливает выбранный тхт фаил на мыло??? Может есть какая нибудь функция или процедура???
AddMailAttachment(#Mail, Description$, Filename$ [, MimeType$])
прогу сам пиши
Нужно копировать с помощью клавиатуры.
Но если так сильно нужно меню, его можно добавить. http://purebasic.ucoz.com/publ/editorgadget/1-1-0-53
Спасибо! Добавил меню по http://purebasic.ucoz.com/publ/editorgadget/1-1-0-53 и всё заработало!
Здравствуйте.
Не нашел ответа на свою проблему решил написать здесь. Прошу ткнуть носом или помочь.
При упаковки массива упаковщиком PB работа с массивом происходит только до определенного элемента (1032).
В чем проблема ?
Structure basa Name.s{10} y.w EndStructure Dim Array.basa(1439,22,3) fil.s="123654789.aus" Procedure UnPac(fil.s) Shared Array() If ReadFile(0, fil) length = Lof(0) *Mem = AllocateMemory(length) bytes = ReadData(0, *Mem, length) CloseFile(0) UnpackMemory(*Mem, @Array()) FreeMemory(*Mem) r=1 EndIf ProcedureReturn r EndProcedure Procedure Pac(fil.s) Shared Array() *Mem =AllocateMemory(1439*22*3*SizeOf(basa)+8) bb=PackMemory(@Array(), *Mem, 1439*22*3*SizeOf(basa)+8 , 1) If CreateFile(0, fil) WriteData(0, *Mem, bb) FreeMemory(*Mem) CloseFile(0) r=1 EndIf ProcedureReturn r EndProcedure For i=1 To 1439 Array(i,1,1)\Name="dffgh" Array(i,1,1)\y=i Pac(fil) Delay(10) Dim Array.basa(1439,22,3) UnPac(fil) Debug Array(i,1,1)\y Next End
А все разобрался, неправильно указан размер массива
получается так
Structure basa Name.s{10} y.w EndStructure Dim Array.basa(1439,22,3) fil.s="123654789.aus" Procedure UnPac(fil.s) Shared Array() If ReadFile(0, fil) length = Lof(0) *Mem = AllocateMemory(length) bytes = ReadData(0, *Mem, length) CloseFile(0) UnpackMemory(*Mem, @Array()) FreeMemory(*Mem) r=1 EndIf ProcedureReturn r EndProcedure Procedure Pac(fil.s) Shared Array() *Mem =AllocateMemory(1440*23*4*SizeOf(basa)+8) bb=PackMemory(@Array(), *Mem, 1440*23*4*SizeOf(basa)+8 , 1) If CreateFile(0, fil) WriteData(0, *Mem, bb) FreeMemory(*Mem) CloseFile(0) r=1 EndIf ProcedureReturn r EndProcedure For i=1 To 1439 Array(i,1,1)\Name="dffgh" Array(i,1,1)\y=i Pac(fil) Delay(10) Dim Array.basa(1439,22,3) UnPac(fil) Debug Array(i,1,1)\y Next End
А так вроде меньше строк
Structure basa Name.s{10} y.w EndStructure Dim Array.basa(1439,22,3) fil.s="123654789.aus" Procedure UnPac(fil.s) Shared Array() If OpenPack(fil) *Mem=NextPackFile() bytes=PackFileSize() CopyMemory(*Mem, @Array(), bytes) ClosePack() r=1 EndIf ProcedureReturn r EndProcedure Procedure Pac(fil.s) Shared Array() If CreatePack(fil) AddPackMemory(@Array(),1440*23*4*SizeOf(basa)+8,0) ClosePack() r=1 EndIf ProcedureReturn r EndProcedure For i=1 To 1439 Array(i,1,1)\Name="dffgh" Array(i,1,1)\y=i Pac(fil) Delay(10) Dim Array.basa(1439,22,3) UnPac(fil) Debug Array(i,1,1)\y Next End
Скажите в чем отличие этих примеров?
В чем смысл всего этого?
Лучше обновится до текущей версии, в которой библиотека Packer существенно переделана и улучшена. Добавлена поддержка ZIP и других типов архивов.
Смысл в записи данных в фаил для последующего просмотра. Это кусок из ранее написаной програмки которая работала а потом начала сбоить. Почему сбой я уже понял.
Эти два фрагмента делают одно и тоже, в чем их различие?
Если обновить до новой версии придется переписывать весь код ? Много различий у старой и новой версии?
Текущий вариант библиотеки Packer. http://www.purebasic.com/documentation/ … index.html
В версии 5.40 также добавили несколько форматов поддерживаемых архивов.
- Added 7z archive creation
- Added tar (gz and bzip2) archive support for creation and decompression
А на PureBasic можно писать под андройд
Нет.
Есть код:
#WINDOW_MAIN = 1 #FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered If OpenWindow(#WINDOW_MAIN, 0, 0, 200, 240, "Window Drawing", #FLAGS) If StartDrawing(WindowOutput(#WINDOW_MAIN)) Box(15, 15, 75, 75, RGB(255, 0, 0)) Circle(140, 125, 45, RGB(35, 158, 70)) ;The next 2D drawing commands draw a triangle LineXY(62, 140, 112, 220, RGB(0, 0, 255)) LineXY(112, 220, 12, 220, RGB(0, 0, 255)) LineXY(12, 220, 62, 140, RGB(0, 0, 255)) FillArea(62, 180, RGB(0, 0, 255), RGB(0, 0, 255)) StopDrawing() EndIf Repeat Event.l = WaitWindowEvent() Until Event = #PB_Event_CloseWindow EndIf End
В WinXP работает нормально. В Win7 64 bit выскакивает сообщение: СТРОКА 4 Синтаксическая ошибка. Вопрос: почему?
В Win7 64 bit нормально компилируется и работает.
В Win7 64 bit нормально компилируется и работает.
У меня версия 5.31 без дополнительных библиотек. Может быть, я что-то не установил? Что у Вас?
Тоже самое.
Какая версия? | OffTop | 03.10.2021 |
Мне постоянно пищет вот это | Вопросы по PureBasic | 14.10.2011 |
Размер экрана в пикселях | Вопросы по PureBasic | 13.02.2011 |
консоль | Вопросы по PureBasic | 19.03.2015 |
Полноэкранные приложения на purebasic | Вопросы по PureBasic | 08.03.2011 |
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)