Уроки PureBasic

Categories

Categories

Other Sites



             Поиск по сайту

     

                


    Оставить мне сообщение:



Уроки PureBasic

Генератор MessageRequester

Уроки PureBasic

Удобный инструмент генерирующий код сообщений, функции MessageRequester

Перевёл и адаптировал kvitaliy

Доработал Пётр.

Подключается, как все остальные инструменты.

MessageRequester

Скачать архив

Уроки PureBasic

; 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" </plaintext> </div><br><br><br> <img src="img/lin.jpg" width="700" height="20" alt="Уроки PureBasic"><br><br> </div> </div> <!-- copyright (t4) --><div align="center">Используются технологии <a href="http://www.ucoz.ru/" title="Создать сайт бесплатно"><b>uCoz</b></a><br /></div><!-- /copyright --> </body> </html> &nbsp;