PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка


Вопросы новичка

Сообщений 241 страница 270 из 1000

241

Возможно ли в PB зная координаты выделить (перекрасить) область экрана?

0

242

Что за область?
Это может быть, скажем окно, рисунок и т. д.
Если рисунок, то можно перекрасить его.

0

243

Ну если таже область головы, например, при наведении на которую изменяется курсов (что уже есть) и эта область чуть меняет цвет с прозрачностью, что бы было видно, на что пользователь навел.

0

244

накладываешь сверху на область изображение с прозрачным альфа каналом чуть притенённую....
и передвигаешь в зависимости от выбранной области...

Отредактировано mirashic (15.04.2010 22:06:37)

0

245

Как вариант, создаём копию рисунка (функция CopyImage) и рисуем по нему в требуемой области (функции из  2DDrawing). После чего, загружаем его в ImageGadget с помщью SetGadgetState.
Когда мышка будет убрана с этой области, возвращаем обратно оригинальный рисунок.

0

246

daiomik - посмотри мой архив , я его перезалил

0

247

mirashic, а квадрат должен быть черным? Что то он у меня не прозрачный. Или ты так и делал?

0

248

версия 4.40 или 4.41 должна быть

Отредактировано mirashic (15.04.2010 22:55:11)

0

249

В разделе для пользователей, есть ссылка на скачивание 4.40.

0

250

Суть понял (кстати в 4,31 запускал первый раз)). А добиться такого эффекта, чтобы выделилась круглая форма головы, а не квадрат и в последующем произвольной формы фигуры можно?

0

251

надо обрабатывать в фотошопе

0

252

Странно, но в коде Петра при передвижении мыши по окну ТОТ самый квадрат "колеблется" а в примере mirashic-а все норм.

0

253

правильно :
x>=80 And x<=122 And y>=20 And y<=80

42x60

а изображение 80 на 80

измени или размер изображения или определяемую область

Отредактировано mirashic (15.04.2010 23:19:55)

0

254

daiomik написал(а):

Странно, но в коде Петра при передвижении мыши по окну ТОТ самый квадрат "колеблется"

Потому что ошибка в коде.
Попробуй так.

Код:
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

0

255

Так все ок

0

256

Доброго времени. Подскажите как из ExplorerListGadget запустить файл (ворд, ексель и т.д.).

0

257

lakomet написал(а):

Доброго времени. Подскажите как из 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

0

258

Спасибо Пётр работает RunProgram(File). :cool:
Подскажите в каком формате хранится текст в EditorGadget(), считать текст из него я могу, а как его можно вставить в ворд, в фарматированном виде, и попутно как изменить шрифт в названии панели PanelGadget() функция SetGadgetFont() не помогает.

0

259

Скажите как сделать всплывающую подсказку при наведение на гаджеты. И возможно ли будет изменять скорость ее показа (быстрей, медленней)

0

260

lakomet написал(а):

а как его можно вставить в ворд, в фарматированном виде

Можно сохранить текст в формате 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
daiomik написал(а):

Скажите как сделать всплывающую подсказку при наведение на гаджеты

Используй GadgetToolTip
Или нужно плавное появление и пропадание подсказки?

0

261

Пётр написал(а):

Или нужно плавное появление и пропадание подсказки?

нет, не нужно, необходимо добиться такого эффекта, что бы при наведении на нужный мне объект подсказка появлялась мгновенно, а не с задержкой, как по стандартному.

0

262

Можно создать окно без рамки (флаг #PB_Window_BorderLess) и отображать подсказку в нём.

0

263

А какие варианты еще есть. Исходя из вчерашнего пример: уже есть: определение части по координатам, изменение курсора.  Мне бы хотелось, что бы люди сразу поняли что на данные области можно было нажимать и как то пояснять это. Вот с добавлением прозрачности очень много закорачиваться. Может что еще посоветуете.

0

264

Спасибо Пётр. "Дело ясное,что дело тёмное", т.е. если можно объясните для "особо одарёного" как этим пользоваться. :(

0

265

lakomet написал(а):

если можно объясните для "особо одарёного" как этим пользоваться

Как-то вот так :)

Код:
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

0

266

Спасибо Пётр. Но это тоже для меня пока сложно (с API не знаком) :dontknow: , а функциями пурика можно как нибуть сохранять форматированный текст, в смысле попроще? :(

0

267

Что сложного в том, чтобы просто скопировать часть кода в свою программу?

0

268

daiomik написал(а):

Мне бы хотелось, что бы люди сразу поняли что на данные области можно было нажимать и как то пояснять это.

Ну сделай так (небольшое окно без рамки)

Код:
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

0

269

Пётр написал(а):

Что сложного в том, чтобы просто скопировать часть кода в свою программу?

Уважаемый Пётр скопировать и вставить не проблема, хочется понимать как работает данный код, это и является сложным. И ещё вопрос как сделать всё то же самое для линя.

0

270

В догонку добавлю для чего мне это нужно. На работе заполняю много однотипных документов. Однотипных подразумевается, допустим есть десять документов в каждом из которых имеется одинаковая информация типа: диаметр, толщина стенки , название трубопровода, фамилии и т.д. , но находится эти данные в разных местах в разных документах. Вот и хотелось бы попробовать написать прожку которая эти однотипные данные будет раставлять по нужным местам документов. На ум приходит два способа это HTML+XML или RTF, что проще и легче пока не определил.

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка