Возможно ли в 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 |