كيفية التقاط مناطق الصفحة في توبروزر?
-
28-10-2019 - |
سؤال
أحاول إنشاء برنامج من شأنه أن يجعل لقطات شاشة لمناطق مختلفة على الموقع يتم تحميلها بالداخل TWebBrowser
مكون.
حتى الآن لقد وجدت حلول فقط ل 'كيفية جعل لقطة من صفحة كاملة' ، ولكن أنا فقط لا يمكن أن تجعل من العمل لالتقاط منطقة معينة ، فإنه يمتد فقط الصفحة في أي اتجاه.
http://www.delphifaq.com/faq/f408.shtml
لقد تم استخدام التعليمات البرمجية الواردة في الموقع أعلاه.
هل هناك طريقة لتعديل التعليمات البرمجية لذلك سوف تفعل ما أحتاج?حاولت لكنني فشلت.
وسأكون ممتنا إذا كان أي شخص يمكن أن تعطيني على الأقل اتجاه لكيفية حل هذا.
شكرا
المحلول
أوصي باستخدام IHTMLElementRender
واجهة هتمل إليمونت بدلا من ذلك.يمكنك بسهولة العثور على العنصر الموجود أسفل المؤشر وتقديمه إلى صورة نقطية.
في بلدي توبروزر ديسكانت أنا نفذت مثل هذا:
function TWebBrowserIBMA.ElementAsBitmap(pElement : IHTMLElement2) : TBitmap;
var
pRender : IHTMLElementRender;
oBmpPart : TBitmap;
nClientWidth : Integer;
nClientHeight : Integer;
nX : Integer;
nLastX : Integer;
bDoneX : Boolean;
nY : Integer;
nLastY : Integer;
bDoneY : Boolean;
begin
Result := TBitmap.Create;
try
Result.Height := pElement.scrollHeight;
Result.Width := pElement.scrollWidth;
except
exit;
end;
LockWindowUpdate(Handle);
if (pElement.QueryInterface(IID_IHTMLElementRender, pRender) = S_OK) then begin
try
oBmpPart := TBitmap.Create;
oBmpPart.Width := pElement.scrollWidth;
oBmpPart.Height := pElement.scrollHeight;
nClientWidth := pElement.clientWidth;
nClientHeight := pElement.clientHeight;
try
nX := pElement.scrollWidth;
nLastX := -1;
bDoneX := false;
while not bDoneX do begin
pElement.scrollLeft := nX;
nX := pElement.scrollLeft;
if nLastX = -1 then begin
nLastX := nX + nClientWidth;
end;
nY := pElement.scrollHeight;
nLastY := (-1);
bDoneY := false;
while not bDoneY do begin
pElement.scrollTop := nY;
nY := pElement.scrollTop;
if nLastY = -1 then begin
nLastY := nY + nClientHeight;
end;
if (pRender.DrawToDC(oBmpPart.Canvas.Handle) = S_OK) then begin
BitBlt(Result.Canvas.Handle, nX, nY, nLastX-nX, nLastY-nY, oBmpPart.Canvas.Handle, 2, 2,SRCCOPY);
end;
bDoneY := (nY = 0);
nLastY := nY;
Dec(nY, nClientHeight-4);
end;
bDoneX := (nX = 0);
nLastX := nX;
Dec(nX, (nClientWidth-4));
end;
finally
FreeAndNil(oBmpPart);
end;
finally
pRender := nil;
end;
end;
LockWindowUpdate(0);
end;
نصائح أخرى
يمكنك استخدام سورسبيتماب.قماش.كوبيركت
هل حاولت الإعداد sourceDrawRect
إلى مستطيل مع أعلى سلبي واليسار, واليمين وأسفل الماضي العرض والارتفاع من الصورة النقطية التي تسمح فيوبجيكت رسم على, بحيث المنطقة التي تريد تقع على هذه الصورة النقطية?