ich hatte ein Demo Code mit XBP_ORIGIN_TOPLEFT wo ich einige Zeit benötigt habe um die DXE LIBl anzupassen.
da ich vorhabe alle DXE Module auch XBP_ORIGIN_TOPLEFT fähig zu machen frage ich nach weiteren Tips.
die Position einer ComboBox() ist ja meistens Negativ ( zum Parent ) damit man das SLE Feld sieht.
bei XBP_ORIGIN_TOPLEFT ist das 0 ( Zero )
bei welchen anderen XbParts hat man noch solche Effekte ?
kann man den Form-Designer auf XBP_PP_ORIGIN / XBP_ORIGIN_TOPLEFT trimmen ?
XBP_PP_ORIGIN / XBP_ORIGIN_TOPLEFT
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: XBP_PP_ORIGIN / XBP_ORIGIN_TOPLEFT
Hallo Jimmy,
ich arbeite seit vielen Jahren grundsätzlich mit TopLeft. Sowohl in der GUI als auch im Druck. Das klappt absolut reibungslos mit allen XBParts.
Was meinst Du mit negativer Position bzw. 0 bei ComboBox()?
Jan
ich arbeite seit vielen Jahren grundsätzlich mit TopLeft. Sowohl in der GUI als auch im Druck. Das klappt absolut reibungslos mit allen XBParts.
Was meinst Du mit negativer Position bzw. 0 bei ComboBox()?
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: XBP_PP_ORIGIN / XBP_ORIGIN_TOPLEFT
habe jeweils +/- 100 im Demo eingefügtJan hat geschrieben:Was meinst Du mit negativer Position bzw. 0 bei ComboBox()?
Code: Alles auswählen
#include "Gra.ch"
#include "Xbp.ch"
#include "Appevent.ch"
#include "Font.ch"
PROCEDURE Main
LOCAL nEvent, mp1, mp2, aSize
LOCAL oDlg, oXbp, drawingArea, aEditControls := {}, oXbp1
LOCAL aDays := { "Montag" , "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" , "Sonntag" }
LOCAL i
IF IsMemberVar(XbpDialog(),"ClientSize") == .T.
aSize := {0,0}
ELSE
aSize := {286,149}
ENDIF
oDlg := XbpDialog():new( AppDesktop(), , {32,114}, aSize, , .F.)
IF aSize[1] == 0 .AND. aSize[2] == 0
oDlg:ClientSize := {270,110}
ENDIF
oDlg:taskList := .T.
oDlg:title := "Combobox on Static"
oDlg:create()
drawingArea := oDlg:drawingArea
drawingArea:setFontCompoundName( "8.Arial" )
oXbp1 := XbpStatic():new( drawingArea, , {10,50}, {240,36}, { { XBP_PP_BGCLR, -255 } } )
oXbp1:caption := "Gruppe"
oXbp1:clipSiblings := .T.
oXbp1:type := XBPSTATIC_TYPE_GROUPBOX
oXbp1:create()
oXbp := XbpCombobox():new( oXbp1, , {4,4-100}, {104,20+100}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } )
oXbp:tabstop := .T.
oXbp:create()
i := 1
FOR i := 1 TO 7
oXbp:addItem( aDays[i] )
NEXT
oXbp := XbpCombobox():new( oXbp1, , {132,4-100}, {104,20+100}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } )
oXbp:tabstop := .T.
oXbp:create()
i := 1
FOR i := 1 TO 7
oXbp:addItem( aDays[i] )
NEXT
CenterControl(oDlg)
oDlg:show()
SetAppFocus(oDlg)
nEvent := xbe_None
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
RETURN
wenn ich also die Listbox grösser machen will muss ich die Y-Position um den selben Betrag "negativ" verschieben damit der oCombo:XbpSLE Teil "relative" auf Höhe 0 ist.
das hatte zur Folge, bei dem Programm mit XBP_ORIGIN_TOPLEFT, das nach dem Resize (Pos/Size) die DXE Controls "verschwunden" waren und ich nicht verstand "warum"
... bis ich XBP_ORIGIN_TOPLEFT fand.
bei der ComboBox bemerkte das beim resize dass oCombo:XbpSLE dabei auf Hohe 0 zu platzieren ist und die SIZE tatsächlich "positiv" gedacht scheint.
ich muss also nun die Situationen finden wo ich "zu viel" Berechnung mache die für XBP_ORIGIN_BOTTOMLEFT notwendig waren wie dieses Beispiel.
Code: Alles auswählen
// ermittelt aktuelle Maus Position
FUNCTION GetCursorPos()
LOCAL cBuffer := SPACE( 8 )
LOCAL aPos := { nil, nil }
LOCAL aSize := AppDeskTop():CurrentSize()
DllCall( "User32.DLL", DLL_STDCALL, "GetCursorPos", @cBuffer )
aPos[ 1 ] := Bin2U( SUBSTR( cBuffer, 1, 4 ) )
aPos[ 2 ] := Bin2U( SUBSTR( cBuffer, 5, 4 ) )
***** For Xbase++ Coordinates, Bottom Left == 0,0 use.....
aPos[ 2 ] := aSize[ 2 ] - aPos[ 2 ]
RETURN aPos
gruss by OHR
Jimmy
Jimmy