ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: [ Tk ] Einfache Select Box
BeitragVerfasst: 06 Dez 2002, 01:42 
Offline
Lehrling

Registriert: 24 Jun 2002, 13:32
Beiträge: 95
Wohnort: Berlin


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191

require 'tk'


class TkLayer
attr_writer :x, :y
attr_reader :layer
def initialize( base = nil )
@layer = TkToplevel.new( 'takefocus' => 1 )
@layer.withdraw
@layer.overrideredirect(true)
# Default Position des Layers
if base
@x = TkWinfo.rootx base
@y = TkWinfo.rooty base
else
@x = 80
@y = 80
end
end
# :: PUBLIC METHODS

def hide object = @layer
@layer = object
object.withdraw
end
# :: Show
# Zeigt den 'Layer', mittels deiconify wieder an, und positioniert ihn
def show object = @layer, x = @x, y = @y
@layer = object
object.geometry("+#{ x }+#{ y }")
object.deiconify
end
end



class TkSelectBox
attr_reader:x, :y, :selectBox, :baseFrame, :auswahl
attr_writer :root, :values, :options, :x, :y
def initialize
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :: Public Properties ::
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# uebergebenes Root Fenster
@root = String::new
@values = Array::new
@options = Array::new
@x = 10
@y = 10
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :: Private Properties ::
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@open = false
@baseList = String::new
@pfeilbutton = String::new
@auswahl = String::new
end
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :: PUBLIC METHODS ::
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
def selectBox root = @root, vals = @values, opt = @options, x = @y, y = @x
if root == ''
root = nil
@root = root
else
root.update
end
@root = root
# Frame in der die Listbox liegt
@baseFrame = TkFrame.new( root ).pack
@baseFrame.place( 'x' => x, 'y' => y )
# Anzeige List, eine Zeile
@baseList = TkListbox.new( @baseFrame, *opt).grid( 'colum' => 0, 'row' => 0)
@baseList.height( 1 )
# Listbox Pfeil
# Mit Bild :
#img = TkPhotoImage.new( 'file' => 'pfeil.gif' )
#@pfeilbutton = TkButton.new( @baseFrame, 'image' => img, 'height' => 12 ).grid( 'colum' => 1, 'row' => 0)
# Ohne Bild:
@pfeilbutton = TkButton.new( @baseFrame, 'text' => '.', 'height' => 1 ).grid( 'colum' => 1, 'row' => 0)
# Base Frame neu Zeichnen, um die kordinaten zu bekommen
@baseFrame.update
klappeX = TkWinfo.rootx( @baseFrame ).to_i
klappeY = TkWinfo.rooty( @baseFrame ).to_i
# :: Layer Klasse
# erzeugt ein TopLevel das man verstecken und anzeigen kann
@auswahl = TkLayer.new( @baseFrame )
@auswahl.x = klappeX
@auswahl.y = klappeY + TkWinfo.height( @baseFrame ).to_i
# Initialiesierung der Auswahl Optionen
list = self.setListOptions( @auswahl.layer, 3, vals, opt )
bindCommands()
return [ @baseList, list[0] ]
end
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :: PRIVATE METHODS ::
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :: setListOptions
# Initialiesierung der Auswahl Options Felder
def setListOptions root, row, vals = [], options = []

# Scrollbar
bar = TkScrollbar.new( root )

# Auswahl ListBox wird erzeugt...
list = TkListbox.new( root, *options ) {
yscrollcommand proc{|first,last| bar.set first,last}
}
# ... und bekommt seine Werte zugewiesen...
vals.each do |val,cmnd|
list.insert( 'end', val )
end
list.pack( 'side' => 'left' )

# Scrollen Initialiesieren
bar.pack( 'side' => 'right', 'fill' => 'y' )
bar.command(proc { |args|
list.yview(*args)
})
list.bind( 'MouseWheel',
proc {|args| list.yview( *args ) }
)
list.configure( 'selectmode' => 'single' )
# Auswhal wieder zuklappen wenn man was ausgewaehlt hat
list.bind( 'ButtonRelease-1' ) do |x|
val = list.get( list.curselection )
@baseList.delete( 0, 1 )
@baseList.insert( 0, val )
@baseList.update
self.hide()
@open = false
end
# Damit die Liste + die Scrollbar als Object ansprechbar sind
return [list, bar]
end
# :: show
# Zeigt die Auswahl Optionen
def show
@auswahl.show()
end
# :: hide
# Versteckt die Auswahl Optionen
def hide
@auswahl.hide()
end
# :: bindCommands
# Buttons zum Anzeigen
def bindCommands
@pfeilbutton.command {
if !@open
self.show()
@open = true
else
self.hide()
@open = false
end
}
@baseList.bind( 'ButtonRelease' ) do
if !@open
self.show()
@open = true
else
self.hide()
@open = false
end
end
end
end
r = TkRoot.new( )

r.geometry("+#{ 100 }+#{ 100 }")


sb = TkSelectBox::new


sb.root = r

vals =[ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o','p','q','r','s','t','u','v','w','x','y','z' ]

opt = [ 'height' => 4, 'width' => 20 ]

sb.values = vals

sb.options = opt
sb.selectBox
r.bind( 'Control-w' ) do
r.destroy
end
Tk.mainloop


mit bild als pfeil ( pfeilbutton ) sieht das nartuerlich netter aus,
einfach ein gif 10x8 pixel als pfeil im selben verzabspeichern
und die zwei zeilen im code auskommentieren

mfg

_________________
...mind your brain
SelfRuby
JBB


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16 Dez 2002, 18:09 
Offline
Meister

Registriert: 25 Jun 2002, 20:39
Beiträge: 276
Wohnort: Hamburg
komisch.. irgendwie bekomme ich Fehler.. wenn ich Deinen Source Copy/Paste von hier kopiere....Wollte das jetzt mal testen...
Vielleicht Irgendein Problem mit Sonderzeichen ?


Nach oben
 Profil  
 
 Betreff des Beitrags: hmm
BeitragVerfasst: 16 Dez 2002, 18:32 
Offline
Lehrling

Registriert: 24 Jun 2002, 13:32
Beiträge: 95
Wohnort: Berlin
kann das hier bei der arbeit grad nich testen, hab grad kein ruby installiert
ich schaus mir heut abend mal an,
iss aber komisch, hab das getestet bevor ich es gepostet hab

ich schau nachher mal
mfg

_________________
...mind your brain
SelfRuby
JBB


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16 Dez 2002, 22:02 
Offline
Lehrling

Registriert: 24 Jun 2002, 13:32
Beiträge: 95
Wohnort: Berlin
also bei mir gehts
bei mir gibts ne warnung ( tk.rb:198: default 'to_a' will be obsolete )


ich hab das nicht auf linux getestet

was gibt es denn fuer eine fehlermeldung bei dir?

_________________
...mind your brain
SelfRuby
JBB


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: