![]() |
images in Paintbox mit BitBlt-Prozedure
Um Bilder aus einer Datei in einer Paintbox anzuzeigen habe ich folgende Zeilen geschrieben:
Delphi-Quellcode:
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?
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; |
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. |
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.
|
Re: images in Paintbox mit BitBlt-Prozedure
Zitat:
|
Re: images in Paintbox mit BitBlt-Prozedure
Zitat:
Delphi-Quellcode:
aber ich hab das mit der paintbox eh aufgegeben und probier es weiter mit mehreren images.
bg.loadfromfile('.\pics\trasch24b.bmp');
|
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 22:59 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