Einen solchen Effekt können wird in Visual FoxPro ebenfalls erzielen. Hierzu binden wir den 'Moved' Event der Hauptform einfach an die zugehörigen Unterforms.
Der für die Repositionierung benötigte Code befindet sich in der Prozedur 'MoveSubForm':
oFrmSub.Top = oFrmMain.Top
IF ( oFrmMain.Left + oFrmMain.Width + 15 + oFrmSub.Width ) > _screen.Width
oFrmSub.Left = oFrmMain.Left - oFrmSub.Width
ELSE
oFrmSub.Left = oFrmMain.Left + oFrmMain.Width + 15
ENDIF
Da das MOVED() Event feuert, sobald wir die Hauptform verschieben, sorgt der o.a. Code für die Repositionierung der Unterform auf Basis der aktuellen Position der Hauptform.
Hier nun der vollständige Mustercode:
CLEAR ALL
PUBLIC oFrmMain as Form, oFrmSub as Form, oHandler as Object
* // Forms und Handler erzeugen
* // create forms and handler
oFrmMain = CREATEOBJECT( [form] )
oFrmSub = CREATEOBJECT( [form] )
oHandler = CREATEOBJECT( [oHandlerObj] )
* // Hauptform positionieren und konfigurieren
* // positioning and configureing the main form
oFrmMain.Top = 100
oFrmMain.Left = 100
oFrmMain.AddObject([cmdReleaseAll],[commandbutton])
oFrmMain.cmdReleaseAll.Caption = [Exit]
oFrmMain.cmdReleaseAll.Height = 25
oFrmMain.cmdReleaseAll.Visible = .T.
oFrmMain.Visible = .T.
* // Unterform konfigurieren
* // configureing the subform
oFrmSub.BorderStyle = 0
oFrmSub.TitleBar = 0
oFrmSub.BackColor = RGB( 128 , 128 , 128 )
oFrmSub.Visible = .T.
* // Unterform direkt neben Hauptform platzieren
* // place the subform right beside the main form
oHandler.MoveSubForm()
* // Handler an relevante Events binden
* // bind the handler to essential events
BINDEVENT( oFrmMain , [Moved] , oHandler , [MoveSubForm] )
BINDEVENT( oFrmMain.cmdReleaseAll , [Click] , oHandler , [CloseSubForm] )
DEFINE CLASS oHandlerObj AS custom
Name = [ohandler]
PROCEDURE MoveSubForm
oFrmSub.Top = oFrmMain.Top
IF ( oFrmMain.Left + oFrmMain.Width + 15 + oFrmSub.Width ) > _screen.Width
oFrmSub.Left = oFrmMain.Left - oFrmSub.Width
ELSE
oFrmSub.Left = oFrmMain.Left + oFrmMain.Width + 15
ENDIF
ENDPROC
PROCEDURE CloseSubForm
UNBINDEVENT( oFrmMain , [Moved] , oHandler , [MoveSubForm] )
UNBINDEVENT( oFrmMain.cmdReleaseAll , [Click] , oHandler , [CloseSubForm] )
oFrmMain.Release
oFrmSub.Release
oFrmMain = .Null.
oFrmSub = .Null.
RELEASE oFrmMain, oFrmSub
ENDPROC
ENDDEFINE
Keine Kommentare:
Kommentar veröffentlichen