как получить ручку Delphi TPaintBox - PullRequest
2 голосов
/ 10 января 2012

я работаю над приложением, используя delphi 6 , где я пытаюсь интегрировать камеру в существующее приложение, код камеры отображает захваченные кадры на Tpanel, в моем приложении мне нужно отобразить захваченный кадрна Tpaintbox (я не являюсь оригинальным кодером),

это пример кода из

  procedure TFrameThreadX.DrawFrame;
    var
    hdc:THandle; 
     begin

       //do processing
      .
      . 
       hdc := GetDC( ViewForm.ViewPanel.Handle );
       SetStretchBltMode(hdc,COLORONCOLOR);
       StretchDIBits(hdc,0,0,nW,nH,0,0,ScW,ScH,DibPixels,TBitMapInfo((@FDib)^),DIB_RGB_COLORS,SRCCOPY);
       ReleaseDC( ViewForm.ViewPanel.Handle, hdc );


     //do processing
    end;

, здесь можно получить дескриптор Tpanel как 87248682 из этого

  hdc := GetDC( ViewForm.ViewPanel.Handle );

, поэтому, когда я пытаюсь использовать Tpaintbox в коде, подобном этому

       hdc := GetDC( ViewForm.PaintBox1.Canvas.Handle);

В результате получается 0 ,

, поэтому кадры камерыне отображаются ..

, поэтому я попробовал это

, используя GetDC и GetWindowDC , но в обоих случаях результат функций 0 для ручки,

enter image description here

мой код

   var
     hdc  : THandle;
     begin
       hdc := GetDC(Panel1.Handle);
       Label1.Caption:=inttostr(hdc);
       hdc := GetDC(Image1.Canvas.Handle);
       Label2.Caption:=inttostr(hdc);
       hdc := GetDC(PaintBox1.Canvas.Handle);
       Label3.Caption:=inttostr(hdc);
     end;

и для GetWindowDC

    var
     hdc  : THandle;
     begin
     hdc := GetWindowDC(Panel1.Handle);
     Label4.Caption:=inttostr(hdc);
     hdc := GetWindowDC(Image1.Canvas.Handle);
     Label5.Caption:=inttostr(hdc);
     hdc := GetWindowDC(PaintBox1.Canvas.Handle);
     Label6.Caption:=inttostr(hdc);
    end;

Так скажите, пожалуйста, как получить ручку Tpaint?

Ответы [ 2 ]

10 голосов
/ 10 января 2012

Canvas.Handle - это ручка DC, которую вы ищете, поэтому HDC := PaintBox1.Canvas.Handle

4 голосов
/ 10 января 2012

TPaintBox и TImage являются потомками TGraphicControl и не имеют дескриптора (они получают дескриптор при обработке сообщения WMPaint).TPanel является TWinControl потомком и имеет дескриптор.

...