GetFormImage - Bordas
Bom dia.
Estou utilizando o seguinte código para pegar a imagem do form e depois mandá-la por email:
Acontece que ele salva a imagem do Form, mas ignora as "bordas" da Janela do Windows.
Tem como eu corrigir isso?
Estou utilizando o seguinte código para pegar a imagem do form e depois mandá-la por email:
procedure PegaImgForm(MeuForm: TForm; CaminhoArquivo: String); var Anexo: TJPEGImage; begin Anexo := TJPEGImage.Create; Anexo.Assign(MeuForm.GetFormImage); Anexo.SaveToFile(CaminhoArquivo); FreeAndNil(anexo); end;
Acontece que ele salva a imagem do Form, mas ignora as "bordas" da Janela do Windows.
Tem como eu corrigir isso?
Diego Martins
Curtidas 0
Melhor post
Dorivan Sousa
02/07/2015
nao serveria capturar toda a area de trabalho? tem q ser somente o formulario?
coloca uma imagem de como ta capturando e como vc gostaria q ficasse.
coloca uma imagem de como ta capturando e como vc gostaria q ficasse.
GOSTEI 1
Mais Respostas
Diego Martins
02/07/2015
Segue abaixo as imagens de cada função
[img:descricao=Função Form.GetFormImage]http://arquivo.devmedia.com.br/forum/imagem/415780-20150702-132403.png[/img]
[img:descricao=Atalho Alt+PrintScreen do Windows (Esse que eu quero)]http://arquivo.devmedia.com.br/forum/imagem/415780-20150702-132440.png[/img]
Obrigado pela ajuda.
[img:descricao=Função Form.GetFormImage]http://arquivo.devmedia.com.br/forum/imagem/415780-20150702-132403.png[/img]
[img:descricao=Atalho Alt+PrintScreen do Windows (Esse que eu quero)]http://arquivo.devmedia.com.br/forum/imagem/415780-20150702-132440.png[/img]
Obrigado pela ajuda.
GOSTEI 0
Diego Martins
02/07/2015
Obs: Queria igual a segunda Imagem.
GOSTEI 0
Dorivan Sousa
02/07/2015
eu ate tentei aqui mas nao achei como fazer pra pegar so a tela... o que eu ja faço na minha aplicacao é capturar toda a area de trabalho
se tivesse como cortar da imagem so a parte onde ta o formulario
teria q testar nessa parte, pegando a posicao do formulario na tela.
function CapturaTela: TBitmap; var dc : hdc; cv: TCanvas; begin Result := TBitmap.Create; Result.Width := Screen.Width; Result.Height := Screen.Height; dc := GetDc(0); cv := TCanvas.Create; cv.Handle := DC; Result.Canvas.CopyRect( Rect( 0 , 0 , Screen.Width , Screen.Height),cv,rect(0 , 0 , Screen.Width , Screen.Height)); cv.Free; ReleaseDc( 0 , DC); end;
se tivesse como cortar da imagem so a parte onde ta o formulario
teria q testar nessa parte, pegando a posicao do formulario na tela.
Result.Canvas.CopyRect( Rect( 0 , 0 , Screen.Width , Screen.Height),cv,rect(0 , 0 , Screen.Width , Screen.Height));
GOSTEI 1
Diego Martins
02/07/2015
Consegui fazer :D
Troquei a linha 9 do seu código por:
e a linha 12 por:
O único problema dessa função é quando tento executar por tarefa agendada, pois normalmente o micro fica em "Logoff" e ele não cria na tela os formulários.
Troquei a linha 9 do seu código por:
dc := GetWindowDC(Formulario.Handle);
e a linha 12 por:
Result.Canvas.CopyRect( Rect( 0 , 0 , Formulario.Width , Formulario.Height),cv,rect(0 , 0 , Formulario.Width , Formulario.Height));
O único problema dessa função é quando tento executar por tarefa agendada, pois normalmente o micro fica em "Logoff" e ele não cria na tela os formulários.
GOSTEI 0
Dorivan Sousa
02/07/2015
o getFormImage funciona mesmo com a tela de logoff?
se funcionar olha o codigo dela e tenta adptar
se funcionar olha o codigo dela e tenta adptar
function TCustomForm.GetFormImage: TBitmap;
var
Ofs: Integer;
begin
Result := TBitmap.Create;
try
Result.Width := ClientWidth;
Result.Height := ClientHeight;
Result.Canvas.Brush := Brush;
Result.Canvas.FillRect(ClientRect);
Result.Canvas.Lock;
try
if GetWindowLong(Handle, GWL_STYLE) and WS_BORDER <> 0 then
Ofs := -1 // Don't draw form border
else
Ofs := 0; // There is no border
PaintTo(Result.Canvas.Handle, Ofs, Ofs);
finally
Result.Canvas.Unlock;
end;
except
Result.Free;
raise;
end;
end;
GOSTEI 1