Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi images in Paintbox mit BitBlt-Prozedure (https://www.delphipraxis.net/65584-images-paintbox-mit-bitblt-prozedure.html)

ontorius 18. Mär 2006 12:18


images in Paintbox mit BitBlt-Prozedure
 
Um Bilder aus einer Datei in einer Paintbox anzuzeigen habe ich folgende Zeilen geschrieben:

Delphi-Quellcode:
var
  Form1: TForm1;
  b:integer;
  bg:TBitmap;
  const x=10;
        y=10;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender:TObject);
begin
  bg:=TBitmap.Create;
  bg.PixelFormat := pf24Bit;
end;

procedure TForm1.START1Click(Sender: TObject);
begin
  timer2.Enabled:=false;
  form1.DoubleBuffered:=true;

  bg.loadfromfile('.\pics\trasch24b.bmp');
  Bitblt(paintbox1.Canvas.Handle,0,555,1036,50,bg,0,0,srccopy);
  paintbox1.Canvas.Draw(0,555,bg);

  image2.picture.loadfromfile('.\pics\stehen_1.bmp');
  image5.Picture.LoadFromFile('.\pics\door.bmp');
end;
Beim compilieren wird mir zur BitBlt-Prozedur der Fehler "inkompatibler Typ: 'HDC' und 'TBitmap'" angezeigt. Ich glaube, dass der Fehler in der Variablen "bg" liegt, die nicht mit BitBlt kompatibel ist. Wie kann man das lösen und worauf muss man bei diesem Befehl (bitBlt) achten?

Muetze1 18. Mär 2006 12:22

Re: images in Paintbox mit BitBlt-Prozedure
 
BitBlt will ein Handle zu einem DC haben - somit musst du ihm dies auch übergeben. Die Klassen TBitmap und deren Instanzen der VCL sind der WinAPI völligst unbekannt. Diese kapseln aber die WinAPI Funktionen in Objekten und haben somit auch ein solches Handle. Du musst anstatt bg daher bg.Canvas.Handle angeben in dem BitBlt.

Und mit deinem Code wirst du nicht glücklich sein, da man durch einfaches herüberziehen eines Fensters die PaintBox wieder löschen kann. Du musst den Inhalt der PaintBox in deren OnPaint Ereignis zeichnen und nicht woanders.

ontorius 18. Mär 2006 14:22

Re: images in Paintbox mit BitBlt-Prozedure
 
ja, jetzt hat er kein problem mehr mit dem "bg". aber das programm bricht jetz immer an der stelle ab, wo dem "bg" eine bilddatei zugewiesen wird.

Muetze1 18. Mär 2006 15:02

Re: images in Paintbox mit BitBlt-Prozedure
 
Zitat:

Zitat von ontorius
ja, jetzt hat er kein problem mehr mit dem "bg". aber das programm bricht jetz immer an der stelle ab, wo dem "bg" eine bilddatei zugewiesen wird.

Sorry, aber meine Glaskugel ist zZ nicht geeicht, daher müsstest du mir am besten mal sagen mit welcher Fehlermeldung/Hinweis er abbricht.

ontorius 18. Mär 2006 22:17

Re: images in Paintbox mit BitBlt-Prozedure
 
Zitat:

Sorry, aber meine Glaskugel ist zZ nicht geeicht, daher müsstest du mir am besten mal sagen mit welcher Fehlermeldung/Hinweis er abbricht.
Na bei
Delphi-Quellcode:
 bg.loadfromfile('.\pics\trasch24b.bmp');
aber ich hab das mit der paintbox eh aufgegeben und probier es weiter mit mehreren images.

Muetze1 18. Mär 2006 23:01

Re: images in Paintbox mit BitBlt-Prozedure
 
Es ist ja nicht so, dass ich nicht helfen will, aber wenn ich nach "welcher Fehlermeldung" frage und statt dessen das wo beschrieben bekomme, dann weiss ich auch nicht.

Grundsätzlich würde ich mal behaupten, er findet die Datei nicht. Du gibst einen relativen Pfad, der immer vom aktuellen ausgeht. Dieser aktuelle Pfad wird aber durch x-beliebige Dinge verändert. Vom Open/SaveDialog über jedes andere Futzelprogramm. Daher solltest du keien relativen Pfade nutzen sondern absolute. Und um die Lage der EXE Datei im System herauszufinden, nutze
Delphi-Quellcode:
ExtractFilePath(Application.ExeName);
.

Weil dies grundlegende Problem solltest du auch bei deinen Images bekommen.


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