Deutsch
Forum

ReBar Fragen/Probleme

 

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
 
09.12.2011  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

3.158 Betrachtungen

Unbenanntvor 0 min.
Jörg Sellmeyer16.06.2020
ByteAttack25.11.2015
Andreas Koch14.09.2015
Peter Max Müller22.09.2014
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie