Seite 1 von 2
editorgadget scrollen (gelöst)
Verfasst: 06.01.2010 23:43
von jpd
Hallo,
ich suche eine methode das das Scrollen zum letzen eintrag in ein Editorgadget unter Linux ermöglicht, unter windows ist dieser mit sendmessage möglich.
Code: Alles auswählen
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
;
Enumeration
#Editor_0
#Button_0
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 220, 0, 491, 300, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
EditorGadget(#Editor_0, 70, 30, 350, 160,#PB_Editor_ReadOnly)
ButtonGadget(#Button_0, 80, 230, 60, 30, "last entry")
EndIf
EndProcedure
Open_Window_0()
For x = 0 To 50
AddGadgetItem(#Editor_0, -1, "Test_"+Str(x))
Next
Repeat ; Start of the event loop
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
;You can place code here, and use the result as parameters for the procedures
If Event = #PB_Event_Gadget
If GadgetID = #Editor_0
ElseIf GadgetID = #Button_0
SendMessage_(GadgetID(#Editor_0),#EM_SCROLL,#SB_BOTTOM,0)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
End
Wie geht das unter Linux? ich verwende zur zeit Ubuntu 8.x
Danke
jpd
Re: editorgadget scrollen
Verfasst: 07.01.2010 10:20
von jpd
Hi,
habe die antwort im Englischen Forum gefunden.
Freak beschreibt wie man GTK scrolled window vewendet:
http://www.purebasic.fr/english/viewtop ... 24#p202224
Re: editorgadget scrollen (gelöst)
Verfasst: 23.02.2010 22:10
von pickelrobert
...und wenn ich einfach nur das ausgewählte Element in einem ListView- bzw. ListIconGadget anzeigen möchte?
Unter Windows ist es damit möglich
Code: Alles auswählen
SetGadgetState(#frmHaupt_lstTeil,i)
SendMessage_(GadgetID(#frmHaupt_lstTeil),#LVM_ENSUREVISIBLE,i,#True)
Re: editorgadget scrollen (gelöst)
Verfasst: 24.02.2010 14:12
von Shardik
Mit dem folgenden Beispiel kann in Windows und Linux in einem ListIconGadget
die gewünschte Zeile in der Mitte des angezeigten Teilbereichs positioniert werden
(für Linux ist zur Berechnung des anzuzeigenden Ausschnittes eine Zeilenhöhe von
22 Pixel eingesetzt worden, was je nach Distribution angepaßt werden muß; ich war
jetzt einfach zu faul, die Zeilenhöhe per GTK-API zu ermitteln

):
Code: Alles auswählen
OpenWindow(0, 0, 0, 130, 130, "ListView", #PB_Window_SystemMenu)
ListIconGadget(0, 5, 5, WindowWidth(0) - 10, WindowHeight(0) - 40, "Spalte 1", 60)
SpinGadget(1, 10, WindowHeight(0) - 30, 40, 25, 1, 50)
SetGadgetState(1, 1)
SetGadgetText(1, Str(GetGadgetState(1)))
ButtonGadget(2, 50, WindowHeight(0) - 30, 70, 25, "Anzeigen")
For i= 1 To 50
AddGadgetItem(0, -1, "Zeile " + Str(i))
Next
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case 1
SetGadgetText(1, Str(GetGadgetState(1)))
Case 2
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
gtk_tree_view_scroll_to_point_(GadgetID(0), -1, (GetGadgetState(1) - 1) * 22 - 20)
CompilerCase #PB_OS_Windows
SendMessage_(GadgetID(0), #LVM_ENSUREVISIBLE, GetGadgetState(1), #True)
CompilerEndSelect
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
Re: editorgadget scrollen (gelöst)
Verfasst: 24.02.2010 20:37
von Waldixxl
DANKE!
suche ich schon lange.
Walter
Re: editorgadget scrollen (gelöst)
Verfasst: 27.02.2010 22:33
von pickelrobert
Danke. So in etwa hatte ich mir das vorgestellt. Hängt auch von der geladenen Schrift und ihrer Größe ab. Muß mal sehen, ob ich das Beipiel dazu wiederfinde...
Re: editorgadget scrollen (gelöst)
Verfasst: 19.05.2011 19:44
von Shardik
Ich habe mein Beispiel von oben jetzt auch noch für den Einsatz unter
MacOS X erweitert:
Code: Alles auswählen
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
ImportC ""
RevealDataBrowserItem(ControlRef.L, ItemID.L, PropertyID.L, RevealOptions.L)
EndImport
CompilerEndIf
OpenWindow(0, 200, 100, 140, 150, "ListView", #PB_Window_SystemMenu)
ListIconGadget(0, 5, 5, WindowWidth(0) - 10, WindowHeight(0) - 40, "Spalte 1", 70)
SpinGadget(1, 5, WindowHeight(0) - 30, 50, 25, 1, 50)
SetGadgetState(1, 1)
SetGadgetText(1, Str(GetGadgetState(1)))
ButtonGadget(2, 60, WindowHeight(0) - 30, 70, 25, "Anzeigen")
For i= 1 To 50
AddGadgetItem(0, -1, "Zeile " + Str(i))
Next
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case 1
SetGadgetText(1, Str(GetGadgetState(1)))
Case 2
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
gtk_tree_view_scroll_to_point_(GadgetID(0), -1, (GetGadgetState(1) - 1) * 22 - 20)
CompilerCase #PB_OS_MacOS
RevealDataBrowserItem(GadgetID(0), GetGadgetState(1), 0, 1)
CompilerCase #PB_OS_Windows
SendMessage_(GadgetID(0), #LVM_ENSUREVISIBLE, GetGadgetState(1), #True)
CompilerEndSelect
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
Re: editorgadget scrollen (gelöst)
Verfasst: 19.11.2015 19:28
von Kukulkan
Hallo,
das ist fast genau das was ich auch cross-platform benötige. Allerdings muss ich vorher noch die Positionen ermitteln, damit ich bei einem Restart des Programms an exakt die selbe Position scrollen kann. Hat jemand auch dazu die passenden Befehle um die Position zu ermitteln? Selbst in der GTK Doku finde ich die Funktion, aber kein Gegenstück um die Position zu ermitteln...
Danke,
Kukulkan
Re: editorgadget scrollen (gelöst)
Verfasst: 19.11.2015 21:35
von Omi
Hallo Kukulkan,
betrifft Deine Ansinnen das Editor- oder das ListIconGadget?
Fürs ListIconGadget kann man (zumindest in gtk2) das
Adjustment (Slider) abfragen und setzen
Ein Rohling ohne Funktion ...
Code: Alles auswählen
ImportC ""
gtk_adjustment_get_value.d(*adjustment.GtkAdjustment)
gtk_adjustment_set_value(*adjustment.GtkAdjustment, value.d)
EndImport
Define *adjust.GtkAdjustment
Define vOffs.d
;holt das vertikale Adjustment ...
*adjust= gtk_tree_view_get_vadjustment_(GadgetID(ListIconGadget))
;holt die vert. Sliderstellung als double ...
vOffs= gtk_adjustment_get_value(*adjust)
;setzt die vert. Sliderstellung als double ...
gtk_adjustment_set_value(*adjust, vOffs)
In gtk3 läuft das Ganze nochmal über die Zwischenschicht
GtkScrollable.
Falls der Rohling nicht reicht bastele ich Dir mal ein kleines Beispiel.
Gruß Charly
Re: editorgadget scrollen (gelöst)
Verfasst: 20.11.2015 09:03
von Kukulkan
Hallo Omi,
damit komm ich schonmal klar. Danke!
Jetzt noch für MacOS, dann hab ich es fast zusammen. Die API für Windows hab ich schon gefunden.