[gelöst] Canvas wird von anderen Forms 'übermalt'

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
mulcheo
Beiträge: 57
Registriert: Do 1. Aug 2013, 15:11

[gelöst] Canvas wird von anderen Forms 'übermalt'

Beitrag von mulcheo »

Nochmal ich,

Nach umfassender Hilfe durch das Forum steht mein Prog nun mehr oder minder und ich kann letzte Schönheitskorrekturen vornehmen. Eine Sache, die ich mir bis jetzt nicht ganz erschließen konnte, ist diese:

Ich 'male' ja nun meinen Text mit Canvas auf das Form (bzw. auf ein Panel). Nun ist es so, dass einige Fenster, wie beispielsweise das PopUpmenu, sich zeitweise über den Text legen und danach anstandslos die darunterliegende Grafik (Text) wieder freigeben - super, so soll es ja auch sein! Leider habe ich auch ein zweites Form erstellt und das - hier entsteht das Problem - 'übermalt' bzw 'radiert' meinen Text auf Form1, sobald es zeitweise darübergeblendet oder drübergeschoben wird. Ganz ähnliches passiert, wenn ich Form1 resize u.ä.. Naja ich denke, jeder weiß wovon ich schreibe...

Jetzt habe ich die Beispielprojekte, die bei Lazarus mitkommen, durchgesehen und dort ist bei 'canvastest.lpi' das Problem ganz offenkundig irgendwie gelöst worden - nur sehe ich nicht, an welcher Stelle. Ich habe, wie dort in den einzelnen proceduren vorgegeben, probiert mir zunächst ein Bitmap zu erstellen, aber das löst die Sache nicht... mein 'Sandkasten-Prog' wird leider übermalt:

Code: Alles auswählen

begin
  Tafel:=TBitmap.Create;
  Tafel.Height:=150;
  Tafel.Width:=400;
  Tafel.Canvas.TextOut(10,10,'Test');
  Canvas.Draw(0,0,Tafel);
  Tafel.Free;
end;
 

Ein Blick in den Objektmanager hat mir auch nicht helfen können. So dass ich mal wieder auf externe Hilfe angewiesen bin.

wie immer danke ich schonmal im Voraus :>
Zuletzt geändert von mulcheo am So 29. Jun 2014, 22:05, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Canvas wird von anderen Forms 'übermalt'

Beitrag von theo »

Wann (in welchem Ereignis) malst du denn? OnPaint wäre geeignet.

mulcheo
Beiträge: 57
Registriert: Do 1. Aug 2013, 15:11

Re: Canvas wird von anderen Forms 'übermalt'

Beitrag von mulcheo »

also auf Form1 male ich in keinem spez. Ereignis sondern innerhalb dreier eigener Prozeduren, die wahlweise durch keypress, mousewhell oder mousedown oder andere prozeduren hervorgerufen werden. Das funktioniert auch alles soweit. Nun blende ich eben zeitweise Form2 darüber, sobald Form2 wieder ausgeblendet wird, ist Form1 auf den einst überlagerten Teilen gelöscht...

...Ah...

...ich google mich gerade durch onpaint, das scheint sehr hilfreich, dann muss ich evtl. noch eine Methode finden, die dafür sorgt, dass mein (nachdem alle beteiligten Prozeduren darüber gelaufen sind) Canvas-Bild gespeichert und in Gänze reproduziert wird, oder vielleicht ist das auch überflüssig:... da muss ich nachher mal schaun - ich präzisiere meine Frage später noch falls nötig.

Danke schonmal

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2816
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Canvas wird von anderen Forms 'übermalt'

Beitrag von m.fuchs »

Du könntest auch ein TImage statt eines TPanels benutzen und dort in das Canvas eines Pictureas malen (Image1.Picture.PNG.Canvas zum Beispiel). Größe setzen vorher nicht vergessen.
Dann bleibt dir das Neuzeichnen auch erspart.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten