purebasic.info

PureBasic forum
Текущее время: Чт дек 14, 2017 12:50 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: Пт авг 04, 2017 3:56 pm 
Не в сети
студент

Зарегистрирован: Пт авг 04, 2017 3:27 pm
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Здравствуйте. Пытаюсь разобраться, но я совсем новичок. Была такая тема - создание exe файла из основной программы без компилятора с помощью передачи ресурсов viewtopic.php?f=1&t=1616 и был приведен пример http://pure-basic.narod.ru/forum_files/ ... ifyRes.rar . Но там передаются текстовые данные.
Подскажите, пожалуйста, каким образом можно передать изображение, картинку в создаваемый файл exe?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт авг 04, 2017 4:37 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11070
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
Veresk писал(а):
каким образом можно передать изображение, картинку в создаваемый файл exe
Картинку нужно преобразовать двоичный формат функцией EncodeImage и записать в ресурс исполняемого файла. Загрузить из ресурса нужно функцией CatchImage.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт авг 04, 2017 10:55 pm 
Не в сети
студент

Зарегистрирован: Пт авг 04, 2017 3:27 pm
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
Картинку нужно преобразовать двоичный формат функцией EncodeImage и записать в ресурс исполняемого файла. Загрузить из ресурса нужно функцией CatchImage.

Спасибо за подсказку. Попытался сделать, но не получается :(
При создании конечного файла, видно по размеру, что картинка добавилась, но выводится пустая форма.
Код главной программы
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
Global Image0, Image_size
 
;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration
 
;- Gadget Constants
;
Enumeration
  #Button_0
EndEnumeration
 
UseGIFImageDecoder()
UseJPEGImageDecoder()
UseJPEG2000ImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()
 
 
Image0 = EncodeImage(LoadImage(#PB_Any, "111.bmp"))
Image_size = MemorySize(Image0)
 
Procedure Open_Window_0()
  If OpenWindow(#Window_0, 226, 198, 328, 92, "Конструктор прорамм на PureBasic",  #PB_Window_MinimizeGadget | #PB_Window_Invisible | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
      ButtonGadget(#Button_0, 85, 55, 140, 30, "Создать программу")
      HideWindow(#Window_0,0)
  EndIf
EndProcedure
 
Procedure Create_File(File.s, Image0)
 Result=0
 If CreateFile(0,File)
   WriteData(0,?M1, ?M2-?M1)
   CloseFile(0)
   Delay(20)
   hUpdate=BeginUpdateResource_(@File, 0)
   If hUpdate
     UpdateResource_(hUpdate, #RT_RCDATA, 1, 1033, @Image0, Image_size)
     EndUpdateResource_(hUpdate, #False)
     Result=1
     MessageRequester("", "Программа успешно создана", #MB_OK|#MB_ICONINFORMATION)
   EndIf
 Else
   MessageRequester("", "Не удалось создать файл!", #MB_OK|#MB_ICONERROR)
 EndIf
 
 If Result=0
   DeleteFile(File)
 EndIf
EndProcedure
 
Open_Window_0()
 
Repeat
   Event=WaitWindowEvent()
   
   If Event=#PB_Event_Gadget
     If EventGadget()=#Button_0
 
       File.s=SaveFileRequester("","","Исполняемые файлы (exe)|*.exe",0)
       If File<>""
         If LCase(GetExtensionPart(File))="" : File+".exe" : EndIf
         Create_File(File.s, Image0)
       EndIf
     EndIf
   EndIf
   
Until Event=#PB_Event_CloseWindow
FreeMemory (Image0)
End
 
DataSection
 M1:
 IncludeBinary "prog.exe"
 M2:
EndDataSection
 



Код создаваемого exe
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
OpenWindow(#PB_Any,100,100,600,600,"Form1")
 
Image1 = CatchImage(#PB_Any, ?Image0)
 
ImageGadget(#PB_Any,0,0,300,300,Image1)
 
Repeat: Until  WaitWindowEvent()=#PB_Event_CloseWindow
DataSection
 Image0:
EndDataSection
 



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт авг 04, 2017 11:20 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11070
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
При загрузке картинки из файла можно немного упростить вычисления
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Global Image0=0, Image_size=0
 
;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration
 
;- Gadget Constants
;
Enumeration
  #Button_0
EndEnumeration
 
; UseGIFImageDecoder()
; UseJPEGImageDecoder()
; UseJPEG2000ImageDecoder()
; UsePNGImageDecoder()
; UseTIFFImageDecoder()
; UseTGAImageDecoder()
 
 
If ReadFile(0, "111.bmp")
  Image_size = Lof(0)
  Image0 = AllocateMemory(Image_size)
  ReadData(0, Image0, Image_size)
  CloseFile(0)
EndIf
 
Procedure Open_Window_0()
  If OpenWindow(#Window_0, 226, 198, 328, 92, "Конструктор прорамм на PureBasic",  #PB_Window_MinimizeGadget | #PB_Window_Invisible | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
      ButtonGadget(#Button_0, 85, 55, 140, 30, "Создать программу")
      HideWindow(#Window_0,0)
  EndIf
EndProcedure
 
Procedure Create_File(File.s, Image0)
 Result=0
 If CreateFile(0,File)
   WriteData(0,?M1, ?M2-?M1)
   CloseFile(0)
   Delay(20)
   hUpdate=BeginUpdateResource_(@File, 0)
   If hUpdate
     UpdateResource_(hUpdate, #RT_RCDATA, 1, 1033, @Image0, Image_size)
     EndUpdateResource_(hUpdate, #False)
     Result=1
     MessageRequester("", "Программа успешно создана", #MB_OK|#MB_ICONINFORMATION)
   EndIf
 Else
   MessageRequester("", "Не удалось создать файл!", #MB_OK|#MB_ICONERROR)
 EndIf
 
 If Result=0
   DeleteFile(File)
 EndIf
EndProcedure
 
Open_Window_0()
 
Repeat
   Event=WaitWindowEvent()
   
   If Event=#PB_Event_Gadget
     If EventGadget()=#Button_0
 
       File.s=SaveFileRequester("","","Исполняемые файлы (exe)|*.exe",0)
       If File<>""
         If LCase(GetExtensionPart(File))="" : File+".exe" : EndIf
         Create_File(File.s, Image0)
       EndIf
     EndIf
   EndIf
   
Until Event=#PB_Event_CloseWindow
FreeMemory (Image0)
End
 
DataSection
 M1:
 IncludeBinary "prog.exe"
 M2:
EndDataSection



Veresk писал(а):
Код создаваемого exe
Нет чтения данных из ресурса.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Procedure GetResurseImage(ResNumber, Image)
  Res=0
  lHLib = LoadLibrary_(ProgName)
  If lHLib
    lHRes = FindResource_(lHLib, Number, #RT_RCDATA)
    If lHRes
      lHResLoad = LoadResource_(lHLib, lHRes)
      lSz = SizeofResource_(lHLib, lHRes)
      If lHResLoad And lSz>0
        *lPResLock = LockResource_(lHResLoad)
        If *lPResLock
          Res = CatchImage(Image, *lPResLock, lSz)
        EndIf
      EndIf
    EndIf
    FreeLibrary_(lHLib)
  EndIf  
 
  ProcedureReturn  Res
EndProcedure
 
OpenWindow(#PB_Any,100,100,600,600,"Form1")
Image1 = GetResurseImage(1, 0)
ImageGadget(#PB_Any,0,0,300,300,Image1)
 
Repeat: Until  WaitWindowEvent()=#PB_Event_CloseWindow


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб авг 05, 2017 10:23 pm 
Не в сети
студент

Зарегистрирован: Пт авг 04, 2017 3:27 pm
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Фух, наконец-то я ее добил. В главной программе в UpdateResource_ поменял адрес @Image на указатель *Image и все заработало.
Вот рабочий код
Главная программа
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 
Global Image0=0, Image_size=0
 
;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration
 
;- Gadget Constants
;
Enumeration
  #Button_0
EndEnumeration
 
If ReadFile(0, "111.bmp")
  Image_size = Lof(0)
  Image0 = AllocateMemory(Image_size)
  ReadData(0, Image0, Image_size)
  CloseFile(0)
EndIf
 
Procedure Open_Window_0()
  If OpenWindow(#Window_0, 226, 198, 328, 92, "Конструктор прорамм на PureBasic",  #PB_Window_MinimizeGadget | #PB_Window_Invisible | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
      ButtonGadget(#Button_0, 85, 55, 140, 30, "Создать программу")
      HideWindow(#Window_0,0)
  EndIf
EndProcedure
 
Procedure Create_File(File.s, Image)
  Result=0
  *Image_p = Image
 If CreateFile(0,File)
   WriteData(0,?M1, ?M2-?M1)
   CloseFile(0)
   Delay(20)
   hUpdate=BeginUpdateResource_(@File, 0)
   If hUpdate
     UpdateResource_(hUpdate, #RT_RCDATA, 1, 1033, *Image_p, Image_size)
     EndUpdateResource_(hUpdate, #False)
     Result=1
     MessageRequester("", "Программа успешно создана", #MB_OK|#MB_ICONINFORMATION)
   EndIf
 Else
   MessageRequester("", "Не удалось создать файл!", #MB_OK|#MB_ICONERROR)
 EndIf
 
 If Result=0
   DeleteFile(File)
 EndIf
EndProcedure
 
Open_Window_0()
 
Repeat
   Event=WaitWindowEvent()
   
   If Event=#PB_Event_Gadget
     If EventGadget()=#Button_0
       File.s=SaveFileRequester("","","Исполняемые файлы (exe)|*.exe",0)
       If File<>""
         If LCase(GetExtensionPart(File))="" : File+".exe" : EndIf
         Create_File(File.s, Image0)
       EndIf
     EndIf
   EndIf
   
Until Event=#PB_Event_CloseWindow
FreeMemory (Image0)
End
 
DataSection
 M1:
 IncludeBinary "prog.exe"
 M2:
EndDataSection
 



Код создаваемого exe
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
Global ProgName.s=ProgramFilename()
 
Procedure GetResurseImage(ResNumber, Image)
  Res=0
  lHLib = LoadLibrary_(ProgName)
  If lHLib
    lHRes = FindResource_(lHLib, ResNumber, #RT_RCDATA)
    If lHRes
      lHResLoad = LoadResource_(lHLib, lHRes)
      lSz = SizeofResource_(lHLib, lHRes)
      If lHResLoad And lSz>0
        *lPResLock = LockResource_(lHResLoad)
        If *lPResLock
          Res = CatchImage(Image, *lPResLock, lSz)
        EndIf
      EndIf
    EndIf
    FreeLibrary_(lHLib)
  EndIf  
  ProcedureReturn Res
EndProcedure
 
OpenWindow(#PB_Any,100,100,600,600,"Form1")
Image1 = GetResurseImage(1, 0)
ImageGadget(#PB_Any,0,0,0,0,Image1)
Repeat: Until  WaitWindowEvent()=#PB_Event_CloseWindow
 



Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB