AGB  ·  Datenschutz  ·  Impressum  







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

Nicht sichtbaren TPaintBox Inhalt speichern

Ein Thema von cramer · begonnen am 10. Feb 2015 · letzter Beitrag vom 11. Feb 2015
 
Benutzerbild von cramer
cramer

Registriert seit: 23. Jun 2004
Ort: Velbert (NRW)
108 Beiträge
 
Delphi 2006 Enterprise
 
#16

AW: Nicht sichtbaren TPaintBox Inhalt speichern

  Alt 11. Feb 2015, 11:55
Grund: TPaintBox und TLabel (PS: das "echte" Windows-Label ist TStaticText) haben keine eigene Zeichenfläche, sondern verwenden die Ausgabe/Canvas des Parents.
Es wird direkt somit direkt in die Ausgabe/Ansicht gemalt, aber da dieses nirgenwo zwischengespeichert ist, kann man es nicht "sicher" wieder auslesen.
Ja, das ist jetzt klar.

Kleine Analyse, so wie ich das jetzt sehe.

In meinem Fall lag die PaintBox auf einem Panel1 auf Tabsheet1 und wenn man auf ein anderes Tabsheet2 wechselt und wieder zurück bleibt der Inhalt der Paintbox scheinbar erhalten.

Weil vermutlich auf das darunterliegende Panel1 gemalt wurde, und dieses erhalten bleibt.

Beim Speichern war aber TabSheet2 aktiv und es wurde die Region der Paintbox mit den Inhalten des TabSheet2 gespeichert.

Ich habe den Vorschlag aufgenommen und es wird alles in den Bitmap gehandelt und fürs Anzeigen gibts ne Show.
Code:
function QRCodeShowImage( aImage : Timage; aSize : integer ) : boolean;
var scale : double;
begin
   result := false;
   try
      if ( ( QRCodeBitmap.Width > 0 ) and ( QRCodeBitmap.Height > 0 ) ) then begin
         aImage.Width := aSize;
         aImage.Height := aSize;
         Scale := aImage.Height / QRCodeBitmap.Height;
         aImage.Canvas.StretchDraw( Rect( 0, 0, Trunc( Scale * QRCodeBitmap.Width ),
                                                Trunc( Scale * QRCodeBitmap.Height ) ),
                                                QRCodeBitmap );
         result := true;
      end;
   except
      on e:exception do begin
         FehlerOk( 'QRCodeShow Fehler : ' + e.Message );
      end;
   end;
end;

function QRCodeSave( aFileName : string; aSize : integer ) : boolean;
var xBitmap : Graphics.TBitmap;
    scale : double;
Begin
   result := false;
   if fileDirOk( aFileName ) then begin
      try
         xBitmap := Graphics.TBitmap.Create;
         try
            if ( ( QRCodeBitmap.Width > 0 ) and ( QRCodeBitmap.Height > 0 ) ) then begin
               xBitmap.Width := aSize;
               xBitmap.Height := aSize;
               Scale := xBitmap.Height / QRCodeBitmap.Height;
               xBitmap.Canvas.StretchDraw( Rect( 0, 0, Trunc( Scale * QRCodeBitmap.Width ),
                                                       Trunc( Scale * QRCodeBitmap.Height ) ),
                                                       QRCodeBitmap );
               xBitmap.SaveToFile( aFileName );
               result := true;
            end;
         except
            on e:exception do begin
               FehlerOk( 'QR-Code Fehler : ' + e.Message );
            end;
         end;
      finally
         xBitmap.Free;
      end;
   end;
end;
Erfahrung ist etwas, daß man erst bekommt, kurz nachdem man es dringend gebraucht hätte.
  Mit Zitat antworten Zitat
 

 

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 21:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz