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  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: [Tk] Flaechen ueberdecken?
BeitragVerfasst: 21 Nov 2002, 12:00 
Offline
Lehrling

Registriert: 24 Jun 2002, 13:32
Beiträge: 95
Wohnort: Berlin
hi
ich will mir eine selectBox bauen (wie man sie aus html kennt)

nun wenn ich die selectbox aufklappe, soll sie das was drunter ist ja nicht verschieben, sondern ueberdecken

habs mit place versucht, also den frame in die die ganze selectbox liegt, hab ich mit place positioniert

wenn ich die selectbox nun aber aufklappe, wird mir das was unter der zugeklappten selectbox ist ( label ) aber 'ueberschrieben'; das label ist nache dem zuklappen nicht mehr da

ich dachte mit place kann man auch sachen ueber andere packen?
jemand ne idee,
liegt der fehler bei mir und place ist doch toll
...

;)

_________________
...mind your brain
SelfRuby
JBB


Zuletzt geändert von nilzn am 21 Nov 2002, 13:30, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 21 Nov 2002, 12:15 
Offline
Meister

Registriert: 25 Jun 2002, 20:39
Beiträge: 276
Wohnort: Hamburg
hast du das jetzt mit GTK oder Tk gemacht ?


Nach oben
 Profil  
 
 Betreff des Beitrags: Tk
BeitragVerfasst: 21 Nov 2002, 12:21 
Offline
Lehrling

Registriert: 24 Jun 2002, 13:32
Beiträge: 95
Wohnort: Berlin
mit der tk,
konnt mein topic nich mehr editieren

_________________
...mind your brain
SelfRuby
JBB


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 21 Nov 2002, 13:50 
Offline
Meister

Registriert: 25 Jun 2002, 20:39
Beiträge: 276
Wohnort: Hamburg
Erzeug sonst mal ein Toplevel und hau dort die selectBox rein.

Achtung Perl Code ->


1
2
3
$ListboxWin = $top->Toplevel(-bd => 2,-relief=> 'raised');

$ListboxWin->overrideredirect(1);


Ist ein Teil aus einer Perl sub von mir, wo ich mir eine MultipleSelectBox aus einer Listbox mit der Option -selectmode =>'multiple' gebaut habe.
Also ich habe verschiedene Widgets zusammen gesetzt .....

Gruß, leobm


Nach oben
 Profil  
 
 Betreff des Beitrags: wie sieht das den aus
BeitragVerfasst: 21 Nov 2002, 14:06 
Offline
Lehrling

Registriert: 24 Jun 2002, 13:32
Beiträge: 95
Wohnort: Berlin
ist dann das toplevel als solches nicht mehr zu erkennen?
ich mein es wird ja dann unter windoof in der taskleiste angezeigt, oder kann man das auch 'abstellen'


1
2
3


$ListboxWin->overrideredirect(1);


kann man das TopLevel dann auch nicht mehr verschieben/schliessen etc?

ich probiers dann mal aus

aber sowas wie 'layer' gibts bei tk definitiv nicht, also das ich objekte uebereinanderlege?

_________________
...mind your brain
SelfRuby
JBB


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 21 Nov 2002, 14:12 
Offline
Meister

Registriert: 25 Jun 2002, 20:39
Beiträge: 276
Wohnort: Hamburg
Toplevel.. ist kein eigener Frame, also taucht nicht in der Taskleiste auf.
Zitat:
aber sowas wie 'layer' gibts bei tk definitiv nicht, also das ich objekte uebereinanderlege?

Kannst du im Prinzip mit einem Toplevel simulieren.

Ich werde mal eine komplett neue MultipleSelectbox für Ruby schreiben.
Gibt es ja wohl noch nicht und ich werde die in Zukunft wohl auch mal wieder brauchen.

folgendes habe ich benutzt um den Toplevel-Fokus zu sperren.


1
2
# Toplevelr Fokus Sperren. vor verschieben sch��tzen
$ListboxWin->grab();

folgendes habe ich benutzt um das toplevel wieder zu schließen.



1
2
# schlie��en Button erzeugen. On Press. Fokus sperren wird wieder aufgehoben.
$b = $ListboxWin->Button(text => 'Schlie��en', command => sub{$ListboxWin->grabRelease();$ListboxWin->withdraw()})->pack();


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 03 Dez 2002, 00:14 
Offline
Lehrling

Registriert: 24 Jun 2002, 13:32
Beiträge: 95
Wohnort: Berlin
okay
hab da jetzt was hinbekommen, so einigermaßen : )

hab eine layer klasse gebaut, wo ein toplevel erzeugt wird
dass angezeigt und versteckt werden kann

ich krieg aber nich hin das toplevel zu fokusieren, bzw. in das TkRoot Fenster einzubinden, es versteckt sich momentan hinter dem fenster

ausserdem krieg ich die hoehe von dem SelectBox anzeigebereich nicht herraus, so das ich die aufgeklappte auswahl nich passend an die anzeige kriege


vielleicht kannst du mir ja helfen

hier mal der code



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

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)
@y = 20
@y = 20
end
# :: PUBLIC METHODS
def hide object = @layer
object.withdraw
end
def show x = @x, y = @y,object = @layer
object.geometry("+#{ x }+#{ y }")
object.takefocus(1)
object.deiconify
end
# :: PRIVATE METHODS
end




class TkSelectBox
attr_writer :x, :y, :selectBox
attr_writer :root, :values, :options, :x, :y

def initialize

# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :: Public Properties ::
# ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@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
# Frame in der die Listbox liegt
mainLayer = TkLayer.new( )
mainLayer.x = x
mainLayer.y = y
@selectBox = mainLayer
mainLayer.show

# Anzeige List, eine Zeile
@baselist = TkListbox.new(mainLayer.layer, 'height' => 1).grid( 'colum' => 0, 'row' => 0)
# Listbox Pfeil
img = TkPhotoImage.new( 'file' => 'pfeil.gif' )
@pfeilbutton = TkButton.new(mainLayer.layer, 'image' => img, 'height' => 12 ).grid( 'colum' => 1, 'row' => 0)

# :: Layer Klasse
# erzeugt ein TopLevel das man verstecken und anzeigen kann
@auswahl = TkLayer.new( )
@auswahl.x = x
@auswahl.y = y + 25
# Initialiesierung der Auswahl Optionen
list = self.setListOptions( @auswahl.layer, 3, vals, opt )
bindCommands()
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.insert( 0, val )
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( )
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,
'fg' => '#990000'
]

sb = TkSelectBox::new
sb.root = r
sb.values = vals
sb.options = opt
sb.selectBox

selBox = sb.selectBox

r.bind( 'Control-w' ) do
r.destroy
end
Tk.mainloop


mfg

_________________
...mind your brain
SelfRuby
JBB


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 03 Dez 2002, 18:58 
Offline
Meister

Registriert: 25 Jun 2002, 20:39
Beiträge: 276
Wohnort: Hamburg
Also den fokus/Vordergrund auf das Toplevel bekommst du mit der Methode raise().
Mit der Methode grab() reservierst du ganz egoistisch die Tastatur/Maus zum alleinigen Gebrauch (grabRelease() ist das Gegenteil) .
Um es unsichtbar zu machen benutzt du die Methode withdraw().

Ok, den Rest schaue ich mir später an, wenn ich etwas Zeit habe.

Gruß, leobm


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 06 Dez 2002, 01:47 
Offline
Lehrling

Registriert: 24 Jun 2002, 13:32
Beiträge: 95
Wohnort: Berlin
was fuern krampf, aber nun hab ichs

danke nochmal
hab jetzt die tk etwas mehr begriffen

naja hab die klasse nochma gepostet,
is zwar minimal, aber reicht fuer meine zwecke erstmal

http://www.rubyforum.de/viewtopic.php?p=100&sid=fe996b4cffc32fff10e512779d9dd395#100


mfg

_________________
...mind your brain
SelfRuby
JBB


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

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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: