FMX Layout Position Stimmt nicht überein



  • Guten Tag,
    ich versuche 3 Layout-Objekte dynamisch untereinander anzulegen und Farblich zu kennzeichnen.
    Das klappt absolut nicht so wie ich es mir wünsche.
    Die Farben liegen alle übereinander oder sind erst gar nicht da.
    Zudem ist es mir ein rätsel wie es möglich ist das der Canvas bereich die Zeichenfläche des Layout überschreitet.
    Ich hoffe ihr könnt mir helfen, etliches lesen in der Hilfe hat mich nicht voran gebracht.

    TLayout *Layout1;
        TLayout *Layout2;
        TLayout *Layout3;
    
        Layout1 = new TLayout(this);
    	Layout2 = new TLayout(this);
    	Layout3 = new TLayout(this);
    
    	Layout1->Parent = this;
    	Layout2->Parent = this;
    	Layout3->Parent = this;
    
    	Layout1->Width = 150;
    	Layout2->Width = 150;
    	Layout3->Width = 150;
    
    	Layout1->Height = 150;
    	Layout2->Height = 150;
    	Layout3->Height = 150;
    
    	Layout1->Position->X = 0;
    	Layout2->Position->X = 0;
    	Layout3->Position->X = 0;
    
    	Layout1->Position->Y = 0;
    	Layout2->Position->Y = 150;
    	Layout3->Position->Y = 300;
    //-----------------------------------------------
    	Layout1->Canvas->BeginScene();
    	Layout1->Canvas->Fill->Color = claGreen;
    	Layout1->Canvas->FillRect(Rect(Layout1->Position->X,Layout1->Position->Y,Layout1->Width,Layout1->Height), 0, 0, AllCorners, 1.0);
    	Layout1->Canvas->EndScene();
    
    	Layout2->Canvas->BeginScene();
    	Layout2->Canvas->Stroke->Color = claYellow;
    	Layout2->Canvas->FillRect(Rect(Layout2->Position->X,Layout2->Position->Y,Layout2->Width,Layout2->Height), 0, 0, AllCorners, 1.0);
    	Layout2->Canvas->EndScene();
    
    	Layout3->Canvas->BeginScene();
    	Layout3->Canvas->Stroke->Color = claBlack;
    	Layout3->Canvas->FillRect(Rect(Layout3->Position->X,Layout3->Position->Y,Layout3->Width,Layout3->Height), 0, 0, AllCorners, 1.0);
    	Layout3->Canvas->EndScene();
    


  • Die Positionen bei FillRect sind falsch angegeben: du mußt relative Koordinaten (d.h. von 0/0 ausgehend) angeben.
    Verwende am besten enfach

    Layout1->Canvas->FilLRect(Layout1->ClientRect, ...);
    


  • Vielen Dank für die Antwort Th69

    Gebe ich die Koordinaten wie folgt an:

    Layout1->Canvas->FilLRect(Rect(0,0,150,150), ...);
    Layout2->Canvas->FilLRect(Rect(0,0,150,150), ...);
    Layout3->Canvas->FilLRect(Rect(0,0,150,150), ...);
    

    Werden die Canvas übereinander links oben in der Ecke, je mit den ausmaßen 150x150 gezeichnet.
    Ich verstehe nicht warum ich den Zeichenbereich des Steuerelementes verlassen kann.
    Die Elemente selbst liegen offensichtlich nicht übereinander, die Canvas aber schon.

    Layout1->ClientRect
    

    ClientRect ist weder eine Eigenschaft des Objektes noch von Canvas.

    Liegt es gegebenenfalls an der Deklaration?
    Ich verwende Embarcadero und benutze FMX, nicht VCL.



  • Sorry, hatte gedacht, daß es sich um VCL handelt - mit FMX kenne ich mich nicht aus.


Anmelden zum Antworten