Lock, Unlock ist nicht von nöten. StretchBlt auf der Basis auch nicht.
Das ist eigentlich ne Doppelfunktion nur Aufruf hier entfernt deswegen Dir noch Unbekannt.
Hat 2 Modis, erstelle Preview (auf aktuelle Größe was meine App dem Image bietet und halt das ganze 1:1 wie man es hier sieht.
Nur damit ich das auch weiß, entsteht dadurch ein Nachteil bei 0 Änderungen der Größe, wenn ja dann mach ich "FinalBildModus" mit BitBlt. <- Das meine Frage aber nichts desto trotz mach ich BitBlt daraus fürs FinalBild da Vertrau ich dem Experten! Ok das Lock Unlock spare ich auch mir Danke!
Ich hab da echt nen Denkfehler aber
DeleteObject(hOld);
muss es lauten dann sollte es theoretisch passen aber das lenkt mich zu sehr ab.
Du weist doch gar nicht ob StretchBlt erfolgreich war.
Aua, Du hast Da natürlich total Recht und das korrigiere ich bei mir für die Akten..... mist dabei hatte ich mir soviel Mühe gegeben aber so lerne ich ja aus meinen Fehlern, Danke!
Für die Akten, so isses nu
Delphi-Quellcode:
Function Knipse(
const Win: HWND;
var tbmp: TBitmap;
const FullWindow: Boolean;
const NewX, NewY: Integer): Boolean;
//Aufruf:
// Parameter 1 = Window Handle
// Parameter 2 = Ein Bitmap
// Parameter 3 = Mit oder ohne Rahmen (Titelleiste, Caption, SystemKnöpfe, Rand ums Fenster)
// Parameter 4 + 5 = 0 für Final 1:1 Bild, X + Y Pixel Angaben für Preview
// Danke Emil für korrekturen
const
CAPTUREBLT = $40000000;
var
hDCScreen: HDC;
rec: TRect;
begin
Result := False;
if Win = 0
then Exit;
try
begin
if FullWindow
then
begin
hDCScreen := GetWindowDC(Win);
Windows.GetWindowRect(Win, rec)
end else
begin
hDCScreen := GetDC(Win);
Windows.GetClientRect(Win, rec);
end;
tbmp.PixelFormat:=pf32bit;
tbmp.Width := Rec.Right - Rec.Left;
tbmp.Height := Rec.Bottom - Rec.Top;
if ((NewX<>0)
and(NewY<>0))
then
Result := StretchBlt(tbmp.Canvas.Handle, 0, 0,
NewX, NewY,
hDCScreen, 0, 0,
tbmp.Width, tbmp.Height,
SRCCOPY
or CAPTUREBLT)
else
Result := BitBlt(tbmp.Canvas.Handle, 0, 0,
tbmp.Width, tbmp.Height,
hDCScreen, 0, 0,
SRCCOPY
or CAPTUREBLT);
end;
finally
ReleaseDC(0, hDCScreen);
end;
end;