AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FM: Auf Panel.Canvas malen

Ein Thema von MrSpock · begonnen am 2. Mär 2014 · letzter Beitrag vom 4. Mär 2014
Antwort Antwort
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#1

FM: Auf Panel.Canvas malen

  Alt 2. Mär 2014, 20:01
Hallo,

versuche jetzt schon etwas länger auf ein Canvas eines Panels zu malen. Unter der VCL funktioniert es. Unter FireMonkey habe ich mal folgenden Code geschrieben:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  theRect : TRectF;
begin
  theRect.Left := 10;
  theRect.Top := 40;
  theRect.Right := 50;
  theRect.Bottom := 60;
  Panel1.Canvas.Stroke.Color := claGreen;
  Panel1.BeginUpdate;
  Panel1.Canvas.FillRect(theRect, 0, 0, [], 1.0);
  Panel1.EndUpdate;
  Panel1.Repaint;
end;
Habe es auch schon ohne BeginUpdate und EndUpdate und auch ohne Repaint versucht, aber es erscheint nichts auf dem Panel.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: FM: Auf Panel.Canvas malen

  Alt 2. Mär 2014, 20:27
Versuch mal
theRect := TRectF.Create( 10,40,40,20);
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#3

AW: FM: Auf Panel.Canvas malen

  Alt 2. Mär 2014, 20:39
Keine Änderung. Es wird nichts angezeigt.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#4

AW: FM: Auf Panel.Canvas malen

  Alt 2. Mär 2014, 20:58
Unter FM muss man glaube ich noch BeginScene aufrufen.
Lars
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#5

AW: FM: Auf Panel.Canvas malen

  Alt 2. Mär 2014, 21:16
Hallo,

jetzt der Code im richtigen Eventhandler:
Delphi-Quellcode:
procedure TForm1.Panel1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
begin
  Panel1.Canvas.BeginScene;
  Panel1.Canvas.Fill.Color := claGreen;
  Panel1.Canvas.FillRect (ARect, 0, 0, [], 1.0);
  Panel1.Canvas.EndScene
end;
Gruß
Volker Zeller

Geändert von Volker Z. ( 2. Mär 2014 um 21:28 Uhr) Grund: Eventhandler korrigiert
  Mit Zitat antworten Zitat
mlc42

Registriert seit: 9. Feb 2013
130 Beiträge
 
#6

AW: FM: Auf Panel.Canvas malen

  Alt 2. Mär 2014, 21:17
Das ist wohl ein FM Feature. Zeichnen geht nur im Onpaint.
Nur bei Image.Bitmap.Canvas kann man das so machen.
Warum das bei Image dann doch geht erschliesst sich mir nicht so ganz.
So ist es bei mir zumindest bei XE5 für Android.

Martin
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#7

AW: FM: Auf Panel.Canvas malen

  Alt 3. Mär 2014, 21:22
Danke.

@Volker: Der Code funktioniert auch unter OSX.

@Martin: Auch das kann ich bestätigen, dass auf das Canvas eines panels nur in der OnPaint Methode gezeichnet werden kann.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: FM: Auf Panel.Canvas malen

  Alt 4. Mär 2014, 00:54
Das ist wohl ein FM Feature. Zeichnen geht nur im Onpaint.
Nur bei Image.Bitmap.Canvas kann man das so machen.
Warum das bei Image dann doch geht erschliesst sich mir nicht so ganz.
Martin
Also ich finde, das macht Sinn. Auch unter der VCL sollte man bei Controls die Zeichenaktionen auf den Canvas immer in den OnPaint, OnDraw-Events vornehmen. Wenn man das nicht so macht, und z.B. ein anderes Fenster über den selbst gezeichneten Canvas (außerhalb des onPaint-Events) zieht, dann ist die Darstellung weg oder verschmiert.

Image.Bitmap.Canvas ist ja quasi nur ein "interner" Canvas, den Du benötigst, um das Bitmap zu verändern (es existieren dafür natürlich noch andere Wege). WANN Du das dann anzeigst, ist eine ganz andere Frage. Von alleine wird die Änderung auch nicht angezeigt, allenfalls wenn Du mit der Maus oder einem anderen Fenster darüber ziehst, bzw. programmseitig eine Aktualisierung erzwingst.

Letztlich ist es eine Frage der optimierten Darstellung, die wenig Ressourcen beanspruchen soll: Änderungen nur anzeigen, wenn vorhanden und notwendig.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz