Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Problem: JPG auf Canvas zeichnen (https://www.delphipraxis.net/107554-problem-jpg-auf-canvas-zeichnen.html)

MarkusJa 29. Jan 2008 17:41


Problem: JPG auf Canvas zeichnen
 
Erstmal ein "Hallo" an alle, da ich ja neu hier bin. ;)

So, nicht meckern, wenn das eine "Sinnlose" Frage ist, aber ich beschäftige mich erst seit ca 1,5 Jahren mit Delphi(in der Schule).

Also.. Hab folgendes Problem.
Ich möchte ein JPG zeichnen lassen. Also habe ich es einfacherweise auf das Formblatt zeichnen lassen mit:
Delphi-Quellcode:
var p: TPicture;
p := TPicture.Create;
p.LoadFromFile ('deck\test.jpg');
form1.Canvas.Draw (20, 20, p.Graphic);
p.Free;
Das funktioniert auch wie gewollt. Wenn ich aber mit irgendetwas über die Anwendung gehe, wird das Bild sozusagen "weg radiert". Kann man das irgendwie ändern?

Habe mir auch schon gedacht, zeichneste das Bild einfach auf ein Canvas eines TImage Elements. Funktioniert auch prima und kann auch nicht weg radiert werden, aber der Hintergrund ist dann so komisch weiß und nicht transparent. :/

Kann mir einer helfen? :(

Grüße

Larsi 29. Jan 2008 17:44

Re: Problem: JPG auf Canvas zeichnen
 
hi,
also erstmal ein herzliches willkommen in der dp :dp:
zu deinem problem:
guck dir mal die aktion onresize bei form1 oder wie das bei dir heißt an!
das ist jetzt zwar nicht das sauberste aber tus doch in n timer.

MFG Lars Wiltfang

wicht 29. Jan 2008 17:45

Re: Problem: JPG auf Canvas zeichnen
 
Versuchs mal mit dem Ereignis OnPaint in deinem Formular. Die JPEG lädst du im Create (OnPaint wird oft aufgerufen unter Umständen, darum das LoadFromFile auslagern), gibst sie im Destroy wieder frei und malst im OnPaint. Das könnte hinhauen :stupid:

MarkusJa 29. Jan 2008 17:55

Re: Problem: JPG auf Canvas zeichnen
 
Zitat:

Zitat von wicht
Versuchs mal mit dem Ereignis OnPaint in deinem Formular. Die JPEG lädst du im Create (OnPaint wird oft aufgerufen unter Umständen, darum das LoadFromFile auslagern), gibst sie im Destroy wieder frei und malst im OnPaint. Das könnte hinhauen :stupid:

Glaube das geht nicht... Male das Bild ja per ButtonClick... Oder geht das damit auch?

Zitat:

guck dir mal die aktion onresize bei form1 oder wie das bei dir heißt an!
das ist jetzt zwar nicht das sauberste aber tus doch in n timer.
Hm? Wie meinst du das? ;)

Grüße

Larsi 29. Jan 2008 18:00

Re: Problem: JPG auf Canvas zeichnen
 
du schreibst deinen code einfach in nen timer machst intervall auf 1 millisekunde :)

DeddyH 29. Jan 2008 18:11

Re: Problem: JPG auf Canvas zeichnen
 
Timer zum Zeichnen? Geht' s noch? Definiere Dir eine Variable vom Typ TJPEGImage, lade diese und zeichne sie OnPaint auf Dein Formular, wie bereits vorgeschlagen.

MarkusJa 29. Jan 2008 18:32

Re: Problem: JPG auf Canvas zeichnen
 
Zitat:

Zitat von DeddyH
Timer zum Zeichnen? Geht' s noch? Definiere Dir eine Variable vom Typ TJPEGImage, lade diese und zeichne sie OnPaint auf Dein Formular, wie bereits vorgeschlagen.

Naja, ansich geht es, wenn ich das Bild in OnCreate lade und in OnPaint zeichne. Aber wenn ich dann ein Fenster drüber ziehe, stürzt es ab. :/ Und per Button kann ich das Bild auch nicht laden... :/

DeddyH 29. Jan 2008 18:37

Re: Problem: JPG auf Canvas zeichnen
 
Zeig mal den Code.

wicht 29. Jan 2008 18:38

Re: Problem: JPG auf Canvas zeichnen
 
Wenn du es mit dem Button anzeigen willst, führst du eben ein Boolean Variable ein, die du beim Klick auf den Button auf True setzt.. so:

Delphi-Quellcode:
type
  class TForm1 = class(TForm)
  private
    ShowImage: Boolean;
  end;

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowImage := not ShowImage;
end;
Im OnPaint prüfst du vor dem .Draw() eben, ob die Variable auf True ist... Wegen dem Absturz: Code her :mrgreen:

Edit: Dummer ***** Kasten :)

DeddyH 29. Jan 2008 18:51

Re: Problem: JPG auf Canvas zeichnen
 
Andere Möglichkeit: das JPEGImage mit nil initialisieren, bei Bedarf erzeugen und laden und OnPaint Assigned benutzen ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 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