editorgadget scrollen (gelöst)

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

editorgadget scrollen (gelöst)

Beitrag 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
PB 5.10 Windows 7 x64
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Re: editorgadget scrollen

Beitrag 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
PB 5.10 Windows 7 x64
pickelrobert
Beiträge: 198
Registriert: 09.12.2004 22:09

Re: editorgadget scrollen (gelöst)

Beitrag 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)
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: editorgadget scrollen (gelöst)

Beitrag 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 :wink: ):

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
Benutzeravatar
Waldixxl
Beiträge: 108
Registriert: 27.12.2005 17:35
Wohnort: Linz, Österreich

Re: editorgadget scrollen (gelöst)

Beitrag von Waldixxl »

DANKE! :) :)
suche ich schon lange.
Walter
Lesen bei schlechten Lichtverhältnissen ist nicht schlecht für die Augen, sondern trainiert sie sogar.

Linux Ubuntu Mate 18.04
PB 5.71
Intel i5
pickelrobert
Beiträge: 198
Registriert: 09.12.2004 22:09

Re: editorgadget scrollen (gelöst)

Beitrag 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...
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: editorgadget scrollen (gelöst)

Beitrag 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
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: editorgadget scrollen (gelöst)

Beitrag 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
Omi
Beiträge: 143
Registriert: 25.03.2013 09:59

Re: editorgadget scrollen (gelöst)

Beitrag 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
PureBasic Linux-API-Library: http://www.chabba.de
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: editorgadget scrollen (gelöst)

Beitrag von Kukulkan »

Hallo Omi,

damit komm ich schonmal klar. Danke! :allright:

Jetzt noch für MacOS, dann hab ich es fast zusammen. Die API für Windows hab ich schon gefunden.
Antworten