Forum | | | | Georg Hovenbitzer | Hallo zusammen,
das Wetter wird draußen schlechter und schon sitzt man mehr am Rechner und versucht mal wieder was zu Programmieren. Aber wie es so ist tauchen direkt die Probleme und Fragen auf und ich hoffe ihr könnt mir helfen.
Der Anhängende Code erstellt ein Rebar mit einer Liste auf der linken Seite und einem weiteren ReBar auf der rechten. Im zweiten befindet sich oben eine List und unten ein Static Feld worauf zwei Listen gesetzt sind.
Folgende Fragen habe ich nun: Wie ermittle ich, wenn rechts unten in einem der beiden Listen ein Eintrag ausgewählt wird wenn diese Fenster auf dem Static erzeugt wurden? Wenn ich diese beiden Fenster auf dem ReBar2 erstelle komme ich zwar an den ausgewählten Eintrag, aber mit dem Neuzeichnen des Fenster klappt es nicht mehr, wie bekomme ich wenn dieses hin? Bei dem ersten ReBar mit der senkrechten Trennung wird der Mauszeiger zu einem Pfeil mit zwei Spitzen wenn man über ihm steht, bei der wagenrechten Trennung geschieht dies nicht, kann man dies ändern? Gibt es eine andere, vielleicht bessere Lösung so eine Unterteilung darzustellen?
Viele Grüße Georg
$H windows.ph
$H messages.ph
$H commctrl.ph
Cls
WindowTitle "RedBar"
Window 0,0-1024,768
Struct ReBar = Size&, \
Mask&, \
Style&, \
clrFore&, \
clrBack&, \
lpText&, \
cch&, \
iImage&, \
hwndChild&, \
cxMinChild&, \
cyMinChild&, \
cx&, \
hbmBack&, \
wID&, \
cyChild&, \
cyMaxChild&, \
cyIntegral&, \
cxIdeal&, \
lParam&, \
cxHeader&
Declare ReBar#
Dim ReBar#,ReBar
Clear ReBar#
Var ReBar1& = @Control("ReBarWindow32","",(~WS_CHILD | ~WS_VISIBLE | ~CCS_NORESIZE | ~WS_BORDER | ~WS_CLIPCHILDREN | ~WS_CLIPSIBLINGS | ~RBS_VARHEIGHT | ~RBS_AUTOSIZE),2,2,800,700,%hWnd,200,%hInstance,0)
Var lb1& = @Create("ListBox",ReBar1&,0,0,0,0,0)
Var ReBar2& = @Control("ReBarWindow32","",(~WS_CHILD | ~WS_VISIBLE | ~CCS_NORESIZE | ~CCS_VERT | ~WS_BORDER | ~WS_CLIPCHILDREN | ~WS_CLIPSIBLINGS | ~RBS_VARHEIGHT | ~RBS_AUTOSIZE),0,0,400,350,%hwnd,200,%hInstance,0)
Var lb2& = Create("ListBox",ReBar2&,0,0,0,0,0)
'Fenster liegen auf dem Static Feld
'Var lb3& = Create("Text",ReBar2&,"",0,0,0,0)
'Var lb4& = Create("ListBox",lb3&,0,10,10,100,50)
'Var lb5& = Create("ListBox",lb3&,0,50,150,70,100)
'Fenster liegen auf dem ReBar&
Var lb3& = Create("Text",ReBar2&,"",0,0,0,0)
Var lb4& = Create("ListBox",ReBar2&,0,10,520,100,50)
Var lb5& = Create("ListBox",ReBar2&,0,150,550,70,100)
With ReBar#
.Size& = @SizeOf(ReBar#)
.Mask& = (~RBBIM_CHILD | ~RBBIM_CHILDSIZE | ~RBBIM_SIZE | ~RBBIM_STYLE | ~RBBIM_IDEALSIZE | ~RBBIM_ID | ~RBBIM_TEXT)
.Style& = ~RBBS_NOGRIPPER
.clrFore& = 0
.clrBack& = 0
.lpText& = 0
.cch& = 0
.iImage& = 0
.hwndChild& = lb2&
.cxMinChild& = 100
.cyMinChild& = 700
.cx& = 500
.hbmBack& = 0
.wID& = 0
.cyChild& = 0
.cyMaxChild& = 800
.cyIntegral& = 0
.cxIdeal& = 0
.lParam& = 0
.cxHeader& = 0
@SendMessage(ReBar2&,~RB_INSERTBAND,0,ReBar#)
.Style& = ~RBBS_GRIPPERALWAYS
.clrFore& = 0
.clrBack& = 0
.lpText& = 0
.cch& = 0
.iImage& = 0
.hwndChild& = lb3&
.cxMinChild& = 100
.cyMinChild& = 700
.cx& = 200
.hbmBack& = 0
.wID& = 0
.cyChild& = @Width(ReBar2&)
.cyMaxChild& = 800
.cyIntegral& = 0
.cxIdeal& = 0
.lParam& = 0
.cxHeader& = 0
@SendMessage(ReBar2&,~RB_INSERTBAND,1,ReBar#)
EndWith
Clear ReBar#
With ReBar#
.Size& = @SizeOf(ReBar#)
.Mask& = (~RBBIM_CHILD | ~RBBIM_CHILDSIZE | ~RBBIM_SIZE | ~RBBIM_STYLE | ~RBBIM_IDEALSIZE | ~RBBIM_ID | ~RBBIM_TEXT)
.Style& = ~RBBS_NOGRIPPER
.clrFore& = 0
.clrBack& = 0
.lpText& = 0
.cch& = 0
.iImage& = 0
.hwndChild& = lb1&
.cxMinChild& = 80
.cyMinChild& = 0
.cx& = 800
.hbmBack& = 0
.wID& = 0
.cyChild& = @Height(ReBar1&)
.cyMaxChild& = @Height(ReBar1&)
.cyIntegral& = 0
.cxIdeal& = 0
.lParam& = 0
.cxHeader& = 0
@SendMessage(ReBar1&,~RB_INSERTBAND,0,ReBar#)
.Style& = ~RBBS_GRIPPERALWAYS
.clrFore& = 0
.clrBack& = 0
.lpText& = 0
.cch& = 0
.iImage& = 0
.hwndChild& = ReBar2&
.cxMinChild& = 100
.cyMinChild& = @Height(ReBar1&) - 6
.cx& = 800
.hbmBack& = 0
.wID& = 0
.cyChild& = @Height(ReBar1&)
.cyMaxChild& = @Height(ReBar1&)
.cyIntegral& = 0
.cxIdeal& = 0
.lParam& = 0
.cxHeader& = 0
@SendMessage(ReBar1&,~RB_INSERTBAND,1,ReBar#)
EndWith
ClearList
AddFonts
MoveListToHandle(lb1&)
MoveListToHandle(lb2&)
MoveListToHandle(lb4&)
MoveListToHandle(lb5&)
whilenot IsKey(27)
waitinput
If @Clicked(lb1&)
Locate 2,105
Print @GetString$(lb1&,@GetCurSel(lb1&))
ElseIf @Clicked(lb2&)
Locate 4,105
Print @GetString$(lb2&,@GetCurSel(lb2&))
ElseIf @Clicked(lb4&)
Locate 6,105
Print @GetString$(lb4&,@GetCurSel(lb4&))
ElseIf @Clicked(lb5&)
Locate 8,105
Print @GetString$(lb5&,@GetCurSel(lb5&))
EndIf
EndWhile
@DestroyWindow(ReBar1&)
@DestroyWindow(ReBar2&)
Dispose ReBar#
End
|
| | | Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 05.12.2011 ▲ |
| |
| | Uwe ''Pascal'' Niemeier | Hi Georg!
Wie ermittle ich, wenn rechts unten in einem der beiden Listen ein Eintrag ausgewählt wird wenn diese Fenster auf dem Static erzeugt wurden?
Ich verwende in so einem Fall (mehrere Elemente in einem Band) einen rahmenlosen Dialog, den ich dem Band zuteile: var dlg&=control("Dialog","dlg",$50000000,0,0,100,100,%hwnd,1,0) Außerdem können/sollten alle Elemente, die dem Rebar direkt unterstellt sind, als Parent das Hauptfenster haben.
Wenn ich diese beiden Fenster auf dem ReBar2 erstelle komme ich zwar an den ausgewählten Eintrag, aber mit dem Neuzeichnen des Fenster klappt es nicht mehr, wie bekomme ich wenn dieses hin?
Bei ReBars unter Profan gibt es erhebliche Probleme mit dem Neuzeichnen, auch nach Messageboxen, Menüs u.Ä. (Wahrscheinlich, weil das ReBar die Reihenfolge der Elemente, durcheinanderbringt und die dann nicht mehr mit der Profan-internen übereinstimmt). Mir hilft da bei Bedarf ein ~RedrawWindow(%hwnd,0,0,$485)
Bei dem ersten ReBar mit der senkrechten Trennung wird der Mauszeiger zu einem Pfeil mit zwei Spitzen wenn man über ihm steht, bei der wagenrechten Trennung geschieht dies nicht, kann man dies ändern?
Habe das mal per SubClassing gelöst, allerdings manuell (über ProcAddr/SetWindowLong), weil's in Profan noch keine SubClassProc gab. Dabei wurde eine Notify-Message des ReBars abgefangen und der Mauszeiger gezielt gesetzt. Müßte ich bei Bedarf mal raussuchen und nacharbeiten.
HTH Pascal |
| | | | |
|
AntwortenThemenoptionen | 3.158 Betrachtungen |
ThemeninformationenDieses Thema hat 2 Teilnehmer: |