Results 1 to 4 of 4

Thread: Canvas in FMX

  1. #1
    Senior Member
    Join Date
    Jul 2005
    Location
    Te mooi om waar te zijn..........
    Posts
    916

    Canvas in FMX

    Hallo allemaal,

    Ik ben aan het stoeien met het TPanel component onder FM Android. Als ik in runtime op een Tpanel click dan moet de kleur veranderen. Ik zie dan in een flits de kleur veranderen en dan weer terugspringen naar zijn originele kleur. Als ik dan nog eens erop klik wordt de hele form zwart en zie ik alleen het gekleurd panel. Klik ik dan gewoon ergens op het form dan komt alles weer gewoon te voorschijn en is betreffende panel weer in zn originele kleur te zien. Het lijkt erop dat het gekleurde vlak niet tot de canvas vh Tpanel behoord maar tot die van het Form.

    Wat doe ik hier fout?

    HTML Code:
    procedure TForm2.Panel13Click(Sender: TObject);
    var Rect: TRectF;
    begin
      Panel13.Canvas.BeginScene;
      Panel13.Canvas.Fill.Color := TAlphaColors.Grey;
      Panel13.Canvas.Stroke.Thickness := 1;
      Rect.Create(40, 16, 70, 46);
      Panel13.Canvas.FillRect(Rect,0,0,Allcorners,15);
      Panel13.Canvas.EndScene
    end;
    Alvast bedankt Frank

  2. #2
    Heb je dit ook al in de TPanel.Paint geprobeerd?

    (zelfde verhaal als bij het vorige topic maar FMX/Android is hier wat strenger mee)


    Tevens:
    Tip: Notice that calling BeginScene in the OnPaint event handlers has no effect, because BeginScene is called before the OnPaint event handler runs. This guarantees that painting always occurs in OnPaint without requiring extra and probably unexpected code to allow drawing to have an effect.
    http://docwiki.embarcadero.com/Libra...vas.BeginScene
    Dus Begin/EndScene hoef je niet in de Paint procedure te gebruiken.

  3. #3
    Senior Member
    Join Date
    Jul 2005
    Location
    Te mooi om waar te zijn..........
    Posts
    916
    Bedankt voor de tip. Het onder de OnPaint event schrijven is idd de oplossing.

    Echter nu loop ik tegen een ander probleem.

    Op het form staan meerdere TPanels die elk hun eigen OnPaint event hebben die ik via hun click event aanroep. Als ik nu van 1 panel op zijn click event klik wordt van alle panels het onpaint even aangesproken. In dit geval krijgt dan elke panel een nieuwe kleur terwijl alleen die panel een nieuwe kleur moet krijgen die ik aanklik.

    Hoe kan die, ik zie echt niet waarom....

    HTML Code:
    procedure TForm2.Panel40Click(Sender: TObject);
    var Rect : TRectF;
    begin
      Rect.Create(0, 0, 30, 30);
      Kleur1 := TAlphaColors.Blue;
      Kleur2 := TAlphaColors.Grey;
      Panel40Paint(Panel40, Canvas, Rect)
    end;
    
    
    procedure TForm2.Panel40Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
    begin
      Panel40.Canvas.Fill.Color       := Kleur1;
      Panel40.Canvas.Stroke.Thickness := 1;
      Panel40.Canvas.FillRect(ARect,0,0,Allcorners,15);
      Panel40.Canvas.Fill.Color       := Kleur2;
      Panel40.Canvas.FillText(ARect, Waarde, False, 1, [TFillTextFlag.RightToLeft],TTextAlign.Center, TTextAlign.Center);
      Panel40.Repaint;
    end;
    
    
    procedure TForm2.Panel41Click(Sender: TObject);
    var Rect : TRectF;
    begin
      Rect.Create(0, 0, 30, 30);
      Kleur1 := TAlphaColors.Blue;
      Kleur2 := TAlphaColors.Grey;
      Panel41Paint(Panel41, Canvas, Rect)
    end;
    
    
    procedure TForm2.Panel41Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
    begin
      Panel41.Canvas.Fill.Color       := Kleur1;
      Panel41.Canvas.Stroke.Thickness := 1;
      Panel41.Canvas.FillRect(ARect,0,0,Allcorners,15);
      Panel41.Canvas.Fill.Color       := Kleur2;
      Panel41.Canvas.FillText(ARect, Waarde, False, 1, [TFillTextFlag.RightToLeft],TTextAlign.Center, TTextAlign.Center);
      Panel41.Repaint;
    end;

  4. #4
    Je moet in de onclick helemaal geen Panel40Paint aanroepen. Dat moet je het programma laten doen. Je zou een Panel40.Refresh of Panel40.Invalidate kunnen proberen. De kleur moet je daarin bepalen of via een property variable doen. Maar zo aanroepen van paint is vragen om moeilijkheden.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •