سؤال

أحاول إنشاء برنامج من شأنه أن يجعل لقطات شاشة لمناطق مختلفة على الموقع يتم تحميلها بالداخل 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 إلى مستطيل مع أعلى سلبي واليسار, واليمين وأسفل الماضي العرض والارتفاع من الصورة النقطية التي تسمح فيوبجيكت رسم على, بحيث المنطقة التي تريد تقع على هذه الصورة النقطية?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top