PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Создание exeшника командой в коде


Создание exeшника командой в коде

Сообщений 1 страница 13 из 13

1

Мне нужно сделать программу которая будет у меня спрашивать кое-что и в зависимости от моего ответа будет создавать определённый exe-файл в определённой папку. Тоесть мой  вопрос: можно ли создать exe программу определённго PB кода не из меню "Компилятор", а кодом? Заранее спасибо

0

2

Илья написал(а):

Мне нужно сделать программу которая будет у меня спрашивать кое-что и в зависимости от моего ответа будет создавать определённый exe-файл в определённой папку.

Это в среде PureBasic или отдельно от среды?

Илья написал(а):

не из меню "Компилятор", а кодом?

Но все равно компилятор понадобится.
Думаю если подробнее опишешь задачу, то будет проще что-то посоветовать.

0

3

Я врядле смогу обьяснить вам свой проект потому что я ищё его сам доконца не продумал. Но я приведу вам простой аналог. Программа должна выглядеть так: появляется окно в котором я могу ввести текст. Я ввожу код PB и он в папке с программой создаёт exe введённого мною кода. Посоветуйте пожалуйста.

0

4

Используется компилятор 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

0

5

спасибо

0

6

Нужен альтернативный редактор кода?
Вот сам редактор http://gnozal.ucoz.com/jaPBeForPB400.zip
А вот его исходники http://gnozal.ucoz.com/jaPBeForPB400.7z

0

7

Вот я и реализовал то зачем задал этот вопрос. Это конвертер из 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 этой программы то не компилируется. Подскажите пожалуйста, что не так?

0

8

По моему, для этого не нужен компилятор - ресурсы еще не отменили.

0

9

Пётр написал(а):

По моему, для этого не нужен компилятор - ресурсы еще не отменили.

Я не понимаю о чём вы

0

10

По моему где-то здесь уже выкладывал эту прогу http://pure-basic.narod.ru/forum/Source_ModifyRes.rar
Программа конечно шуточная, но она показывает как работать с ресурсами.

0

11

Пётр, спасибо за примеры. Я посмотрел примеры ну и увидел что ехе можно сделать без помощи компилятора.

Пётр написал(а):

Но все равно компилятор понадобится.Думаю если подробнее опишешь задачу, то будет проще что-то посоветовать.

Странно, тут вы мне написали что без компилятора никак. Но не важно. Я не очень понял как работать с ресурсами. К оператору осуществляющиму компиляцию нет справки. Да я уже начал делать с помощю компилятора PB. Так что не стоит наверно парится мне. Скажите пожалуйста как решить мою проблему из 7го сообщения?

0

12

Илья написал(а):

Только вот есть одна проблема, если я указываю jpg файл который не в той же папки что и exe этой программы то не компилируется. Подскажите пожалуйста, что не так?

Не верно определяется путь к компилятору. Правильно делать так

Код:
 #PB_Compiler_Home+"\Compilers\pbcompiler" ....

и OpenFile(1,"a.pb") заменить на CreateFile, иначе если предыдущий файл будет длиннее текущего, то остаются в конце лишние символы, приводящие к ошибкам компилирования.

Ну и как было сказано выше, лучше этот просмоторщик скомпилировать заранее и программно к нему присоединять разные изображения. Тогда любой человек не имеющей компилятора сможет сделать такой вьюер одного файла.

0

13

Спасибо большое, я исправил и заработало!

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Создание exeшника командой в коде