auf der :drawingArea habe ich das activeX MsComCtl ListView.
wenn ich nun das Listview "auffülle" erscheint evtl. ein vertikaler Scrollbar.
nun hat das Listview wohl "selbst" keinen Scrollbar sondern es ist der vom XbpDialog mit dem man das Listview "scrollt"
wenn ich nun ein :resize durchführe möchte ich "wissen" ob ich einen vertikalen Scrollbar habe und wie "breit" der ist unter Windows 7.
auch in der Höhe und Breite des XbpDialog "fehlt" ja jeweils "etwas" ... Border Padding ( Rahmenfüllung) wie bekomme ich die raus ?
Code: Alles auswählen
METHOD SplitDialog:MyReSize()
LOCAL aPosSP := ::oSplitbar:CurrentPos()
LOCAL aSize
LOCAL aSizeDA := ::DrawingArea:CurrentSize()
LOCAL nNewValue
LOCAL nHeightTitlebar := xbpGetSystemMetrics( SM_CYCAPTION )
LOCAL nHeightMenubar := xbpGetSystemMetrics( SM_CYMENU )
LOCAL nWidthBorder := xbpGetSystemMetrics( SM_CXDLGFRAME )
LOCAL nHeightBorder := xbpGetSystemMetrics( SM_CYDLGFRAME )
//
// wie "berechnet" man die :wide der Scrollbar ?
//
LOCAL nScrollWide := 0
//
// Resize :drawingArea, XbpSplitbar and XbpTreeview
//
aSize := ::CurrentSize()
// Compute space occupied by dialog's titlebar, border
// and menubar
aSizeDA[2] := aSize[2] - (nHeightTitlebar +;
nHeightMenubar +;
nHeightBorder*2 +2) ;
- XP_Vista()[2]
nNewValue := aSize[1] - ( aPosSP[1] +SP_WIDTH + nWidthBorder*2 +2 );
- XP_Vista()[1]
::DrawingArea:SetSize( { nNewValue, aSizeDA[2] } )
::DrawingArea:SetPos( { ::oSplitBar:CurrentPos()[1] + SP_WIDTH, 0 } )
::oSplitbar:SetSize( { SP_WIDTH, aSizeDA[2] } )
::dirTree:SetSize( { aPosSP[1], aSizeDA[2] } )
// if ::hScroll
// hm ... wie bekomme ich raus "ob" ein vertikaler Scrollbar sichtbar ist ?
// nScrollWide := 6
// ENDIF
::oFiles:SetSize( { aSizeDA[1]-aPosSP[1]-SP_WIDTH-nScrollWide, aSizeDA[2] } )
RETURN SELF
FUNCTION XP_Vista()
LOCAL nVersion := OnOSVersion()
LOCAL nHigh := 0
LOCAL nWide := 0
DO CASE
CASE nVersion = 5
CASE nVersion = 6
nHigh := 6
nWide := 6
ENDCASE
RETURN {nHigh,nWide}