* * *    
Главная » Статьи » Код PB

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

Место HyperLinkGadgets и TextGadgets



Code
Enumeration
  #PB_Text_UnderlineLink = 4
EndEnumeration

Procedure GetGadgetTextWidth(Gadget, Text$)
  Protected Image, Width
  Image = CreateImage(#PB_Any, 1, 1)
  StartDrawing(ImageOutput(Image))
  DrawingFont(GetGadgetFont(Gadget))
  Width = TextWidth(Text$)
  StopDrawing()
  FreeImage(Image)
  ProcedureReturn Width
EndProcedure

Procedure GetGadgetTextHeight(Gadget, Text$)
  Protected Image, Height
  Image = CreateImage(#PB_Any, 1, 1)
  StartDrawing(ImageOutput(Image))
  DrawingFont(GetGadgetFont(Gadget))
  Height = TextHeight(Text$)
  StopDrawing()
  FreeImage(Image)
  ProcedureReturn Height
EndProcedure

Procedure.s GetTextWordRange(Text$, Start = 1, Stop = -1)
  Protected Index, Number, Words$
  Number = CountString(Text$, " ") + CountString(Text$, Chr(10))
  If Stop < 0 Or Stop > Number
  Stop = Number + 1
  EndIf
  If Start > Stop
  ProcedureReturn ""
  EndIf
  For Index = Start To Stop
  If Words$
  Words$ + " " + StringField(Text$, Index, " ")
  Else
  Words$ = StringField(Text$, Index, " ")
  EndIf
  If FindString(Words$, Chr(10), 1) And CountString(Words$, " ")
  Words$ = StringField(Words$, 1, Chr(10)) + Chr(10)
  ElseIf FindString(Words$, Chr(10), 1)
  Words$ = StringField(Words$, 2, Chr(10))
  EndIf
  Next
  ProcedureReturn Words$
EndProcedure

Procedure.s GetTextPerLine(Gadget, Line, Search$ = "")
  Protected Index, Start, Stop, Width, Text$, Line$, Words$, Complete$
  Text$ = GetGadgetText(Gadget)
  Repeat
  If Stop
  Start = Stop-1
  EndIf
  Repeat
  Stop + 1
  Words$ = GetTextWordRange(Text$, Start+1, Stop)
  Width = GetGadgetTextWidth(Gadget, Words$)
  Until Width > GadgetWidth(Gadget) Or Words$ = Right(Text$, Len(Words$)) Or Right(Words$, 1) = Chr(10)
  If Width > GadgetWidth(Gadget)
  Line$ = GetTextWordRange(Text$, Start+1, Stop-1)
  Else
  Line$ = GetTextWordRange(Text$, Start+1, Stop)
  EndIf
  If Search$ And FindString(Line$, Search$, 1)
  ProcedureReturn Line$
  Break
  ElseIf Not Search$ And Line = Index
  ProcedureReturn Line$
  Break
  EndIf
  If Line$ = Right(Text$, Len(Words$))
  Break
  EndIf
  Index + 1
  ForEver
  If Line < 0
  ProcedureReturn Str(Index)
  EndIf
EndProcedure

Procedure AddGadgetHyperLink(Gadget, LinkText$, Color, flags = 0)
  Protected Index, X, Y, Width, Height, Lines, Link, Position, Text$, SubText$
  Text$ = GetGadgetText(Gadget)
  Position = FindString(Text$, LinkText$, 1)  
  If Position
  SubText$ = Left(Text$, Position-1)
  X = GadgetX(Gadget) + GetGadgetTextWidth(Gadget, SubText$)
  Y = GadgetY(Gadget)
  If flags&#PB_Text_UnderlineLink = #PB_Text_UnderlineLink
  Width = GetGadgetTextWidth(Gadget, LinkText$)
  Height = GetGadgetTextHeight(Gadget, LinkText$) + 1
  Else
  Width = GetGadgetTextWidth(Gadget, LinkText$)
  Height = GetGadgetTextHeight(Gadget, LinkText$)
  EndIf
  While Width+(X-GadgetX(Gadget)) > GadgetWidth(Gadget)
  SubText$ = RemoveString(GetTextPerLine(Gadget, Index), Chr(10)) + " "
  X - GetGadgetTextWidth(Gadget, SubText$)
  Y + GetGadgetTextHeight(Gadget, LinkText$)
  Index + 1
  Wend
  If flags&#PB_Text_Center = #PB_Text_Center
  SubText$ = GetTextPerLine(Gadget, #Null, LinkText$) + Chr(10)
  X + Round((GadgetWidth(Gadget) - GetGadgetTextWidth(Gadget, SubText$)) / 2, #PB_Round_Nearest)
  ElseIf flags&#PB_Text_Right = #PB_Text_Right
  SubText$ = GetTextPerLine(Gadget, #Null, LinkText$)
  X + GadgetWidth(Gadget) - GetGadgetTextWidth(Gadget, SubText$)
  EndIf
  If flags&#PB_Text_Border = #PB_Text_Border
  If flags&#PB_Text_Right = #PB_Text_Right
  X - GetSystemMetrics_(#SM_CXEDGE)
  ElseIf flags&#PB_Text_Center <> #PB_Text_Right
  X + GetSystemMetrics_(#SM_CXEDGE)
  EndIf
  Y + GetSystemMetrics_(#SM_CYEDGE)
  EndIf
  If flags&#PB_Text_UnderlineLink = #PB_Text_UnderlineLink
  Link = HyperLinkGadget(#PB_Any, X, Y, Width, Height, LinkText$, Color, #PB_HyperLink_Underline)
  Else
  Link = HyperLinkGadget(#PB_Any, X, Y, Width, Height, LinkText$, Color)
  EndIf
  If Link
  SetGadgetColor(Link, #PB_Gadget_FrontColor, GetGadgetColor(Gadget, #PB_Gadget_FrontColor))
  SetGadgetColor(Link, #PB_Gadget_BackColor, GetGadgetColor(Gadget, #PB_Gadget_BackColor))
  EndIf
  EndIf
  ProcedureReturn Link
EndProcedure

If OpenWindow(0, 0, 0, 420, 220, "LinkGadget Test", $CA0001)
  HideWindow(0, 1)
   
  Dim Links.l(30)
  StartTime = ElapsedMilliseconds()
   
  PanelGadget(10, 10, 10, 400, 200)
  AddGadgetItem(10, -1, "Center")
  TextGadget(0, 10, 10, 375, 150, "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam lorem. In nisi velit, volutpat quis, sollicitudin sit amet, aliquet non, sem."+Chr(10)+"Proin fringilla arcu ut lectus. Sed posuere. Donec pellentesque egestas libero. Duis sodales lorem eu massa. Curabitur ante erat, facilisis quis, ultricies quis, commodo In, nibh. Proin at mi. Curabitur pharetra quam non eros. Vestibulum turpis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer fringilla. Suspendisse potenti. Fusce magna magna, hendrerit a, pretium vitae, rhoncus In, lectus. Proin nec odio. Morbi rhoncus condimentum tellus. pellentesque quis neque. Curabitur iaculis, purus sit amet gravida blandit, ipsum neque iaculis eros, Sed fermentum ligula eros at libero.", #PB_Text_Center)
  Links(1) = AddGadgetHyperLink(0, "Lorem ipsum dolor", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Center)
  Links(2) = AddGadgetHyperLink(0, "consectetuer adipiscing", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Center)
  Links(3) = AddGadgetHyperLink(0, "Sed posuere", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Center)
  Links(4) = AddGadgetHyperLink(0, "quam non eros", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Center)
  Links(5) = AddGadgetHyperLink(0, "ridiculus mus", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Center)
   
  AddGadgetItem(10, -1, "Right")
  TextGadget(1, 10, 10, 375, 150, "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam lorem. In nisi velit, volutpat quis, sollicitudin sit amet, aliquet non, sem."+Chr(10)+"Proin fringilla arcu ut lectus. Sed posuere. Donec pellentesque egestas libero. Duis sodales lorem eu massa. Curabitur ante erat, facilisis quis, ultricies quis, commodo In, nibh. Proin at mi. Curabitur pharetra quam non eros. Vestibulum turpis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer fringilla. Suspendisse potenti. Fusce magna magna, hendrerit a, pretium vitae, rhoncus In, lectus. Proin nec odio. Morbi rhoncus condimentum tellus. pellentesque quis neque. Curabitur iaculis, purus sit amet gravida blandit, ipsum neque iaculis eros, Sed fermentum ligula eros at libero.", #PB_Text_Right)
  Links(6) = AddGadgetHyperLink(1, "Lorem ipsum dolor", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Right)
  Links(7) = AddGadgetHyperLink(1, "consectetuer adipiscing", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Right)
  Links(8) = AddGadgetHyperLink(1, "Sed posuere", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Right)
  Links(9) = AddGadgetHyperLink(1, "quam non eros", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Right)
  Links(10) = AddGadgetHyperLink(1, "ridiculus mus", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Right)
   
  AddGadgetItem(10, -1, "Left")
  TextGadget(2, 10, 10, 375, 150, "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam lorem. In nisi velit, volutpat quis, sollicitudin sit amet, aliquet non, sem."+Chr(10)+"Proin fringilla arcu ut lectus. Sed posuere. Donec pellentesque egestas libero. Duis sodales lorem eu massa. Curabitur ante erat, facilisis quis, ultricies quis, commodo In, nibh. Proin at mi. Curabitur pharetra quam non eros. Vestibulum turpis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer fringilla. Suspendisse potenti. Fusce magna magna, hendrerit a, pretium vitae, rhoncus In, lectus. Proin nec odio. Morbi rhoncus condimentum tellus. pellentesque quis neque. Curabitur iaculis, purus sit amet gravida blandit, ipsum neque iaculis eros, Sed fermentum ligula eros at libero.")
  Links(11) = AddGadgetHyperLink(2, "Lorem ipsum dolor", GetSysColor_(#COLOR_HOTLIGHT))
  Links(12) = AddGadgetHyperLink(2, "consectetuer adipiscing", GetSysColor_(#COLOR_HOTLIGHT))
  Links(13) = AddGadgetHyperLink(2, "Sed posuere", GetSysColor_(#COLOR_HOTLIGHT))
  Links(14) = AddGadgetHyperLink(2, "quam non eros", GetSysColor_(#COLOR_HOTLIGHT))
  Links(15) = AddGadgetHyperLink(2, "ridiculus mus", GetSysColor_(#COLOR_HOTLIGHT))
   
  AddGadgetItem(10, -1, "Center + Border")
  TextGadget(3, 10, 10, 375, 150, "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam lorem. In nisi velit, volutpat quis, sollicitudin sit amet, aliquet non, sem."+Chr(10)+"Proin fringilla arcu ut lectus. Sed posuere. Donec pellentesque egestas libero. Duis sodales lorem eu massa. Curabitur ante erat, facilisis quis, ultricies quis, commodo In, nibh. Proin at mi. Curabitur pharetra quam non eros. Vestibulum turpis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer fringilla. Suspendisse potenti. Fusce magna magna, hendrerit a, pretium vitae, rhoncus In, lectus. Proin nec odio. Morbi rhoncus condimentum tellus. pellentesque quis neque. Curabitur iaculis, purus sit amet gravida blandit, ipsum neque iaculis eros, Sed fermentum ligula eros at libero.", #PB_Text_Center|#PB_Text_Border)
  Links(16) = AddGadgetHyperLink(3, "Lorem ipsum dolor", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Center|#PB_Text_Border)
  Links(17) = AddGadgetHyperLink(3, "consectetuer adipiscing", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Center|#PB_Text_Border)
  Links(18) = AddGadgetHyperLink(3, "Sed posuere", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Center|#PB_Text_Border)
  Links(19) = AddGadgetHyperLink(3, "quam non eros", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Center|#PB_Text_Border)
  Links(20) = AddGadgetHyperLink(3, "ridiculus mus", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Center|#PB_Text_Border)
   
  AddGadgetItem(10, -1, "Right + Border")
  TextGadget(4, 10, 10, 375, 150, "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam lorem. In nisi velit, volutpat quis, sollicitudin sit amet, aliquet non, sem."+Chr(10)+"Proin fringilla arcu ut lectus. Sed posuere. Donec pellentesque egestas libero. Duis sodales lorem eu massa. Curabitur ante erat, facilisis quis, ultricies quis, commodo In, nibh. Proin at mi. Curabitur pharetra quam non eros. Vestibulum turpis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer fringilla. Suspendisse potenti. Fusce magna magna, hendrerit a, pretium vitae, rhoncus In, lectus. Proin nec odio. Morbi rhoncus condimentum tellus. pellentesque quis neque. Curabitur iaculis, purus sit amet gravida blandit, ipsum neque iaculis eros, Sed fermentum ligula eros at libero.", #PB_Text_Right|#PB_Text_Border)
  Links(21) = AddGadgetHyperLink(4, "Lorem ipsum dolor", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Right|#PB_Text_Border)
  Links(22) = AddGadgetHyperLink(4, "consectetuer adipiscing", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Right|#PB_Text_Border)
  Links(23) = AddGadgetHyperLink(4, "Sed posuere", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Right|#PB_Text_Border)
  Links(24) = AddGadgetHyperLink(4, "quam non eros", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Right|#PB_Text_Border)
  Links(25) = AddGadgetHyperLink(4, "ridiculus mus", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Right|#PB_Text_Border)
   
  AddGadgetItem(10, -1, "Left + Border")
  TextGadget(5, 10, 10, 375, 150, "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam lorem. In nisi velit, volutpat quis, sollicitudin sit amet, aliquet non, sem."+Chr(10)+"Proin fringilla arcu ut lectus. Sed posuere. Donec pellentesque egestas libero. Duis sodales lorem eu massa. Curabitur ante erat, facilisis quis, ultricies quis, commodo In, nibh. Proin at mi. Curabitur pharetra quam non eros. Vestibulum turpis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer fringilla. Suspendisse potenti. Fusce magna magna, hendrerit a, pretium vitae, rhoncus In, lectus. Proin nec odio. Morbi rhoncus condimentum tellus. pellentesque quis neque. Curabitur iaculis, purus sit amet gravida blandit, ipsum neque iaculis eros, Sed fermentum ligula eros at libero.", #PB_Text_Border)
  Links(26) = AddGadgetHyperLink(5, "Lorem ipsum dolor", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Border)
  Links(27) = AddGadgetHyperLink(5, "consectetuer adipiscing", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Border)
  Links(28) = AddGadgetHyperLink(5, "Sed posuere", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Border)
  Links(29) = AddGadgetHyperLink(5, "quam non eros", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Border)
  Links(30) = AddGadgetHyperLink(5, "ridiculus mus", GetSysColor_(#COLOR_HOTLIGHT), #PB_Text_Border)
   
  For Index = 1 To ArraySize(Links())
  SetGadgetColor(Links(Index), #PB_Gadget_FrontColor, RGB(0, 0, 255))
  Next
   
  EndTime = ElapsedMilliseconds()
  SetWindowTitle(0, "LinkGadget Test - Done in "+Str(EndTime-StartTime)+"ms")
  HideWindow(0, 0)
   
  Repeat
  Event = WaitWindowEvent()
  Select Event
  Case #PB_Event_Gadget
  For Index = 1 To ArraySize(Links())
  If Links(Index) = EventGadget()
  MessageRequester("Test", "You clicked on: "+GetGadgetText(Links(Index)))
  EndIf
  Next
  Case #PB_Event_CloseWindow
  Break
  EndSelect
  ForEver
EndIf










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