Seite 1 von 1

Control verschieben: Zuweisung korrekt, Effekt=NULL!

Verfasst: Sa, 18.01.2014 14:36
von DocCyber
Guten Tag

bin der Verzweiflung nahe und komme nicht mehr weiter.
Ich scheitere an der trivialen Aufgabe, ein Kontrollelement (hier z.B. eine Schaltfäche) verschieben zu wollen.
Die neue X-Position soll der X-Position eines anderen Controls (hier: Listenfeld) entsprechen, das als Parameter übergeben wird.
Der nachfolgende Code ist -wie ich finde- ziemlich einfach und selbsterklärend. Aber irgend etwas ist offenbar falsch.

Code: Alles auswählen

sub MoveControl(oSrcList as object)
	'Abfrage des Referenzwerts ergibt richtiges Ergebnis:
	'print oSrcList.PosSize.X
	
	dim oForm as object  'hier: ein Datenbankformular
 	dim oController as object
	dim oModel as object
	dim oCtrl as object
	dim ps as variant

	oForm = thisComponent.DrawPage.Forms(0)
	oController = thisComponent.CurrentController
	oModel = oForm.getByName("btnModify")
	oCtrl = oController.getControl(oModel)
	
    ' nachfolgende Anweisung wird fehlerfrei ausgeführt, 
    ' obwohl PosSize.X read-only ist! Natürlich ohne den gewünschten Effekt.
	' oCtrl.PosSize.X = oSrcList.PosSize.X   

	ps = oCtrl.PosSize
	ps.X = oSrcList.PosSize.X
	' nachfolgende Anweisung aber erzeugt einen Fehler: Read-Only!
	' oCtrl.PosSize = ps
    
    ' Nachfolgende Anweisung scheint korrekt, aber es tut sich nichts.
	oCtrl.setPosSize(ps.X, ps.Y, ps.Width, ps.Height, 15)
	
	'Die Durchleuchtung bestätigt, dass PosSize.X unverändert ist:
	xray oCtrl
end sub
Kann mir bitte jemand weiterhelfen??
Herzlichen Dank


P.S.
Sehr interessant ist eine Beobachtung, die ich soeben gemacht habe:
Lasse ich den Code schrittweise im Debugger durchlaufen, dann bitzt die Schaltfläche für einen Sekundenbruchteil an der gewünschten Stelle auf, wenn die neue Position zugewiesen wird:

Code: Alles auswählen

oCtrl.setPosSize(ps.X, ps.Y, ps.Width, ps.Height, 15)
Allerdings steht sie danach wieder unverändert an der alten Stelle. Sehr merkwürdig!!

Re: Control verschieben: Zuweisung korrekt, Effekt=NULL!

Verfasst: Sa, 18.01.2014 17:46
von DPunch
Servus

Siehe Andrew Pitonyak: AndrewMacro.odt Abschnitt 10.3.1 Size and location of a Control by name

Code: Alles auswählen

sub MoveControl(oSrcList as object)
   GlobalScope.BasicLibraries.LoadLibrary("Tools")
   
   srcListName = oSrcList.Model.Name
   
   targetControlShape = GetControlShape(thisComponent,"btnModify")
   sourceControlShape = GetControlShape(thisComponent,srcListName)
   
   targetControlPosition = targetControlShape.Position
   
   targetControlPosition.X = sourceControlShape.Position.X
   
   targetControlShape.Position = targetControlPosition
end sub

Re: Control verschieben: Zuweisung korrekt, Effekt=NULL!

Verfasst: Sa, 18.01.2014 18:58
von DocCyber
Hallo DPunch,

Klasse, das funktioniert und hilft mir somit weiter!
Vielen Dank für deine Mühe.

Allerdings interessiert mich, warum das Control bei meinem Code tatsächlich (hab's überprüft!!) verschoben wird!
Wenn allerdings der Code abgearbeitet ist, "springt" es sozusagen wieder auf die ursprüngliche Position. :o
Gibt es dafür eine Erklärung?