Is it possible to highlight a line in an EditorGadget, like the function
Code: Select all
SetGadgetState(#Listview, 1)
Thanks
Code: Select all
SetGadgetState(#Listview, 1)
Code: Select all
Global Dim ArrayOfSize(100)
Procedure SetEditorState(IdEditor, NumItem)
Start = 0
For i = 1 To NumItem
Start + ArrayOfSize(i)
Next
editSel.CHARRANGE\cpMin = Start + NumItem
editSel.CHARRANGE\cpMax = Start + ArrayOfSize(NumItem) + NumItem + 1
SendMessage_(GadgetID(IdEditor), #EM_EXSETSEL, 0, @editSel)
EndProcedure
OpenWindow(0, 0, 0, 300, 150, "EditorGadget SetGadgetState", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 0, 5, 300, 145)
For i = 1 To 100
AddGadgetItem(0, - 1, "Line number " + Trim(Str(i)))
ArrayOfSize(i) = Len("Line number " + Trim(Str(i)))
Next
For i = 1 To 50
SetEditorState(0, i)
Delay(300)
Next
Code: Select all
Procedure SetEditorState(IdEditor, NumItem)
Start = 0
For a = 0 To CountGadgetItems(IdEditor)
If a = NumItem
Break
EndIf
Start + Len(GetGadgetItemText(IdEditor, a))
Next
editSel.CHARRANGE\cpMin = Start + NumItem
editSel.CHARRANGE\cpMax = Start + Len(GetGadgetItemText(IdEditor, a)) + NumItem + 1
SendMessage_(GadgetID(IdEditor), #EM_EXSETSEL, 0, @editSel)
EndProcedure
OpenWindow(0, 0, 0, 300, 150, "EditorGadget SetGadgetState", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(0, 0, 5, 300, 145)
For i = 1 To 100
AddGadgetItem(0, - 1, "Line number " + Trim(Str(i)))
Next
For i = 1 To 50
SetEditorState(0, i)
Delay(300)
Next
Code: Select all
Procedure SetEditorState(IdEditor, NumItem)
; Start = 0
;
; For a = 0 To CountGadgetItems(IdEditor)
;
; If a = NumItem
; Break
; EndIf
;
; Start + Len(GetGadgetItemText(IdEditor, a))
;
; Next
;
; http://msdn.microsoft.com/en-us/library/windows/desktop/bb761611%28v=vs.85%29.aspx
Start = SendMessage_(GadgetID(IdEditor), #EM_LINEINDEX, NumItem, 0) ; jump there, no loop
editSel.CHARRANGE\cpMin = Start
editSel.CHARRANGE\cpMax = Start + Len(GetGadgetItemText(IdEditor, NumItem)) + 1
SendMessage_(GadgetID(IdEditor), #EM_EXSETSEL, 0, @editSel)
EndProcedure
OpenWindow(0, 0, 0, 300, 150, "EditorGadget SetGadgetState", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(0, 0, 5, 300, 145)
For i = 1 To 100
AddGadgetItem(0, - 1, "Line number " + Trim(Str(i)))
Next
For i = 0 To 50
SetEditorState(0, i)
Delay(300)
Next
andKwaï chang caïne wrote:@Kcc try the next
Why are you having a conversation with yourself?Kwaï chang caïne wrote:Ooooohhh!!! Thanks KCC !!!!
I have taken luis' code, modified it slightly and added the necessary API functions for Linux and MacOS (both Carbon and Cocoa framework). Now this code example can be run in Windows, Linux and MacOS X . MacOS users with PB 5 using the default subsystem (Cocoa) should notice that wilbert's CocoaMessage userlib must have been installed before they can execute this code!Ulix wrote:Y does the same code for linux?
Code: Select all
EnableExplicit
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
CompilerIf #PB_Compiler_Version < 500 Or (#PB_Compiler_Version >= 500 And Subsystem("Carbon"))
ImportC ""
GetControlProperty(ControlRef.L, PropertyCreator.L, PropertyTag.L, BufferSize.L, *ActualSize, *PropertyBuffer)
TXNSetSelection(TXNObject.L, StartOffset.L, EndOffset.L)
TXNShowSelection(TXNObject.L, ShowEnd.L)
EndImport
CompilerEndIf
CompilerEndIf
Procedure SelectEditorLine(EditorID.I, LineNumber.I)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
Protected EndOfLine.GtkTextIter
Protected StartOfLine.GtkTextIter
Protected *TextBuffer.GtkTextBuffer
*TextBuffer = gtk_text_view_get_buffer_(GadgetID(EditorID))
gtk_text_buffer_get_iter_at_line_(*TextBuffer, @StartOfLine, LineNumber)
gtk_text_view_scroll_to_iter_(GadgetID(EditorID), StartOfLine, 0.0, #False, 0.0, 0.0)
EndOfLine = StartOfLine
gtk_text_iter_forward_to_line_end_(EndOfLine)
gtk_text_buffer_select_range_(*TextBuffer, StartOfLine, EndOfLine)
CompilerCase #PB_OS_MacOS
CompilerIf #PB_Compiler_Version < 470 Or (#PB_Compiler_Version >= 500 And Subsystem("Carbon"))
Protected EndOfLine.L
Protected StartOfLine.L
Protected TXNObject.L
If GetControlProperty(GadgetID(EditorID), $50555245, $54584F42, 4, 0, @TXNObject) = 0
StartOfLine = FindString(GetGadgetText(EditorID), GetGadgetItemText(EditorID, LineNumber)) - 1
EndOfLine = StartOfLine + Len(GetGadgetItemText(EditorID, LineNumber))
TXNSetSelection(TXNObject, StartOfLine, EndOfLine)
TXNShowSelection(TXNObject, #True)
EndIf
CompilerElse
Protected Range.NSRange
Range\location = FindString(GetGadgetText(EditorID), GetGadgetItemText(EditorID, LineNumber)) - 1
Range\length = Len(GetGadgetItemText(EditorID, LineNumber))
CocoaMessage(0, GadgetID(EditorID), "setSelectedRange:@", @Range)
CocoaMessage(0, GadgetID(EditorID), "scrollRangeToVisible:@", @Range)
CompilerEndIf
CompilerCase #PB_OS_Windows
Protected Selection.CHARRANGE
Protected StartOfLine.I
StartOfLine = SendMessage_(GadgetID(EditorID), #EM_LINEINDEX, LineNumber, 0)
Selection.CHARRANGE\cpMin = StartOfLine
Selection.CHARRANGE\cpMax = StartOfLine + Len(GetGadgetItemText(EditorID, LineNumber)) + 1
SendMessage_(GadgetID(EditorID), #EM_EXSETSEL, 0, @Selection)
CompilerEndSelect
EndProcedure
Define i.I
OpenWindow(0, 270, 100, 200, 154, "Select line by line", #PB_Window_SystemMenu)
EditorGadget(0, 5, 5, 190, 144)
For i = 1 To 15
AddGadgetItem(0, - 1, "Line number " + Trim(Str(i)))
Next
For i = 0 To CountGadgetItems(0) - 1
SelectEditorLine(0, i)
Delay(400)
Repeat
Select WindowEvent()
Case 0
Break
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Next i
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Code: Select all
gtk_text_view_scroll_to_iter_(GadgetID(EditorID), StartOfLine, 0.0, #False, 0.0, 0.0)
Thanks a lotHaha, Kwaï, you're such a crazy guy!
I like you.
Le mien avoir toutes ces fonctions qui nous manque !Yes top cool the LUIS code
My dream ... that one day, reading the bible bill as it![]()
![]()
So good luck....you not again beginning to sleepUlix wrote:My dream is to have all the functions that we lack!
Le mien avoir toutes ces fonctions qui nous manque !
En franche wrote:Et ben bonne chance .....t'es pas pres de t'endormir![]()
http://www.purebasic.fr/french/viewtopi ... =5&t=10072
Et puis fait comme tout le monde....la queue comme à carrouf![]()
![]()
Moi, ça fait 6 ans que j'attend non pas le retour du JEDI
Mais seulement le retour à la ligne et la lib GIF![]()
Code:
gtk_text_view_scroll_to_iter_(GadgetID(EditorID), StartOfLine, 0.0, #False, 0.0, 0.0)
has been added to scroll a selected line which is currently hidden into the visible area. Furthermore for the sake of clarity I renamed the procedure from SetEditorState() to SelectEditorLine().