Возможно ли в PB зная координаты выделить (перекрасить) область экрана?
Вопросы новичка
Сообщений 241 страница 270 из 1000
Поделиться24215.04.2010 21:51:33
Что за область?
Это может быть, скажем окно, рисунок и т. д.
Если рисунок, то можно перекрасить его.
Поделиться24315.04.2010 22:00:19
Ну если таже область головы, например, при наведении на которую изменяется курсов (что уже есть) и эта область чуть меняет цвет с прозрачностью, что бы было видно, на что пользователь навел.
Поделиться24415.04.2010 22:03:21
накладываешь сверху на область изображение с прозрачным альфа каналом чуть притенённую....
и передвигаешь в зависимости от выбранной области...
Отредактировано mirashic (15.04.2010 22:06:37)
Поделиться24515.04.2010 22:05:20
Как вариант, создаём копию рисунка (функция CopyImage) и рисуем по нему в требуемой области (функции из 2DDrawing). После чего, загружаем его в ImageGadget с помщью SetGadgetState.
Когда мышка будет убрана с этой области, возвращаем обратно оригинальный рисунок.
Поделиться24615.04.2010 22:19:00
daiomik - посмотри мой архив , я его перезалил
Поделиться24715.04.2010 22:44:41
mirashic, а квадрат должен быть черным? Что то он у меня не прозрачный. Или ты так и делал?
Поделиться24815.04.2010 22:47:25
версия 4.40 или 4.41 должна быть
Отредактировано mirashic (15.04.2010 22:55:11)
Поделиться24915.04.2010 22:52:07
В разделе для пользователей, есть ссылка на скачивание 4.40.
Поделиться25015.04.2010 22:53:22
Суть понял (кстати в 4,31 запускал первый раз)). А добиться такого эффекта, чтобы выделилась круглая форма головы, а не квадрат и в последующем произвольной формы фигуры можно?
Поделиться25115.04.2010 22:56:02
надо обрабатывать в фотошопе
Поделиться25215.04.2010 23:06:42
Странно, но в коде Петра при передвижении мыши по окну ТОТ самый квадрат "колеблется" а в примере mirashic-а все норм.
Поделиться25315.04.2010 23:13:40
правильно :
x>=80 And x<=122 And y>=20 And y<=80
42x60
а изображение 80 на 80
измени или размер изображения или определяемую область
Отредактировано mirashic (15.04.2010 23:19:55)
Поделиться25415.04.2010 23:20:18
Странно, но в коде Петра при передвижении мыши по окну ТОТ самый квадрат "колеблется"
Потому что ошибка в коде.
Попробуй так.
Enumeration #kkk EndEnumeration Procedure IsMouseOver(wnd, *x, *y) GetWindowRect_(wnd,re.RECT) GetCursorPos_(pt.POINT) Result = PtInRect_(@re, pt\x | (pt\y<<32) ) If Result PokeI(*x, pt\x - re\left) PokeI(*y, pt\y - re\top) EndIf ProcedureReturn Result EndProcedure UseJPEGImageDecoder() UsePNGImageDecoder() CatchImage(1,?m1,?m2-?m1) CatchImage(#kkk, ?Im4, ?Im4End -?Im4 ) ; рука OpenWindow(0,0,0,220,500,"",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) TextGadget(1,10,4,200,16,"Мышь не на рисунке") ImageGadget(2,4,24,211,471,ImageID(1)) ImageGadget(3,65,24,80,80,0) State=0 Repeat Event=WaitWindowEvent() If Event=#WM_MOUSEMOVE If IsMouseOver(GadgetID(2), @x, @y) SetGadgetText(1,"X = "+Str(x)+"; Y = "+Str(y)) If x>=80 And x<=122 And y>=20 And y<=80 If State=0 State=1 SetGadgetText(1,"ГОЛОВА") myCursor=LoadCursor_(0,#IDC_HAND) ; курсор рука SetCursor_(myCursor) ; курсор рука SetGadgetState(3,ImageID(#kkk )) EndIf Else If State=1 SetGadgetState(3,0) State=0 EndIf EndIf Else SetGadgetText(1,"Мышь не на рисунке") State=0 EndIf EndIf Until Event=#PB_Event_CloseWindow End DataSection m1: IncludeBinary "95142f07569e.jpg" m2: Im4: IncludeBinary "kkkk.png" Im4End: EndDataSection
Поделиться25515.04.2010 23:21:37
Так все ок
Поделиться25616.04.2010 10:31:18
Доброго времени. Подскажите как из ExplorerListGadget запустить файл (ворд, ексель и т.д.).
Поделиться25716.04.2010 13:30:09
Доброго времени. Подскажите как из ExplorerListGadget запустить файл (ворд, ексель и т.д.).
Запуск по двойному клику
If OpenWindow(0, 0, 0, 400, 200, "ExplorerListGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ExplorerListGadget(0, 10, 10, 380, 180, "*.*", #PB_Explorer_MultiSelect|#PB_Explorer_AlwaysShowSelection|#PB_Explorer_GridLines) Repeat Event=WaitWindowEvent() If Event=#PB_Event_Gadget If EventGadget()=0 If EventType()=#PB_EventType_LeftDoubleClick PunktExplorer=GetGadgetState(0) If PunktExplorer>=0 File.s=GetGadgetText(0)+GetGadgetItemText(0,PunktExplorer,0) RunProgram(File) EndIf EndIf EndIf EndIf Until Event = #PB_Event_CloseWindow EndIf
Поделиться25816.04.2010 14:22:17
Спасибо Пётр работает RunProgram(File).
Подскажите в каком формате хранится текст в EditorGadget(), считать текст из него я могу, а как его можно вставить в ворд, в фарматированном виде, и попутно как изменить шрифт в названии панели PanelGadget() функция SetGadgetFont() не помогает.
Поделиться25916.04.2010 15:21:19
Скажите как сделать всплывающую подсказку при наведение на гаджеты. И возможно ли будет изменять скорость ее показа (быстрей, медленней)
Поделиться26016.04.2010 15:26:38
а как его можно вставить в ворд, в фарматированном виде
Можно сохранить текст в формате RTF и открыть этот файл в ворде.
Сохраняем так
;- Save ******* Procedure StreamFileOut_Callback(hFile, pbBuff, cb, pcb) ProcedureReturn WriteFile_(hFile, pbBuff, cb, pcb, 0)!1 EndProcedure ; Hier eine Procedure + Callback zum speichern einer Datei: ; ; FileID freie ID fьr Dateioperationen ; File Die Datei ggf. mit Pfad ; Gadget Gadget ID vom EditorGadget() Procedure FileStreamOut(FileID.l, File.s, Gadget.l) r.b=0 Protected StreamData.EDITSTREAM ;Wenn die Datei erzeugt werden kann, fortfahren. If CreateFile(FileID, File) ;Das Handle der Datei speichern StreamData\dwCookie = FileID(FileID) StreamData\dwError = #Null ;Die Adresse der Callback Procedure speichern StreamData\pfnCallback = @StreamFileOut_Callback() ;Das RichEdit Control anweisen, den Stream zu aktivieren SendMessage_(GadgetID(Gadget), #EM_STREAMOUT, #SF_RTF, @StreamData) ;Datei schliessen CloseFile(FileID) r.b=1 EndIf ProcedureReturn r EndProcedure
Скажите как сделать всплывающую подсказку при наведение на гаджеты
Используй GadgetToolTip
Или нужно плавное появление и пропадание подсказки?
Поделиться26116.04.2010 15:31:09
Или нужно плавное появление и пропадание подсказки?
нет, не нужно, необходимо добиться такого эффекта, что бы при наведении на нужный мне объект подсказка появлялась мгновенно, а не с задержкой, как по стандартному.
Поделиться26216.04.2010 15:58:40
Можно создать окно без рамки (флаг #PB_Window_BorderLess) и отображать подсказку в нём.
Поделиться26316.04.2010 16:02:25
А какие варианты еще есть. Исходя из вчерашнего пример: уже есть: определение части по координатам, изменение курсора. Мне бы хотелось, что бы люди сразу поняли что на данные области можно было нажимать и как то пояснять это. Вот с добавлением прозрачности очень много закорачиваться. Может что еще посоветуете.
Поделиться26416.04.2010 16:16:54
Спасибо Пётр. "Дело ясное,что дело тёмное", т.е. если можно объясните для "особо одарёного" как этим пользоваться.
Поделиться26516.04.2010 17:45:45
если можно объясните для "особо одарёного" как этим пользоваться
Как-то вот так
Structure CHARFORMAT2_ cbSize.l dwMask.l dwEffects.l yHeight.l yOffset.l crTextColor.l bCharSet.b bPitchAndFamily.b szFaceName.b[#LF_FACESIZE] _wPad2.w wWeight.w sSpacing.w crBackColor.l lcid.l dwReserved.l sStyle.w wKerning.w bUnderlineType.b bAnimation.b bRevAuthor.b bReserved1.b EndStructure Procedure EditorBackColor(Gadget, Color.l) format.CHARFORMAT2_ format\cbSize = SizeOf(CHARFORMAT2_) format\dwMask = $4000000 ; = #CFM_BACKCOLOR format\crBackColor = Color SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) EndProcedure Procedure EditorSelect(Gadget, LineStart.l, CharStart.l, LineEnd.l, CharEnd.l) sel.CHARRANGE sel\cpMin = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, LineStart, 0) + CharStart - 1 If LineEnd = -1 LineEnd = SendMessage_(GadgetID(Gadget), #EM_GETLINECOUNT, 0, 0)-1 EndIf sel\cpMax = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, LineEnd, 0) If CharEnd = -1 sel\cpMax + SendMessage_(GadgetID(Gadget), #EM_LINELENGTH, sel\cpMax, 0) Else sel\cpMax + CharEnd - 1 EndIf SendMessage_(GadgetID(Gadget), #EM_EXSETSEL, 0, @sel) EndProcedure ; Set the Text color for the Selection ; in RGB format Procedure EditorColor(Gadget, Color.l) format.CHARFORMAT format\cbSize = SizeOf(CHARFORMAT) format\dwMask = #CFM_COLOR format\crTextColor = Color SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) EndProcedure ; Set Font Size for the Selection ; in pt Procedure EditorFontSize(Gadget, Fontsize.l) format.CHARFORMAT format\cbSize = SizeOf(CHARFORMAT) format\dwMask = #CFM_SIZE format\yHeight = FontSize*20 SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) EndProcedure ; Set Font for the Selection ; You must specify a font name, the font doesn't need ; to be loaded Procedure EditorFont(Gadget, FontName.s) format.CHARFORMAT format\cbSize = SizeOf(CHARFORMAT) format\dwMask = #CFM_FACE PokeS(@format\szFaceName, FontName) SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) EndProcedure ; Set Format of the Selection. This can be a combination of ; the following values: ; #CFM_BOLD ; #CFM_ITALIC ; #CFM_UNDERLINE ; #CFM_STRIKEOUT Procedure EditorFormat(Gadget, Flags.l) format.CHARFORMAT format\cbSize = SizeOf(CHARFORMAT) format\dwMask = #CFM_ITALIC|#CFM_BOLD|#CFM_STRIKEOUT|#CFM_UNDERLINE format\dwEffects = Flags SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) EndProcedure ; ------------------------------------------------------------- ; Source Example: ;- Save ******* Procedure StreamFileOut_Callback(hFile, pbBuff, cb, pcb) ProcedureReturn WriteFile_(hFile, pbBuff, cb, pcb, 0)!1 EndProcedure ; Hier eine Procedure + Callback zum speichern einer Datei: ; ; FileID freie ID fьr Dateioperationen ; File Die Datei ggf. mit Pfad ; Gadget Gadget ID vom EditorGadget() Procedure FileStreamOut(FileID.l, File.s, Gadget.l) r.b=0 Protected StreamData.EDITSTREAM ;Wenn die Datei erzeugt werden kann, fortfahren. If CreateFile(FileID, File) ;Das Handle der Datei speichern StreamData\dwCookie = FileID(FileID) StreamData\dwError = #Null ;Die Adresse der Callback Procedure speichern StreamData\pfnCallback = @StreamFileOut_Callback() ;Das RichEdit Control anweisen, den Stream zu aktivieren SendMessage_(GadgetID(Gadget), #EM_STREAMOUT, #SF_RTF, @StreamData) ;Datei schliessen CloseFile(FileID) r.b=1 EndIf ProcedureReturn r EndProcedure #Editor = 1 If OpenWindow(0, 0, 0, 500, 500, "EditorGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) If CreateGadgetList(WindowID(0)) ButtonGadget(0,40,10,220,28,"Сохранить в файле и открыть в Ворде") EditorGadget(#Editor, 10, 50, 480, 430) AddGadgetItem(#Editor, 0, "This is a blue, bold and underlined big text") AddGadgetItem(#Editor, 1, "Times new Roman, red, striked out and italic") AddGadgetItem(#Editor, 2, "This is usual text, with a yellow background color") AddGadgetItem(#Editor, 3, "This is usual Text.") EditorSelect(#Editor, 0, 1, 0, -1) ; select line 1 EditorColor(#Editor, RGB(0,0,255)) EditorFontSize(#Editor, 18) EditorFormat(#Editor, #CFM_UNDERLINE) EditorSelect(#Editor, 1, 1, 1, -1) ; select line 2 EditorColor(#Editor, RGB(255,0,0)) EditorFont(#Editor, "Times New Roman") EditorFormat(#Editor, #CFM_ITALIC|#CFM_STRIKEOUT) EditorSelect(#Editor, 2, 1, 2, -1) ; select line 2 EditorBackColor(#Editor, RGB(255,200,100)) EditorSelect(#Editor, 0, 0, 0, 0) ; select nothing again Repeat Event=WaitWindowEvent() If Event=#PB_Event_Gadget If EventGadget()=0 FileStreamOut(0, "Temp.rtf", 1) Delay(200) If FileSize("Temp.rtf")>0 RunProgram("Temp.rtf") Else MessageRequester("", "Проблемы при создании файла!", #MB_OK|#MB_ICONERROR) EndIf EndIf EndIf Until Event = #PB_Event_CloseWindow EndIf EndIf End
Поделиться26616.04.2010 18:05:41
Спасибо Пётр. Но это тоже для меня пока сложно (с API не знаком) , а функциями пурика можно как нибуть сохранять форматированный текст, в смысле попроще?
Поделиться26716.04.2010 18:56:57
Что сложного в том, чтобы просто скопировать часть кода в свою программу?
Поделиться26816.04.2010 20:34:25
Мне бы хотелось, что бы люди сразу поняли что на данные области можно было нажимать и как то пояснять это.
Ну сделай так (небольшое окно без рамки)
Enumeration #kkk EndEnumeration Procedure IsMouseOver(wnd, *x, *y) GetWindowRect_(wnd,re.RECT) GetCursorPos_(pt.POINT) Result = PtInRect_(@re, pt\x | (pt\y<<32) ) If Result PokeI(*x, pt\x - re\left) PokeI(*y, pt\y - re\top) EndIf ProcedureReturn Result EndProcedure UseJPEGImageDecoder() UsePNGImageDecoder() CatchImage(1,?m1,?m2-?m1) CatchImage(#kkk, ?Im4, ?Im4End -?Im4 ) ; рука OpenWindow(0,0,0,220,500,"",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) TextGadget(1,10,4,200,16,"Мышь не на рисунке") ImageGadget(2,4,24,211,471,ImageID(1)) ImageGadget(3,65,24,80,80,0) State=0 OpenWindow(100,0,0,84,18,"",#PB_Window_BorderLess|#PB_Window_Invisible,WindowID(0)) SetWindowColor(100,0) TextGadget(100,1,1,82,16," Кликни здесь") SetGadgetColor(100,#PB_Gadget_BackColor,GetSysColor_(#COLOR_INFOBK)) Repeat Event=WaitWindowEvent() If Event=#WM_MOUSEMOVE If IsMouseOver(GadgetID(2), @x, @y) SetGadgetText(1,"X = "+Str(x)+"; Y = "+Str(y)) myCursor=LoadCursor_(0,#IDC_HAND) ; курсор рука SetCursor_(myCursor) ; курсор рука If x>=80 And x<=122 And y>=20 And y<=80 GetCursorPos_(pt.POINT) ResizeWindow(100,pt\x-10,pt\y-20,#PB_Ignore, #PB_Ignore) If State=0 State=1 SetGadgetText(1,"ГОЛОВА") SetGadgetState(3,ImageID(#kkk )) HideWindow(100,0) EndIf Else If State=1 SetGadgetState(3,0) State=0 HideWindow(100,1) EndIf EndIf Else SetGadgetText(1,"Мышь не на рисунке") State=0 EndIf EndIf Until Event=#PB_Event_CloseWindow End DataSection m1: IncludeBinary "95142f07569e.jpg" m2: Im4: IncludeBinary "kkkk.png" Im4End: EndDataSection
Поделиться26917.04.2010 15:05:29
Что сложного в том, чтобы просто скопировать часть кода в свою программу?
Уважаемый Пётр скопировать и вставить не проблема, хочется понимать как работает данный код, это и является сложным. И ещё вопрос как сделать всё то же самое для линя.
Поделиться27017.04.2010 15:21:38
В догонку добавлю для чего мне это нужно. На работе заполняю много однотипных документов. Однотипных подразумевается, допустим есть десять документов в каждом из которых имеется одинаковая информация типа: диаметр, толщина стенки , название трубопровода, фамилии и т.д. , но находится эти данные в разных местах в разных документах. Вот и хотелось бы попробовать написать прожку которая эти однотипные данные будет раставлять по нужным местам документов. На ум приходит два способа это HTML+XML или RTF, что проще и легче пока не определил.
Похожие темы
Вопросы новичка (продолжение…) | Вопросы по PureBasic | 29.06.2024 |
Скорее, это теоретический вопрос о правах в директории. | OffTop | 16.09.2022 |
Вопрос по отладке | Вопросы по PureBasic | 26.01.2017 |
Три вопроса по созданию браузера. | Вопросы по PureBasic | 01.11.2010 |
вопрос о точности типов данных | Вопросы по PureBasic | 20.05.2021 |