ProgName.s=GetFilePart(ProgramFilename())
gggggg = CreateSemaphore_(#Null,0,1,@ProgName) ; Если прога уже запущена, то завершаем работу этой копии программы.
If gggggg<>0 And GetLastError_()=#ERROR_ALREADY_EXISTS
CloseHandle_(gggggg)
End
EndIf
; декодеры и энкодеры
UseJPEGImageEncoder()
UseJPEGImageDecoder()
UsePNGImageDecoder()
UsePNGImageEncoder()
;глобальные переменные
Global WDesk.f
Global HDesk.f
Global Image_0
Global IGwight.f
Global IGheight.f
Global u
Global rred
; получение размеров дисплея
ExamineDesktops()
WDesk=DesktopWidth(0)
HDesk=DesktopHeight(0)
HDesk=HDesk / 1024-0.02
WDesk=WDesk / 1280
If WDesk=0
WDesk=1
EndIf
If HDesk=0
HDesk=1
EndIf
;Константы
Enumeration
#Window_0
#Window_redaktor
#CHILD
EndEnumeration
Enumeration
#MENU
#MENUPOPUP
#TrackBar_0
#Text_0
#Text_1
#Text_2
#Spin_0
#Spin_1
#Spin_2
#Button_1
#Button_2
#Text_3
#Text_4
#Text_5
#TrackBar_redaktor
#Button_redaktor2
#Button_redaktor3
#Imagegadget_redaktor0
#Spin_redaktor0
#Spin_redaktor1
#Text_redaktor0
#Text_redaktor1
#Button_redaktor4
#CheckBox_redaktor
#CheckBox_redaktor1
#MDI
EndEnumeration
;Шрифты
Global FontID1
FontID1 = LoadFont(1, "Arial", 14, #PB_Font_Bold)
Global FontID2
FontID2 = LoadFont(2, "Arial", 16)
Global FontID3
FontID3 = LoadFont(3, "Arial", 16, #PB_Font_Bold)
Global FontID4
FontID4 = LoadFont(4, "Arial", 18*HDesk, #PB_Font_Bold)
Global FontID5
FontID5 = LoadFont(5, "Arial", 18)
Global FontID6
FontID6 = LoadFont(6, "Arial", 22, #PB_Font_Bold)
Global FontID7
FontID7 = LoadFont(7, "Arial", 20)
Global FontID8
FontID8 = LoadFont(8, "Arial", 10, #PB_Font_Bold)
Global FontID9
FontID9 = LoadFont(9, "Arial", 12*HDesk,#PB_Font_Bold)
Global FontID10
FontID10 = LoadFont(10, "Arial", 12)
;Объявление связанного списка
NewList FOTO.s()
If LoadImage(ima,"RED.png")
EndIf
; Окно редактора и гаджеты
Procedure Open_Window_REDAKTOR()
If OpenWindow(#Window_redaktor, 10*WDesk, 0, 1245*WDesk, 945*HDesk, "Редактор", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget |#PB_Window_SizeGadget | #PB_Window_TitleBar)
WindowBounds(#Window_redaktor, 1245*WDesk, 945*HDesk, 1245*WDesk, 945*HDesk)
TrackBarGadget(#TrackBar_redaktor, 435*WDesk, 895*HDesk, 350*WDesk, 35*HDesk, 0, 500)
CheckBoxGadget(#CheckBox_redaktor, 863*WDesk, 906*HDesk, 15*WDesk, 15*HDesk, "")
ButtonGadget(#Button_redaktor2, 890*WDesk, 895*HDesk, 120*WDesk, 35*HDesk, "Обрезать")
SetGadgetFont(#Button_redaktor2, FontID4)
ButtonGadget(#Button_redaktor3, 1050*WDesk, 895*HDesk, 185*WDesk, 35*HDesk, "Сохранить как")
SetGadgetFont(#Button_redaktor3, FontID4)
SpinGadget(#Spin_redaktor0, 15*WDesk, 902*HDesk, 100*WDesk, 30*HDesk, 0, 10)
SpinGadget(#Spin_redaktor1, 205*WDesk, 902*HDesk, 100*WDesk, 30*HDesk, 0, 10)
TextGadget(#Text_redaktor0, 20*WDesk, 875*HDesk, 80*WDesk, 25*HDesk, "Ширина", #PB_Text_Center)
SetGadgetFont(#Text_redaktor0, FontID9)
TextGadget(#Text_redaktor1, 210*WDesk, 875*HDesk, 80*WDesk, 25*HDesk, "Высота", #PB_Text_Center)
SetGadgetFont(#Text_redaktor1, FontID9)
CheckBoxGadget(#CheckBox_redaktor1, 152*WDesk, 908*HDesk, 15*WDesk, 15*HDesk, "")
If CreatePopupImageMenu(#MENUPOPUP, #PB_Menu_ModernLook)
MenuItem(6, "Сохранить в формате JPG")
MenuItem(7, "Сохранить в формате PNG")
MenuItem(8, "Сохранить в формате BMP")
MenuItem(9, "Сохранить в формате ICO")
EndIf
EndIf
EndProcedure
; Окно кодировщика и гаджеты
Procedure Open_Window_0()
If OpenWindow(#Window_0, 483*WDesk, 334*HDesk, 274, 160, "Меняем размеры и формат", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
WindowBounds(#Window_0, 274, 160, 274, 160)
TrackBarGadget(#TrackBar_0, 5, 75, 190, 30, 1, 3, #PB_TrackBar_Ticks)
TextGadget(#Text_0, 5, 110, 30, 20, "BMP", #PB_Text_Center)
TextGadget(#Text_1, 80, 110, 40, 20, "JPEG", #PB_Text_Center)
TextGadget(#Text_2, 160, 110, 35, 15, "PNG", #PB_Text_Center)
SpinGadget(#Spin_0, 15, 38, 60, 20, 0, 2000,#PB_Spin_Numeric)
SpinGadget(#Spin_1, 90, 38, 60, 20, 0, 2000,#PB_Spin_Numeric)
SpinGadget(#Spin_2, 220, 38, 40, 20, 0, 10,#PB_Spin_Numeric)
SetGadgetState (#Spin_0, 320)
SetGadgetState (#Spin_1, 240)
SetGadgetState (#Spin_2, 10)
ButtonGadget(#Button_1, 215, 113, 45, 20, "ОК")
ButtonGadget(#Button_2, 200, 80, 60, 20, "Обрезать")
TextGadget(#Text_3, 10, 10, 60, 20, "Ширина", #PB_Text_Center)
TextGadget(#Text_4, 85, 10, 60, 20, "Высота", #PB_Text_Center)
TextGadget(#Text_5, 210, 10, 60, 20, "Качество", #PB_Text_Center)
If CreateImageMenu(#MENU, WindowID(#Window_0),#PB_Menu_ModernLook)
MenuTitle("Файл")
MenuItem( 1, "Открыть Файл(ы)")
OpenSubMenu("Настройки")
MenuItem( 2, "Создать контекстное меню")
MenuItem( 3, "Удалить контекстное меню")
CloseSubMenu()
MenuBar()
MenuItem(4, "О программе")
MenuItem(5,"Выход")
EndIf
EndIf
EndProcedure
; Процедура очистки окна
Procedure ClearAll()
b.RECT
b\right = WindowWidth(#Window_redaktor)
b\bottom = WindowHeight(#Window_redaktor)
InvalidateRect_(WindowID(#Window_redaktor), @b, 1)
SendMessage_(WindowID(#Window_redaktor), #WM_PAINT, 0, 0)
EndProcedure
;Кодирование Большого числа файлов
Procedure ENCOD(File$)
If LoadImage( Fotka, File$ )
ResizeImage( Fotka, GetGadgetState(#Spin_0), GetGadgetState(#Spin_1))
If ExamineDirectory(#PB_Any, GetPathPart(File$)+"Encoded", "*.*")=0
CreateDirectory(GetPathPart(File$)+"Encoded")
EndIf
Select GetGadgetState(#TrackBar_0)
Case 1
ImagePlugin=#PB_ImagePlugin_BMP
NAME$=ReplaceString(GetFilePart(File$), GetExtensionPart(File$), "bmp")
Case 2
ImagePlugin=#PB_ImagePlugin_JPEG
NAME$=ReplaceString(GetFilePart(File$), GetExtensionPart(File$), "jpg")
Case 3
ImagePlugin=#PB_ImagePlugin_PNG
NAME$=ReplaceString(GetFilePart(File$), GetExtensionPart(File$), "png")
EndSelect
PUTYA$=GetPathPart(FILE$)+"Encoded\"+NAME$
If SaveImage( Fotka, PUTYA$,ImagePlugin,GetGadgetState(#Spin_2))
EndIf
EndIf
EndProcedure
;Процедура рисования
Procedure draw99()
If rred=1
StartDrawing( WindowOutput(#Window_redaktor))
DrawImage(ImageID(Image_0), IGwight, IGheight, ImageWidth(Image_0)*u/100, ImageHeight(Image_0)*u/100)
StopDrawing()
EndIf
EndProcedure
;{------------------------------------------КОД----------------------------------------------------------------------------
; Открытие окна кодировщика
Open_Window_0()
; ГЛАВНЫЙ ЦИКЛ
Repeat
ev=WaitWindowEvent()
Select ev
Case #PB_Event_Menu
Select EventMenu()
Case 1 ; Выбрать файлы для кодировки или редактирования
ClearList(FOTO.s()) ; очищаем связанный список
File$ = OpenFileRequester("Выбрать файл(ы)", "", "PNG JPG BMP|*.png;*.jpg;*.JPG;*.JEPG;*.jpeg;*.bmp|", 0,#PB_Requester_MultiSelection)
kontekst=1
While File$
AddElement(FOTO())
FOTO() = File$
File$ = NextSelectedFileName()
Wend
Case 2 ; Создаем контекстное меню в реестре
If KONTEXT_MENU_CREATE("ИЗМЕНИТЬ ПАРАМЕТРЫ ФОТО","PhotoDef.exe")
MessageRequester("Информация", "Контекстное меню создано!")
EndIf
Case 3 ; Удаляем меню в реестре
If DELETE_KONTEXT("ИЗМЕНИТЬ ПАРАМЕТРЫ ФОТО")
MessageRequester("Информация", "Контекстное меню удалено!")
EndIf
Case 4 ; О программе
MessageRequester("О программе", "Программа создана Станиславом Будиновым. Сайт: www.mneniya.ucoz.ru")
Case 5
If DeleteFile("PHOTODEF99.reg") ; удаляем РегистрФайл
EndIf
End ; выходим
EndSelect
Case #PB_Event_Gadget
If EventGadget()= #Button_1
If kontekst=0 ; Если вызов был из контекстного меню
If ReadFile(0, GetTemporaryDirectory()+"FHOTODEF.trtr") ;Читаем временный файл и кодируем
While Eof(0) = 0
File$=ReadString(0)
ENCOD(File$)
AddElement(FOTO())
FOTO() = File$
Wend
CloseFile(0)
MessageRequester("Информация", "Все готово")
DeleteFile(GetTemporaryDirectory()+"FHOTODEF.trtr") ; Удаляем временный файл
EndIf
Else ; если вызов был из программы
ResetList(FOTO()) ; читаем связанный список и кодируем
While NextElement(FOTO())
ENCOD(FOTO())
Wend
MessageRequester("Информация", "Все готово")
EndIf
EndIf
If EventGadget()= #Button_2 ; включаем редактор
rred=1 ; флаг для рисования, что редактор включен
Open_Window_REDAKTOR() ; окно редактора
Select kontekst
Case 0 ; вызов из контекстного меню фото для редактора
If ReadFile(0, GetTemporaryDirectory()+"FHOTODEF.trtr") ;Читаем временный файл
While Eof(0) = 0
AddElement(FOTO())
FOTO() = ReadString(0)
Wend
LoadImage(Image_0,FOTO()) ; берем последнее фото из связанного списка
CloseFile(0)
DeleteFile(GetTemporaryDirectory()+"FHOTODEF.trtr") ; Удаляем временный файл
EndIf
Case 1 ;вызов из программы фото для редактора
ResetList(FOTO()) ;сбрасываем лист
While NextElement(FOTO()) ; читаем связанный список и берем последнее фото
LoadImage(Image_0,FOTO())
Wend
EndSelect
Result_ImageWidth= ImageWidth(Image_0) ; узнаем ширину фото
Result_ImageHeight= ImageHeight(Image_0) ; узнаем высоту фото
If Result_ImageWidth>1215*WDesk Or Result_ImageHeight>760*HDesk ; если размер больше гаджета
;Проверяем по ширине
If Result_ImageWidth>1215*WDesk
Result_ImageHeight=1215*WDesk*Result_ImageHeight/Result_ImageWidth
Result_ImageWidth=1215*WDesk ;Ставим размер если ширина
EndIf
; Проверяем по высоте
If Result_ImageHeight>760*HDesk
Result_ImageWidth=Result_ImageWidth*760*HDesk/Result_ImageHeight
Result_ImageHeight=760*HDesk ;Ставим размер если высота
EndIf
EndIf
;ставим TrackBar по умолчанию в процентах
SetGadgetState(#TrackBar_redaktor,Result_ImageWidth/ImageWidth(Image_0)*100)
IGwight=(1245*WDesk-Result_ImageWidth)/2 ;Узнаем размещение ImageGadget по оси Х
IGheight=(937*HDesk-Result_ImageHeight)/2 ;Узнаем размещение ImageGadget по оси Y
EndIf
; Клик меню для сохранения фото после редактирования
If EventGadget()= #Button_redaktor3
DisplayPopupMenu(#MENUPOPUP, WindowID(#Window_redaktor),WindowX(#Window_redaktor)+1057,WindowY(#Window_redaktor)+835)
EndIf
;событие изменения TrackBar, для ZOOM
If EventGadget()= #TrackBar_redaktor
u=GetGadgetState(#TrackBar_redaktor)
If u=0
u=1 ;не допускаем нуля
EndIf
IGwight.f=(1245*WDesk-ImageWidth(Image_0)*u/100)/2 ;Центровка фото по ширине
IGheight.f=(937*HDesk-ImageHeight(Image_0)*u/100)/2 ;Центровка фото по высоте
ClearAll() ;запуск очистки после рисования
SmartWindowRefresh(#Window_redaktor, 100) ; уменьшение мерцания
EndIf
; Удаляем РегФайл и выходим
Case #PB_Event_CloseWindow
If DeleteFile("PHOTODEF99.reg")
EndIf
End
EndSelect
draw99() ;пускаем рисование
ForEver
;}-------------------------------------------------------------------------------------------------------------------------------