2017-05-20 1 views
1

Wenn ichFiremonkey: Wie ordne ich richtig Etikett auf der rechten Seite?

RectangleCont.beginUpdate; 

myText1 := TText.Create(RectangleCont); 
myText1.parent := RectangleCont; 
myText1.text := 'a long text'; 
myText1.Position.x := RectangleCont.width - myText1.width; // 150px for exemple 
myText1.align := TalignLayout.right; 

myText2 := TText.Create(RectangleCont); 
myText2.parent := RectangleCont; 
myText2.text := 'OK'; 
myText2.Position.x := RectangleCont.width - myText1.width - myText2.width; // 50px for exemple 
myText2.align := TalignLayout.right; 

myText3 := TText.Create(RectangleCont); 
myText3.parent := RectangleCont; 
myText3.text := 'OK'; 
myText3.Position.x := RectangleCont.width - myText1.width - myText2.width - myText3.width; // 0px for exemple 
myText3.align := TalignLayout.right; 

RectangleCont.EndUpdate; 

werde ich <myText1><myText3><myText2> statt <myText3><myText2><myText1>

Hinweis: Wenn ich kürzeren Text setzen in myText1.text dann richtig funktioniert.

Gibt es eine Problemumgehung?

+0

versuchen 'myText1.align mit: = TAlignLayout.MostRight' –

+0

Auch die Einstellung der Position ist bedeutungslos, da die automatische Ausrichtung diese überschreibt. –

+0

Ja, ich weiß über TAlignLayout.MostRight, aber was ist, wenn ich 3 Texte habe? myText1, myText2 und myText3? auch normalerweise (und ich denke es ist der fall, sonst ist es ein großer fehler in delphi) in einer normalen welteinstellung position muss nicht bedeutungslos sein, weil align muss in bezug auf die ursprüngliche position der control (s) gemacht werden – loki

Antwort

1

Die Delphi Align Eigenschaft ist für die meisten Situationen gut, aber wenn Sie mehr selten Bedürfnisse haben, ist es nicht schwierig, Ihre eigene Grßenänderungsereignis zu schreiben. Einfach überspringen Sie die Align und Position Eigenschaften im Code einstellen und stattdessen diesen Code verwenden (es ist nicht getestet, aber ich denke, Sie bekommen die Idee, falls ich etwas vergessen):

... 
RectangleCont.OnResize := DoResizeRectangle; 
... 


procedure TMainForm.DoResizeRectangle(aSender: TObject); 
var lParent: TControl; 
begin 
    lParent := TControl(aSender); 
    myText1.Height := lParent.Height; 
    myText2.Height := lParent.Height; 
    myText3.Height := lParent.Height; 
    myText1.Position.Point := PointF(lParent.Width-myText1.Width, 0); 
    myText2.Position.Point := PointF(myText1.Position.X-myText2.Width, 0); 
    myText3.Position.Point := PointF(myText2.Position.X-myText3.Width, 0); 
end; 
-1
myText1.align := TalignLayout.left; 
myText2.align := TalignLayout.right; 
myText1.align := TalignLayout.right; 
+0

nein, das funktioniert nicht, weil Container in beginupdate ist – loki

Verwandte Themen