Мне нужно сделать программу которая будет у меня спрашивать кое-что и в зависимости от моего ответа будет создавать определённый exe-файл в определённой папку. Тоесть мой вопрос: можно ли создать exe программу определённго PB кода не из меню "Компилятор", а кодом? Заранее спасибо
Создание exeшника командой в коде
Сообщений 1 страница 13 из 13
Поделиться210.04.2011 13:42:53
Мне нужно сделать программу которая будет у меня спрашивать кое-что и в зависимости от моего ответа будет создавать определённый exe-файл в определённой папку.
Это в среде PureBasic или отдельно от среды?
не из меню "Компилятор", а кодом?
Но все равно компилятор понадобится.
Думаю если подробнее опишешь задачу, то будет проще что-то посоветовать.
Поделиться310.04.2011 14:16:27
Я врядле смогу обьяснить вам свой проект потому что я ищё его сам доконца не продумал. Но я приведу вам простой аналог. Программа должна выглядеть так: появляется окно в котором я могу ввести текст. Я ввожу код PB и он в папке с программой создаёт exe введённого мною кода. Посоветуйте пожалуйста.
Поделиться410.04.2011 14:30:12
Используется компилятор PB:
PathCompiler.s="C:\Program Files\PureBasic\Compilers\pbcompiler.exe" ; Путь к компилятору
SourceFile.s="C:\Proga.pb" ; твой Исходник (что будешь компилировать)
OutEXE.s="C:\Proga.exe" ; Где создать исполняемый файл
If FileSize(GetPathPart(PathCompiler)+"PureBasic.exe")>0
DeleteFile(GetPathPart(PathCompiler)+"PureBasic.exe")
EndIf
SourceFile=Chr(34) + SourceFile + Chr(34) + " /EXE"
RunProgram(PathCompiler, SourceFile, GetPathPart(PathCompiler), #PB_Program_Wait)
Delay(1000)
If FileSize(GetPathPart(PathCompiler)+"PureBasic.exe")>0
If CopyFile(GetPathPart(PathCompiler)+"PureBasic.exe", OutEXE)
MessageRequester("", "Программа успешно скомпилирована", #MB_OK|#MB_ICONINFORMATION)
EndIf
EndIfПоделиться510.04.2011 14:59:50
спасибо
Поделиться610.04.2011 15:05:09
Нужен альтернативный редактор кода?
Вот сам редактор http://gnozal.ucoz.com/jaPBeForPB400.zip
А вот его исходники http://gnozal.ucoz.com/jaPBeForPB400.7z
Поделиться718.05.2011 18:36:25
Вот я и реализовал то зачем задал этот вопрос. Это конвертер из jpg в exe.
Procedure compiler(PathCompiler.s,SourceFile.s,OutEXE.s)
If FileSize(GetPathPart(PathCompiler)+"PureBasic.exe")>0
DeleteFile(GetPathPart(PathCompiler)+"PureBasic.exe")
EndIf
SourceFile=Chr(34) + SourceFile + Chr(34) + " /EXE"
RunProgram(PathCompiler, SourceFile, GetPathPart(PathCompiler), #PB_Program_Wait)
Delay(1000)
If FileSize(GetPathPart(PathCompiler)+"PureBasic.exe")>0
If CopyFile(GetPathPart(PathCompiler)+"PureBasic.exe", OutEXE)
MessageRequester("", "Успешно!", #MB_OK|#MB_ICONINFORMATION)
EndIf
EndIf
EndProcedure
OpenWindow(0,0,0,400,250,"Конвертер jpg-exe",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
StringGadget(1,10,60,350,25,"JPG")
ButtonGadget(2,400-35,60,25,25,"...")
StringGadget(3,10,90,350,25,"EXE")
ButtonGadget(4,400-35,90,25,25,"...")
StringGadget(5,10,120,380,25,"Название")
StringGadget(6,10,150,380,25,"Автор")
StringGadget(7,10,180,380,25,"Дата создания")
StringGadget(8,10,210,380,25,"Очень краткое описание")
ButtonGadget(9,10,10,100,30,"Конвертировать")
ButtonGadget(10,120,10,100,30,"О программе")
Repeat
q=WindowEvent()
If q=#PB_Event_Gadget
Select EventGadget()
Case 2;jpg показ
File1$ = OpenFileRequester("Выбирете jpg файл","", "jpg|*.jpg", 0)
SetGadgetText(1,file1$)
Debug file1$
Case 4;exe показ
File2$ = SaveFileRequester("Выбирете exe файл","", "exe|*.exe", 0)
SetGadgetText(3,file2$+".exe")
Debug file2$
Case 9;конвертировать
image.s=GetGadgetText(1)
name.s=GetGadgetText(5)
autor.s=GetGadgetText(6)
Dataa.s=GetGadgetText(7)
opis.s=GetGadgetText(8)
OpenFile(1,"a.pb")
WriteStringN(1, "#image="+Chr(34)+image+Chr(34))
WriteStringN(1, "#name="+Chr(34)+name+Chr(34))
WriteStringN(1, "#autor="+Chr(34)+autor+Chr(34))
WriteStringN(1, "#data="+Chr(34)+Dataa+Chr(34))
WriteStringN(1, "#opis="+Chr(34)+opis+Chr(34))
WriteStringN(1, "UseJPEGImageDecoder()")
WriteStringN(1, "CatchImage(0, ?Logo)" )
WriteStringN(1, "razmer$=Str(ImageWidth(0))+"+Chr(34)+"X"+Chr(34)+"+Str(ImageHeight(0))")
WriteStringN(1, "Repeat")
WriteStringN(1, " If ImageWidth(0)>800 Or ImageHeight(0)>600:ResizeImage(0,ImageWidth(0)/1.1, ImageHeight(0)/1.1):EndIf")
WriteStringN(1, "Until ImageHeight(0)<600 And ImageWidth(0)<800")
WriteStringN(1, "DataSection" )
WriteStringN(1, "Logo:IncludeBinary #image")
WriteStringN(1, "EndDataSection")
WriteStringN(1, "OpenWindow(1,20,20,ImageWidth(0)+40,ImageHeight(0)+80,#name, #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget| #PB_Window_SizeGadget|#PB_Window_ScreenCentered)")
WriteStringN(1, "ScrollAreaGadget(3, 5, 35, WindowWidth(1)-30,WindowHeight(1)-70, WindowWidth(1)-30,WindowHeight(1)-70, 5)")
WriteStringN(1, "ImageGadget(2, 10, 10, WindowWidth(1)-50, WindowHeight(1)-50,ImageID(0)) ")
WriteStringN(1, "CloseGadgetList() ")
WriteStringN(1, "ButtonGadget(4,5,5,50,25,"+Chr(34)+"+"+Chr(34)+")")
WriteStringN(1, "ButtonGadget(5,60,5,50,25,"+Chr(34)+"-"+Chr(34)+")")
WriteStringN(1, "ButtonGadget(6,115,5,100,25,"+Chr(34)+"О изображении"+Chr(34)+")")
WriteStringN(1, "Repeat")
WriteStringN(1, "q=WindowEvent() ")
WriteStringN(1, "Select q")
WriteStringN(1, "Case #PB_Event_SizeWindow :ResizeGadget(3, #PB_Ignore,#PB_Ignore, WindowWidth(1)-10,WindowHeight(1)-50)")
WriteStringN(1, "Case #PB_Event_Gadget")
WriteStringN(1, "Select EventGadget()")
WriteStringN(1, "Case 4")
WriteStringN(1, "a=ImageWidth(0)")
WriteStringN(1, "b=ImageHeight(0)")
WriteStringN(1, "CatchImage(0, ?Logo)" )
WriteStringN(1, "ResizeImage(0,a*1.1, b*1.1)")
WriteStringN(1, "SetGadgetAttribute(3,#PB_ScrollArea_InnerWidth,ImageWidth(0)+20)")
WriteStringN(1, "SetGadgetAttribute(3,#PB_ScrollArea_InnerHeight,ImageHeight(0)+20)")
WriteStringN(1, "SetGadgetState(2,ImageID(0))")
WriteStringN(1, "Case 5")
WriteStringN(1, "If ImageWidth(0) >10 And ImageHeight(0) >10")
WriteStringN(1, "a=ImageWidth(0)")
WriteStringN(1, "b=ImageHeight(0)")
WriteStringN(1, "CatchImage(0, ?Logo) ")
WriteStringN(1, "ResizeImage(0,a/1.1, b/1.1)")
WriteStringN(1, "SetGadgetAttribute(3,#PB_ScrollArea_InnerWidth,ImageWidth(0)+20)")
WriteStringN(1, "SetGadgetAttribute(3,#PB_ScrollArea_InnerHeight,ImageHeight(0)+20)")
WriteStringN(1, "SetGadgetState(2,ImageID(0))")
WriteStringN(1, "EndIf")
WriteStringN(1, "Case 6")
WriteStringN(1, "OpenWindow(7,0,0,300,115,"+Chr(34)+"О изображение"+Chr(34)+", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)")
WriteStringN(1, "TextGadget(8,10,10,280,15,"+Chr(34)+"Название: "+Chr(34)+"+#name,#PB_Text_Center)")
WriteStringN(1, "TextGadget(9,10,30,280,15,"+Chr(34)+"Автор: "+Chr(34)+"+#autor,#PB_Text_Center)")
WriteStringN(1, "TextGadget(10,10,50,280,15,"+Chr(34)+"Дата создания: "+Chr(34)+"+#data,#PB_Text_Center)")
WriteStringN(1, "TextGadget(11,10,70,280,15,"+Chr(34)+"Краткое описание: "+Chr(34)+"+#opis,#PB_Text_Center)")
WriteStringN(1, "TextGadget(12,10,90,280,15,"+Chr(34)+"Размер: "+Chr(34)+"+razmer$,#PB_Text_Center)")
WriteStringN(1, "EndSelect")
WriteStringN(1, "EndSelect")
WriteStringN(1, "If q=#PB_Event_CloseWindow and EventWindow()=7:closewindow(7):endif")
WriteStringN(1, "Until q=#PB_Event_CloseWindow and EventWindow()=1")
CloseFile(1)
Compiler(GetPathPart(ProgramFilename())+"Compilers\pbcompiler.exe",GetPathPart(ProgramFilename())+"a.pb",GetGadgetText(3));compiler(Путь к компилятору,твой Исходник,Где создать исполняемый файл)
Case 10;о программе
OpenWindow(1,1,1,400,120,"О программе",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
UseJPEGImageDecoder()
LoadImage(15, "img.jpg")
ImageGadget(16, 10,10, 60, 60, ImageID(15))
TextGadget(11,130,20,380,20,"О программе "+Chr(34)+"Конвертер"+Chr(34))
TextGadget(12,130,40,380,20,"Программа конвертирует jpg формат в exe")
TextGadget(13,130,60,380,20,"Система: Windows 98/2000/xp/vista/7")
TextGadget(14,130,80,380,20,"Автор: ***")
TextGadget(14,130,80,380,20,"email: ***")
OldGadgetList = UseGadgetList(WindowID(0))
EndSelect
EndIf
If q=#PB_Event_CloseWindow And EventWindow()=1 :CloseWindow(1):EndIf
Until q=#PB_Event_CloseWindow And EventWindow()=0Только вот есть одна проблема, если я указываю jpg файл который не в той же папки что и exe этой программы то не компилируется. Подскажите пожалуйста, что не так?
Поделиться818.05.2011 20:17:08
По моему, для этого не нужен компилятор - ресурсы еще не отменили.
Поделиться918.05.2011 21:06:02
По моему, для этого не нужен компилятор - ресурсы еще не отменили.
Я не понимаю о чём вы
Поделиться1018.05.2011 21:54:42
По моему где-то здесь уже выкладывал эту прогу http://pure-basic.narod.ru/forum/Source_ModifyRes.rar
Программа конечно шуточная, но она показывает как работать с ресурсами.
Поделиться1120.05.2011 22:19:51
Пётр, спасибо за примеры. Я посмотрел примеры ну и увидел что ехе можно сделать без помощи компилятора.
Но все равно компилятор понадобится.Думаю если подробнее опишешь задачу, то будет проще что-то посоветовать.
Странно, тут вы мне написали что без компилятора никак. Но не важно. Я не очень понял как работать с ресурсами. К оператору осуществляющиму компиляцию нет справки. Да я уже начал делать с помощю компилятора PB. Так что не стоит наверно парится мне. Скажите пожалуйста как решить мою проблему из 7го сообщения?
Поделиться1221.05.2011 07:30:42
Только вот есть одна проблема, если я указываю jpg файл который не в той же папки что и exe этой программы то не компилируется. Подскажите пожалуйста, что не так?
Не верно определяется путь к компилятору. Правильно делать так
#PB_Compiler_Home+"\Compilers\pbcompiler" ....
и OpenFile(1,"a.pb") заменить на CreateFile, иначе если предыдущий файл будет длиннее текущего, то остаются в конце лишние символы, приводящие к ошибкам компилирования.
Ну и как было сказано выше, лучше этот просмоторщик скомпилировать заранее и программно к нему присоединять разные изображения. Тогда любой человек не имеющей компилятора сможет сделать такой вьюер одного файла.
Поделиться1324.05.2011 23:05:54
Спасибо большое, я исправил и заработало!