Мне нужно сделать программу которая будет у меня спрашивать кое-что и в зависимости от моего ответа будет создавать определённый 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
Спасибо большое, я исправил и заработало!