Генератор MessageRequester
Удобный инструмент генерирующий код сообщений, функции
MessageRequester
Перевёл и адаптировал
kvitaliy
Доработал
Пётр.
Подключается, как все остальные инструменты.
Скачать
архив
; Copyright: Thomas Schulz, Berlin
; Перевёл и адаптировал kvitaliy
; **********************
; Доработал Пётр.
; "Выбросил" EditorGadget глючит сильно, в место него Scintilla
; Оптимизировал процесс создания кода, чтобы избавится от лишних пробелов и кавычек
;***********************
;-Global
Global jaPBe_Handle
;- Plugin Constants
#mywm_Plugin_Cancel = #WM_USER+18
#WMCD_InsertText = 2
;- Window Constants
#frmMain = 1
;- Gadget Constants
Enumeration 1
#txtTitle
#txtMessage
#lvIcons
#cbModal
#cbButtons
#cbDefButton
#btnTest
#btnjaPBe
#btnCopy
#txtHomepage
EndEnumeration
SysPath.s=GetSystemDirectory()+"\" ; Путь к системной папке
Declare.s PB_Scintilla()
; Пытаемся найти Scintilla.dll
If InitScintilla("Scintilla.dll")=0
PathScintilla.s=GetProgramPath()+"Compilers\Scintilla.dll"
If InitScintilla(PathScintilla)=0 ; Ищем файл в папке Пурика
If InitScintilla(PB_Scintilla())=0 ; Ищем Пурик
MessageRequester("MessageRequester", "Приложению не удалось запуститься" + Chr(10) + "из-за отсутствия файла Scintilla.dll", #MB_OK|#MB_ICONERROR)
End
EndIf
EndIf
EndIf
Procedure.s PB_Scintilla()
; Ищем текущий PB если другими способами так и не удалось обнаружить Scintilla.dll
Protected PathScintilla.s="", PurikPut.s=""
PurikString.s=GetPureBasicDirectoryInstallation() ; Путь к Пурику (Droopy Library)
If PurikString<>""
pos=FindString(PurikString,Chr(34),1)
If pos=0 ; Найден PB4.00
PurikPut.s=GetPathPart(PurikString)
Else ; Найден PB4.10
PurikPut.s=GetPathPart(Left(PurikString,pos-1))
EndIf
EndIf
PathScintilla=PurikPut+"Compilers\Scintilla.dll"
ProcedureReturn PathScintilla
EndProcedure
;- Globale Variablen
Global Title.s, Option.l,Option$, Result.l,SelectEntry$
Procedure SendDataS(ziel,Type,Message$)
cd.COPYDATASTRUCT
cd\dwData=Type
cd\cbData=Len(Message$)+1
cd\lpData=@Message$
ProcedureReturn SendMessage_(ziel,#WM_COPYDATA,WindowID(1),cd)
EndProcedure
Procedure ScintillaCallBack(Gadget, *scinotify.SCNotification)
; Обработчик событий для Scintilla
EndProcedure
Procedure ScintillaInit(Gadget)
; Настройка редактора Scintilla
ScintillaSendMessage(Gadget, #SCI_SETVIEWWS,1) ; Отображение точек на месте пробелов
ScintillaSendMessage(Gadget, #SCI_SETWHITESPACEFORE,1,0 ) ; Цвет этих точек
; Цвет выделения
ScintillaSendMessage(Gadget, #SCI_SETSELFORE,1,RGB(255,255,255) ) ; Шрифт
ScintillaSendMessage(Gadget, #SCI_SETSELBACK,1,RGB(15, 86, 204)) ; Выделенная область
ScintillaSendMessage(Gadget, #SCI_SETCARETFORE,RGB(129, 2, 126) ) ; Цвет курсора
ScintillaSendMessage(Gadget, #SCI_SETCARETWIDTH,2) ; Ширина курсора
; Отключаем отображения полей авто нумирации, маркеров, свёртки
ScintillaSendMessage(Gadget, #SCI_SETMARGINWIDTHN, 0, 0)
ScintillaSendMessage(Gadget, #SCI_SETMARGINWIDTHN, 1, 0)
ScintillaSendMessage(Gadget, #SCI_SETMARGINWIDTHN, 2, 0)
EndProcedure
Procedure Open_frmMain()
If OpenWindow(#frmMain, 0, 0, 540, 363+80,"MessageRequester",#PB_Window_SystemMenu|#PB_Window_Invisible|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#frmMain))
TextGadget(#PB_Any, 145, 10, 60, 15, "Заголовок:")
StringGadget(#txtTitle , 140, 30, 390, 25, "")
TextGadget(#PB_Any , 145, 60, 60, 15, "Текст:")
;EditorGadget(#txtMessage , 140, 80, 390, 160+80)
ScintillaGadget(#txtMessage , 140, 80, 390, 160+80,@ScintillaCallBack() )
ScintillaInit(#txtMessage)
TextGadget(#PB_Any, 15, 10, 45, 15, "Иконка:")
ListIconGadget(#lvIcons , 10, 30, 120-20, 385, "Иконка:", 200, #PB_ListIcon_AlwaysShowSelection)
;305/4*5
TextGadget(#PB_Any , 145, 245+80, 60, 15, "Вид:")
ComboBoxGadget(#cbModal , 145, 265+80, 120, 120)
TextGadget(#PB_Any , 290, 245+80, 60, 15, "Кнопки:")
ComboBoxGadget(#cbButtons , 290, 265+80, 120, 120)
TextGadget(#PB_Any , 425, 245+80, 120, 15, "Кнопка по умолчанию:")
ComboBoxGadget(#cbDefButton, 435, 265+80, 95, 120)
ButtonGadget(#btnTest , 150, 310+80, 100, 25, "Тест")
;ButtonGadget(#btnjaPBe , 290, 310+80, 100, 25, "Редактор"); эта фича не работает!
ButtonGadget(#btnCopy , 430, 310+80, 100, 25, "Скопировать")
;GadgetToolTip(#btnjaPBe, "Вставить в редактор")
GadgetToolTip(#btnCopy, "Скопировать в буфер обмена")
HyperLinkGadget(#txtHomepage, 10, 345+80, 300, 15, "Официальная страница PureBasic на русском языке © ", RGB(0, 0, 128))
GadgetToolTip(#txtHomepage, "PureBasic по русски")
; ;- Иконки кому надо - сами ищите свои!
; iconNone.l = CatchImage(0, ?iconNone)
; iconStop.l = LoadIcon_(0, #IDI_HAND)
; iconQuestion.l = LoadIcon_(#Null, #IDI_QUESTION)
; iconExclamation.l = LoadIcon_(WindowID(#frmMain), #IDI_EXCLAMATION)
; iconInformation.l = LoadIcon_(WindowID(#frmMain), #IDI_ASTERISK)
EndIf
EndIf
EndProcedure
Procedure CreateMessageRequester()
Title = GetGadgetText(#txtTitle)
Select GetGadgetState(#cbButtons)
Case 0
Option = #MB_OK:Option$="#MB_OK":SelectEntry$=""
Result = #False
Case 1
Option = #MB_OKCANCEL:Option$="#MB_OKCANCEL":SelectEntry$="#IdOK|#IdCancel"
Result = #True
Case 2
Option = #MB_ABORTRETRYIGNORE:Option$="#MB_ABORTRETRYIGNORE":SelectEntry$="#IdAbort|#IdRetry|#IdIgnore"
Result = #True
Case 3
Option = #MB_YESNOCANCEL:Option$="#MB_YESNOCANCEL":SelectEntry$="#IdYes|#IdNo|#IdCancel"
Result = #True
Case 4
Option = #MB_YESNO:Option$="#MB_YESNO":SelectEntry$="#IdYes|#IdNo"
Result = #True
Case 5
Option = #MB_RETRYCANCEL:Option$="#MB_RETRYCANCEL":SelectEntry$="#IdRetry|#IdCancel"
Result = #True
EndSelect
Select GetGadgetState(#lvIcons)
Case 1
Option = Option | #MB_ICONERROR
If Option$:Option$+"|":EndIf:Option$+"#MB_ICONERROR"
Case 2
Option = Option | #MB_ICONQUESTION
If Option$:Option$+"|":EndIf:Option$+"#MB_ICONQUESTION"
Case 3
Option = Option | #MB_ICONWARNING
If Option$:Option$+"|":EndIf:Option$+"#MB_ICONWARNING"
Case 4
Option = Option | #MB_ICONINFORMATION
If Option$:Option$+"|":EndIf:Option$+"#MB_ICONINFORMATION"
EndSelect
Select GetGadgetState(#cbModal)
Case 1
Option = Option | #MB_TASKMODAL
If Option$:Option$+"|":EndIf:Option$+"#MB_TASKMODAL"
Case 2
Option = Option | #MB_SYSTEMMODAL
If Option$:Option$+"|":EndIf:Option$+"#MB_SYSTEMMODAL"
EndSelect
Select GetGadgetState(#cbDefButton)
Case 1
Option = Option | #MB_DEFBUTTON2
If Option$:Option$+"|":EndIf:Option$+"#MB_DEFBUTTON2"
Case 2
Option = Option | #MB_DEFBUTTON3
If Option$:Option$+"|":EndIf:Option$+"#MB_DEFBUTTON3"
EndSelect
EndProcedure
Open_frmMain()
; ListIconGadget initialisieren SysPath
ChangeListIconGadgetDisplay(#lvIcons, 0)
AddGadgetItem(#lvIcons, 0, "Нет иконки",0)
AddGadgetItem(#lvIcons, 1, "Стоп", LoadIcon_(0, #IDI_HAND) );ExtractIcon_(0,SysPath+"user32.dll",3))
AddGadgetItem(#lvIcons, 2, "Вопрос", LoadIcon_(0, #IDI_QUESTION)) ;ExtractIcon_(0,SysPath+"user32.dll",2))
AddGadgetItem(#lvIcons, 3, "Внимание!", LoadIcon_(0, #IDI_EXCLAMATION)) ;ExtractIcon_(0,SysPath+"storprop.dll",0))
AddGadgetItem(#lvIcons, 4, "Информация", LoadIcon_(0, #IDI_ASTERISK)) ;ExtractIcon_(0,SysPath+"hnetwiz.dll",2))
SetGadgetState(#lvIcons,0)
; ComboBox Modal initialisieren
AddGadgetItem(#cbModal, 0, "Приложение")
AddGadgetItem(#cbModal, 1, "Задача")
AddGadgetItem(#cbModal, 2, "Системное")
SetGadgetState(#cbModal, 0)
; ComboBox Button initialisieren
AddGadgetItem(#cbButtons, 0, "Ok")
AddGadgetItem(#cbButtons, 1, "Ok, Отмена")
AddGadgetItem(#cbButtons, 2, "Прервать, Повторить, Игнорировать")
AddGadgetItem(#cbButtons, 3, "Да, Нет, Отмена")
AddGadgetItem(#cbButtons, 4, "Да, Нет")
AddGadgetItem(#cbButtons, 5, "Повторить, Отмена")
SetGadgetState(#cbButtons, 0)
;Default-Button
AddGadgetItem(#cbDefButton,0,"1")
AddGadgetItem(#cbDefButton,1,"2")
AddGadgetItem(#cbDefButton,2,"3")
;AddGadgetItem(#cbDefButton,3,"4") ; es sind maximal 3 Button
SetGadgetState(#cbDefButton,0)
SetActiveGadget(#txtTitle)
HideWindow(#frmMain, 0)
;{- Main loop
Repeat
event.l = WaitWindowEvent()
If event = #WM_KEYDOWN And EventwParam()=13 And GadgetID=#txtTitle
SetActiveGadget(#txtMessage)
EndIf
If event = #PB_Event_Gadget
GadgetID = EventGadget()
If GadgetID = #btnTest
CreateMessageRequester()
MyMessage.s = ""
CountStringEdit=ScintillaSendMessage(#txtMessage,#SCI_GETLINECOUNT)-1 ; Количество строк
For i = 0 To CountStringEdit ;CountGadgetItems(#txtMessage)
;MyMessage = MyMessage + GetGadgetItemText(#txtMessage, i - 1, 0) + Chr(10)
LenStringSci=ScintillaSendMessage(#txtMessage,#SCI_LINELENGTH,i)
If LenStringSci>0
TempMyMessageSci.s=Space(LenStringSci)
ScintillaSendMessage(#txtMessage,#SCI_GETLINE,i,@TempMyMessageSci) ; Читаем текст из строки заданной в переменной "i".
TempMyMessageSci=RemoveString(TempMyMessageSci,Chr(10)) : TempMyMessageSci=RemoveString(TempMyMessageSci,Chr(13))
Else
TempMyMessageSci=""
EndIf
MyMessage=MyMessage+TempMyMessageSci+Chr(10)
Next i
length.l = Len(MyMessage)
MyMessage = Left(MyMessage, length - 1)
MessageRequester(Title, MyMessage, Option)
ElseIf GadgetID = #btnCopy Or GadgetID = #btnjaPBe
CreateMessageRequester()
Title = ReplaceString(Title, Chr(34), Chr(34) + " + Chr(34) + " + Chr(34))
If Result
MyMessage.s = "Select MessageRequester(" + Chr(34) + Title + Chr(34) + ", "
Else
MyMessage.s = "MessageRequester(" + Chr(34) + Title + Chr(34) + ", "
EndIf
CountStringEdit=ScintillaSendMessage(#txtMessage,#SCI_GETLINECOUNT)-1 ; Количество строк
If ScintillaSendMessage(#txtMessage,#SCI_GETTEXTLENGTH)<=0 ; Количество символов в редакторе
MyMessage=MyMessage+Chr(34)+Chr(34)
Else
For i = 0 To CountStringEdit ;CountGadgetItems(#txtMessage)
;FilterText.s = GetGadgetItemText(#txtMessage, i - 1, 0)
LenStringSci=ScintillaSendMessage(#txtMessage,#SCI_LINELENGTH,i)
If LenStringSci>0
TempMyMessageSci.s=Space(LenStringSci)
ScintillaSendMessage(#txtMessage,#SCI_GETLINE,i,@TempMyMessageSci) ; Читаем текст из строки заданной в переменной "i".
TempMyMessageSci=RemoveString(TempMyMessageSci,Chr(10)) : TempMyMessageSci=RemoveString(TempMyMessageSci,Chr(13))
If TempMyMessageSci<>""
TempMyMessageSci = ReplaceString(TempMyMessageSci, Chr(34), Chr(34) + "+Chr(34)+" + Chr(34))
MyMessage = MyMessage + Chr(34) + TempMyMessageSci + Chr(34) + "+Chr(10)+"
Else
MyMessage = MyMessage +"Chr(10)+"
EndIf
Else
TempMyMessageSci=""
MyMessage = MyMessage +"Chr(10)+"
EndIf
; TempMyMessageSci = ReplaceString(TempMyMessageSci, Chr(34), Chr(34) + "+Chr(34)+" + Chr(34))
; MyMessage = MyMessage + Chr(34) + TempMyMessageSci + Chr(34) + "+Chr(10)+"
Next i
length.l = Len(MyMessage)
MyMessage = Left(MyMessage, length - 9)
EndIf ; Количество символов в редакторе
MyMessage = MyMessage + ", " + Option$ + ")"
If Result
a=1
Repeat
a$=StringField(SelectEntry$,a,"|"):a+1
If a$
MyMessage+Chr(13)+Chr(10)+"Case "+a$
EndIf
Until a$=""
MyMessage+Chr(13)+Chr(10)+"EndSelect"
EndIf
If GadgetID = #btnCopy
ClearClipboard()
SetClipboardText(MyMessage)
Else
;SendDataS(jaPBe_Handle,#WMCD_InsertText,MyMessage)
EndIf
ElseIf GadgetID = #txtHomepage
ShellExecute_(WindowID(#frmMain), @"open", @"http://pbasic.spb.ru/", 0, 0, #SW_SHOWNORMAL)
EndIf
EndIf
Until event = #PB_Event_CloseWindow
;}
End
;iconNone:
;IncludeBinary "MR-None.ico"