* * *    
Главная » Статьи » Введение

Просмотров: 3301 | Дата: 23.05.2022 | Коментарии (0)

Генератор 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" 












Сайт посвящён языку программирования PureBasic — коммерческий компилятор языка программирования, использующего синтаксис BASIC. Предназначен для создания кроссплатформенных приложений для AmigaOS, Linux, Microsoft Windows, Windows NT и Mac OS X. Разработан компанией Fantaisie Software.