DELPHI da Borland Company (agora renomeada como INPRISE Company) é atualmente o programa mais conveniente para Windows.
Uma das ferramentas de planejamento. Muitas pessoas pensam que o DELPHI aparece como uma ferramenta de desenvolvimento de banco de dados. Na verdade, o DELPHI.
Programas eficientes do Windows podem ser desenvolvidos em uma velocidade vertiginosa.
Agora usaremos DELPHI para escrever um programa prático de cópia de tela. Olha, a foto abaixo
Este é um exemplo de cópia da tela regional após executar o programa programado. Nada mal!
Os talentosos designers da Borland Company usam o objeto canvas (Tcanvas) para encapsular a maioria dos gráficos do Windows.
Função de saída, que nos permite lidar com a tela do Windows de forma mais intuitiva,
E não precisa se preocupar com a dor de cabeça das funções da API do Windows. O seguinte programa curto pode realizar todo o
A imagem da tela é copiada.
var //declaração de variável
Tela cheia:Tbitmap;
Tela cheiaTela:TCanvas;
CC:HDC;
//------------------------------------------------ ----------
DC := GetDC (0); //Obtém o DC da tela, o parâmetro 0 refere-se à tela
FullscreenCanvas := TCanvas.Create; //Cria um objeto CANVAS
FullscreenCanvas.Handle := DC; //Atribuir o DC da tela para HANDLE
Tela cheia.Canvas.CopyRect
(Ret (0, 0, tela.Largura, tela.Altura),
tela cheiaTela,
Rect (0, 0, Tela.Largura, Tela.Altura));
//Copia a tela inteira para BITMAP
FullscreenCanvas.Free; //Libera objeto CANVAS
//Liberar DC (0, DC);
//O objeto SCREEN é um objeto de tela predefinido pelo DELPHI, basta utilizá-lo diretamente.
Depois de ler o código acima, você descobrirá que é realmente muito simples escrever um programa de cópia de tela com DELPHI.
Claro, você precisa escrever um programa prático de cópia de tela. O código acima por si só não é suficiente.
A seguir estão as principais ideias de programação:
1. Implementação de cópia em tela inteira
Primeiro, oculte o programa de cópia de tela e, após um certo período de tempo, use o programa acima para realizar a cópia de tela.
cópia.
2. Implementação de cópia regional
Para conseguir a cópia de área, você precisa usar um pequeno truque. Primeiro, chame o programa de cópia de tela inteira para copiar a tela inteira.
baixar e, em seguida, exibir a imagem copiada na tela e, em seguida, permitir que o usuário
Selecione a área necessária e, por fim, copie a área selecionada pelo usuário.
Implementação de programação:
1. Primeiro abra um projeto com DELPHI3.
2. Coloque um componente TPANEL no FORM, defina ALIGN=ALTOP e selecione a barra de componentes ADICIONAL
TSCROLLBOX, coloque-o no FORM, defina ALIGN=ALCLIENT, e então coloque um
Objeto TIMAGE.
3. Coloque 4 botões no PAINEL, nomeadamente TELA CHEIA, REGIN, SALVAR e SAIR.
4. Faça primeiro o que é fácil de fazer e escreva o código no evento CLICK do botão EXIT
procedimento TForm1.ExitClick(Remetente: TObject);
começar
fechar;
fim;
5. O próximo passo é realizar a cópia em tela inteira. Coloque um temporizador TTIMER em FROM e defina ENABLED como.
FALSO, INTERVAL é definido como 500, o que significa que é ativado uma vez a cada meio segundo. Clique duas vezes no componente TIMER e escreva o seguinte
código.
procedimento TForm1.Timer1Timer(Remetente: TObject);
var
Tela cheia:Tbitmap;
Tela cheiaTela:TCanvas;
CC:HDC;
começar
timer1.Enabled:=false; //Cancela o relógio
Fullscreen := TBitmap.Create; //Cria um BITMAP para armazenar imagens
Tela cheia.Largura := tela.largura;
Tela cheia.Altura := tela.Altura;
DC := GetDC (0); //Obtém o DC da tela, o parâmetro 0 refere-se à tela
FullscreenCanvas := TCanvas.Create; //Cria um objeto CANVAS
FullscreenCanvas.Handle := DC;
Tela cheia.Canvas.CopyRect
(Rect (0, 0, tela.Largura, tela.Altura), tela inteiraCanvas,
Rect (0, 0, Tela.Largura, Tela.Altura));
//Copia a tela inteira para BITMAP
FullscreenCanvas.Free; //Libera objeto CANVAS
//Liberar DC (0, DC);
//******************************
image1.picture.Bitmap:=fullscreen;//Atribuir a imagem copiada ao objeto IMAGE
imagem1.Largura:=tela cheia.Largura;
imagem1.Altura:=tela cheia.Altura;
fullscreen.free; //Libera bitmap
form1.WindowState:=wsNormal; //Restaura o estado da janela
form1.show; //Exibir janela
messagebeep(1); //BEEP emite um bipe para informar que a imagem foi capturada.
fim;
6. O próximo código no botão FULLSCREEN é muito simples.
procedimento TForm1.FullscreenClick(Remetente: TObject);
começar
form1.WindowState:=wsMinimized; //Minimiza a janela do programa
form1.hide; //Ocultar o programa
timer1.enabled:=true; //Abre o cronômetro
fim;
7. Depois de copiar a imagem, é claro que ela precisa ser salva. O botão SALVAR entra em ação. Escrevemos o seguinte:
Baixe o código.
procedimento TForm1.Save1Click(Remetente: TObject);
começar
se salvodialog1.Execute então
começar
form1.Image1.Picture.SaveToFile(savedialog1.nome do arquivo)
fim;
fim;
8. A seguir está a implementação da cópia de zona. Em seguida, crie um novo FORM, defina BorderStype como bsNone, para que possa ser exibido
Para tela cheia, coloque um componente TIMAGE nele, defina ALIGN como ALCLIENT e coloque um TTIMER
widget, o programa do widget TIMER é muito semelhante ao anterior, porque a primeira coisa que ele precisa fazer é copiar em tela inteira.
cauri.
procedimento TForm2.Timer1Timer(Remetente: TObject);
var
Tela cheia:Tbitmap;
Tela cheiaTela:TCanvas;
CC:HDC;
começar
timer1.Enabled:=falso;
Tela cheia := TBitmap.Create;
Tela cheia.Largura := tela.largura;
Tela cheia.Altura := tela.Altura;
DC := ObterDC(0);
FullscreenCanvas := TCanvas.Create;
FullscreenCanvas.Handle := DC;
Tela cheia.Canvas.CopyRect (Rect
(0, 0, tela.Largura, tela.Altura), tela inteiraCanvas,
Rect (0, 0, Tela.Largura, Tela.Altura));
Tela cheiaCanvas.Free;
LiberarDC (0, DC);
image1.picture.Bitmap:=tela cheia;
imagem1.Largura:=tela cheia.Largura;
imagem1.Altura:=tela cheia.Altura;
tela cheia.grátis;
form2.WindowState:=wsMaximized;
formulário2.show;
mensagembeep(1);
dobrarx:=-1;
dobrado:=-1;
image1.Canvas.Pen.mode:=pmnot; //O modo da caneta está invertido
image1.canvas.pen.color:=clblack; //A caneta é preta
image1.canvas.brush.Style:=bsclear; //Pincel em branco
sinalizador:=verdadeiro;
fim;
9. Existem dois programas de eventos no componente TIMAGE que precisam ser escritos, um é ONMOUSEDOWN e o outro
É ONMOUSEMOVE.
10. Você pode relembrar a ideia de cópia de região. Neste momento, já o fizemos.
é obtido e também é exibido na tela. Pressione o botão esquerdo do mouse para ser a origem da área.
Existe um retângulo entre a origem e o mouse. Ele muda conforme o mouse se move novamente.
Clique com o botão esquerdo do alvo. Neste momento, a área contida pelo retângulo é a imagem que queremos obter.
11. Portanto MOUSEDOWN possui dois processamentos de resposta, veja o procedimento a seguir.
procedimento TForm2.Image1MouseDown
(Remetente: TObject; Botão: TMouseButton;
Shift: TShiftState; X, Y: Inteiro);
var
largura, altura: inteiro;
novobitmap:Tbitmap;
começar
if (trace=false) then // TRACE indica se o mouse está sendo rastreado
Begin //Clique com o botão esquerdo do mouse pela primeira vez para começar a rastrear o mouse.
sinalizador:=falso;
com image1.canvas faça
começar
moveTo(foldx,0);
LineTo(foldx,tela.altura);
moveto(0,foldy);
lineto(tela.largura,foldy);
fim;
x1:=x;
y1:=y;
antigox:=x;
velho:=y;
rastreamento:=verdadeiro;
image1.Canvas.Pen.mode:=pmnot; //O modo da caneta está invertido
//Desenhe o retângulo novamente no lugar original, o que equivale a apagar o retângulo.
image1.canvas.pen.color:=clblack; //A caneta é preta
image1.canvas.brush.Style:=bsclear;//Pincel em branco
fim
outro
Begin //O segundo clique indica que o retângulo foi obtido.
//Copie para o componente IMAGE no FORM1.
x2:=x;
y2:=y;
traço:=falso;
imagem1.canvas.retangle(x1,y1,oldx,oldy);
largura:=abs(x2-x1);
altura:=abs(y2-y1);
form1.image1.Width:=Largura;
form1.image1.Height:=Altura;
novobitmap:=Tbitmap.create;
novobitmap.width:=largura;
novobitmap.height:=altura;
novobitmap.Canvas.CopyRect
(Ret (0, 0, largura, altura),form2.image1.canvas,
Rect (x1, y1,x2,y2));
form1.image1.picture.bitmap:=newbitmap; //Coloque na IMAGEM do FORM.
novobitmap.free;
form2.ocultar;
formulário1.mostrar;
fim;
fim;
12. O processamento do MOUSEMOVE consiste em desenhar e apagar continuamente retângulos entre a origem e a posição atual do mouse.
Exceto retângulo.
procedimento TForm2.Image1MouseMove
(Remetente: TObject; Shift: TShiftState; X,
Y: Inteiro);
começar
if trace=true then //Você está rastreando o mouse?
começar //Sim, apague o retângulo antigo e desenhe um novo
com image1.canvas faça
começar
retângulo(x1,y1,velhox,velho);
Retângulo(x1,y1,x,y);
antigox:=x;
velho:=y;
fim;
fim
else if flag=true then //Desenhe uma cruz onde o mouse está
começar
com image1.canvas faça
começar
moveTo(foldx,0); //Apaga a cruz antiga
LineTo(foldx,tela.altura);
moveto(0,foldy);
lineto(tela.largura,foldy);
moveTo(x,0); //Desenha uma nova cruz
LineTo(x,tela.altura);
mover para(0,y);
lineto(tela.largura,y);
dobrarx:=x;
dobrado:=y;
fim;
fim;
fim;
13. Ok, vamos voltar a escrever o código do botão REGION.
procedimento TForm1.RegionClick(Remetente: TObject);
começar
formulário1.Ocultar;
form2.ocultar;
form2.Timer1.Enabled:=true;
fim;
Ok, finalmente terminamos com sucesso. Vamos executá-lo novamente e copiar a linda tela! Olhar
DELPHI não é apenas uma excelente ferramenta de desenvolvimento de banco de dados, mas também uma excelente ferramenta para escrever WINDOWS
Um bom ajudante para o programa. Não deixemos de admirar: Grande DELPHI!
Jia Xuejie, Youhe Lane, cidade de Ningbo