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.