Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bitmap.Canvas -> Form.Canvas ... nix zu sehen (https://www.delphipraxis.net/197007-bitmap-canvas-form-canvas-nix-zu-sehen.html)

TERWI 9. Jul 2018 14:44

Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
Das Ziel:
Ich erzeuge in einer Unit meines Proggis eine BitMap (ca. 600 X 600) und fülle diese kontinuierlich mittels FillRect und Textout mit irgendwelchen 'bunten' Sachen. Das klappt auch so weit ....
Neben dem speichern 'on demand' soll diese Bitmap als Kontrolle auch jederzeit zu sehen sein - d.h. ich möchte gerne diese (permanent geänderte) BM auf einer separatem Form (bei Bedarf) sehen.

Mein Prob:
1. Versuch: Form.Canvas auf BitMap.Canvas setzen ... nogo
2. Versuch: In Form.OnRepaint mit Canvas.Draw die BitMap ... nogo
3. Versuch: Direkt auf Form.Canvas pinseln - mit oder ohne repaint ... nogo
Ich hab immer nur das default graue Canvas der Form, obwohl sich da definitiv was zeigen sollte.

Das eruegute/geänderte BitMap ist jeweils so weit OK - aber ich sehe nix in der Form, flackert nicht mal ...

Ich bin da nicht so der Held in Sachen Graphics und mir gehen die Ideen aus.
Wie macht man das richtig ?

TiGü 9. Jul 2018 15:06

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
Zu 2.:
Machst du denn auch ein Form.Repaint, sobald du das Bitmap auf den Form.Canvas gezeichnet hast? (Form.Canvas.Draw oder Form.Canvas.StretchDraw)

TERWI 9. Jul 2018 15:25

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
Delphi-Quellcode:
// OSD-Form
type
...
  public
    FBitmap : TBitMap;
  end;

...

procedure TFormOSD.FormPaint(Sender: TObject);
begin
  if Assigned(FBitmap) then
    Canvas.Draw(0, 0, FBitmap);
end;
...

// Calling Unit:
type
  FBMOSD : TBitmap; // die zu bearbeitende BM

  ...

  // ... wenn was geändert wurde:
  if Assigned(FormOSD) then
  begin
    ... BitMap Inhalt ändern ...
    FormOSD.FBitmap := FBMOSD; // zur Sicherheit noch mal zuweisen
    FormOSD.Repaint;
  end;

Uwe Raabe 9. Jul 2018 15:26

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
Du kannst einfach ein TImage auf das Form platzieren und bei Bedarf dem Image.Picture.Bitmap deine Bitmap zuweisen.

TERWI 9. Jul 2018 15:45

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
... das gibt eine nette Zugriffsverletzung.

Neuer Versuch:
Ich schreibe direkt aus dem Programm auf's Canvas der OSD-Form.
Z.B.
Delphi-Quellcode:
FormOSD.Canvas.TextOut(X, Y, ansistring(Text));
ohne Repaint u. a. --- das geht !
... ist aber nicht Sinn der Sache.

TERWI 9. Jul 2018 16:02

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
Kleine Korrektur:
Ich hab in der Eile 'Image.Create/Free' vergessen.
Das ändert aber nichts an der mangelhaften / keine Ausgabe.

TiGü 9. Jul 2018 16:24

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
Beispielprojekt als ZIP hier hochladen?

TERWI 9. Jul 2018 16:36

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
Wäre theoretisch moglich - aber in der Komplexität steigt da mit Sicherheit niemand auch nach längerem nicht durch ... (hab ich schon nach 1 Woche Pause meine Sorgen)
Nächstes Prob wäre: Die Daten kommen aus einem DVB-Transport-Strom und es müsste der Tester schon ein DVB-Gerät oder adäquate TS-Files haben.

Wer da ernsthaft (!) interesse dran hat ... melden.

Hier ist einfach nur das Prob: Permanent generierte/geänderte Bitmap im Proggie in externer Form ebenso permanent anzeigen.
Mit Direktzugriff auf die OSD-Form geht das ja ... aber ich will (!) das mit Übergabe aus einer (zuvor generierten) Bitmap machen, die ich auch noch für anderes brauche.

Uwe Raabe 9. Jul 2018 16:47

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
Zitat:

Zitat von TERWI (Beitrag 1406799)
Kleine Korrektur:
Ich hab in der Eile 'Image.Create/Free' vergessen.
Das ändert aber nichts an der mangelhaften / keine Ausgabe.

Mit "Du kannst einfach ein TImage auf das Form platzieren" meine ich natürlich "im Form-Designer" und nicht zur Laufzeit.

Wenn deine Änderungen in dem Image nicht angezeigt werden, dann solltest du allerdings schon ein Beispielprojekt (ändere Bitmap, Anzeige auf dem Form) hier hochladen, damit wir sehen können, was da passiert. Ich habe so den Verdacht, daß uns da eine wesentliche Information noch fehlt.

himitsu 9. Jul 2018 17:36

AW: Bitmap.Canvas -> Form.Canvas ... nix zu sehen
 
Ist dein Bitmap Vollbild auf der Form? Wenn nicht, dann eine TPaintBox drumrum.

* auf Bitmap zeichnen
* und in Form.Repaint, bzw. PaintBox.Repaint oder .Refresh auslösen, damit im OnPaint (wo dein Draw drin ist) das Aktuelle angezeigt wird.
** wobei Repaint/Refresh sofort zeichnet, also wäre .Invalidate vielleicht besser, falls du schneller/öfters was am Bitmap änderst, damit nicht "sofort" sondern erst "gleich" gezeichnet wird, sobald die GUI später die Kontrolle zurückbekommen hat



TImage und da ins Bitmap zeichnen, bzw. umständlich das externe Bitmap zuweisen (ins Interne kopieren), da wird über Bitmap.OnChanged ein Repaint des TImage ausgelöst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.
Seite 1 von 6  1 23     Letzte »    

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