Hallo
DP'ler,
ich habe bisher mit Paintbox und Buffer- Bitmap gearbeitet und mit dem OnPaint- Ereignis über BtlBlt das Bitmap auf die Paintbox kopiert.
Das funktionierte mit
Delphi-Quellcode:
procedure THauptform.LadenClick(Sender: TObject);
var
JpBitmap: TJPEGImage;
begin
JpBitmap := TJPEGImage.Create;
JpBitmap.LoadFromFile(Bildname);
Bitmap.Assign(JpBitmap); //Buffer- Bitmap
JpBitmap.Free;
LeinwandPaint(self); //Neuzeichnen
end;
...
procedure THauptform.LeinwandPaint(Sender: TObject);
begin
BitBlt(Leinwand.Canvas.Handle, 0, 0, Bitmap.Width,
Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
end;
Mit dem OnPaint-Ereignis habe ich die Paintbox neu gezeichnet, wenn nötig.
Die Paintbox ist in einer Scrollbox.
=========================================
Umstieg auf Graphic32
Nun besitzt ja Paintbox32 ein eigenes Buffer- Bitmap aber wenn ich ein Bild in das Buffer- Bitmap lade
und dann z.B. scrolle ist die Paintbox schwarz (warum eigentlich nicht weiss???).
Ein OnPaint-Ereignis fehlt hier.
Wenn ich aber die Paintbox32 mit folgenden Befehlen fülle, kann ich scrollen
!?!
Delphi-Quellcode:
Leinwand.Buffer.Canvas.Brush.Color := clwhite;
Leinwand.Buffer.Canvas.Polygon([Point(0, 0), Point(0, Leinwand.Height),
Point(Leinwand.Width, Leinwand.Height), Point(Leinwand.Width, 0)]);
for i := 1 to 20 do //Testgitter
With Leinwand.Buffer.Canvas Do
Begin
MoveTo(I*100,1);
LineTo(I*100,2336);
end;
for i := 1 to 40 do
With Leinwand.Buffer.Canvas Do
Begin
MoveTo(1,I*100);
LineTo(1656,I*100);
end;
LeinwandPaint(self); //rufe ich auf, um Bitmap auf die Paintbox32 zu zeichnen
end;
Frage:
1. Warum gibt es kein OnPaint-Ereignis?
2. Sollte ich lieber Image32 anstelle der Paintbox nehmen? (Flackert das Bild dann wieder?)
3. Wie kann ich das Bild scrollen, ohne das Bereiche, die vorher ausserhalb lagen, schwarz werden?
mfg
BrunoT