• Nenhum resultado encontrado

LINGUAGEM DE PROGRAMAÇÃO DELPHI - Prof. Alberto Cezar de Carvalho Página 1

N/A
N/A
Protected

Academic year: 2021

Share "LINGUAGEM DE PROGRAMAÇÃO DELPHI - Prof. Alberto Cezar de Carvalho Página 1"

Copied!
9
0
0

Texto

(1)

O CANVAS (Tela)

O OBJETO CANVAS:

É utilizado para desenharmos dentro de alguns objetos do Delphi, como por exemplo: o formulário e o Image.

CANVAS - PROPRIEDADES:

As principais propriedades dos objetos da classe TCanvas estão enumeradas na tabela abaixo: Propriedades de TCanvas Propriedade de TBrush Descrição Brush Style

Forma de preenchimento. As formas podem ser: - bsSolid - bsCross - bsClear - bsDiagCross - bsBDiagonal - bsHorizontal - bsFDiagonal - bsVertical Color Cor de preenchimento

BitMap Preenche com uma figura

Font

Color Cor da fonte

Name Nome da fonte

Size Tamanho da fonte

Style Estilos: - fsBold - fsItalic - fsUnderline - fsStrikeout Pen

Color Cor da pena

Style Estilo da linha: - psSolid - psDash - psDot - psDashDot - psDashDotDot - psClear Width Espessura da linha

(2)

CANVAS - MÉTODOS:

 procedure Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);

Desenha um arco inscrito em um retângulo cujas coordenadas devem ser especificadas. Descrição:

Esta rotina desenha uma curva com a especificação da pena atual (propriedade Pen). O arco é inscrito em um retângulo de coordenadas (X1,Y1) e (X2,Y2), sendo que o primeiro par se refere ao ponto situado no canto superior esquerdo e o outro par ao canto inferior direito de um retângulo que o envolve. O arco é traçado para a esquerda iniciando no ponto de partida para o ponto final. O ponto de partida é (X3,Y3), sobre a elipse inscrita no retângulo e (X4, Y4) é o ponto final.

A direção do desenho pode ser mudada usando uma rotina da API do Windows: SetArcDirection.

 procedure BrushCopy(const Dest: TRect; Bitmap: TBitmap; const Source: TRect; Color: TColor); Copia uma porção de um bitmap sobre um retângulo na tela, substituindo uma das cores do bitmap com a cor de preenchimento atual.

Descrição:

Use BrushCopy para conseguir efeitos especiais, como o de fazer a imagem ser copiada parcialmente transparente.

Dest especifica a porção retangular da tela que receberá a cópia do bitmap. Bitmap especifica o nome do gráfico que vai copiar.

Source especifica a área retangular do Bitmap para copiar. Color: especifica a cor do preenchimento em Bitmap.

Para usar BrushCopy para fazer a imagem copiada ficar parcialmente transparente, especifique a cor da superfície da tela (clBackground por exemplo) como a cor da propriedade Brush, e então chame BrushCopy.

Exemplo:

O trecho de código a seguir mostra a diferença entre CopyRect e BrushCopy. O gráfico bitmap ‘PEIXE.BMP’ é carregado em “Figura” e mostrado no Canvas de Form1. BrushCopy substitui a cor obtida no pixel (30,161) no formulário pela cor da propriedade brush do canvas (cor do formulário), enquanto que CopyRect deixa as cores intactas.

var Figura: TBitmap;

MeuRetangulo, OutroRetangulo: TRect; begin MeuRetangulo:= Rect(10,10,100,100); OutroRetangulo := Rect(10,111,100, 201); Figura := TBitmap.Create; Figura.LoadFromFile('peixe.bmp'); Form1.Canvas.Brush.Color:= Form1.color;

Form1.Canvas.CopyRect(OutroRetangulo, Figura.Canvas, MeuRetangulo);

Form1.Canvas.BrushCopy(MeuRetangulo, Figura, MeuRetangulo, form1.Canvas.pixels[30,161]); Figura.Free;

(3)

Observamos, no exemplo, o aparecimento do método Create do objeto TbitMap, que possibilita a criação de um objeto deste tipo em tempo de execução.

Desta forma, podemos criar em tempo de execução qualquer objeto, embora tenhamos que ter o cuidado de liberar o mesmo, após sua utilização, com o método Free.

 procedure Chord(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);

Desenha uma figura fechada representada pela interseção de uma linha e uma elipse. Descrição:

O Chord (corda) é uma porção de uma elipse que está inscrita em um retângulo representado pelos pontos (X1,Y1) e (X2,Y2), canto superior esquerdo e canto inferior direito. A elipse é seccionada por uma linha passa pelos pontos (X3,Y3) e (X4,Y4).

O perímetro do Chord percorre o sentido anti-horário a partir do ponto (X3, Y3), indo ao ponto (X4,Y4) na elipse, e retorna ao ponto (X3,Y3). Se (X3,Y3) e (X4,Y4) não estiverem sobre a superfície da elipse, os pontos considerados como limitadores de Chord serão a interseção da reta que passa por (X3,Y3) e (X4,Y4) com a elipse. A linha da corda utilizará os valores da propriedade “Pen” e o preenchimento utilizará os valores da propriedade “Brush”.

A direção do desenho pode ser alterada utilizando um função da API do Windows: SetArcDirection.

Exemplo:

procedure TForm1.FormClick(Sender: TObject); begin

Canvas.Pen.Color:= clBlack; Canvas.Brush.Color:= clRed;

Canvas.Chord(160, 50, 230, 150, 140, 50, 250, 100); end;

Ao juntar as duas rotinas exemplificadas em um único formulário, obteve-se a seguinte figura:

Efeito produzido pela mudança da cor deste ponto pela cor do formulário

(4)

 procedure CopyRect(Dest: TRect; Canvas: TCanvas; Source: TRect);

Copia parte de uma imagem de um canvas para outro. Descrição:

Use CopyRect para transferir parte da imagem de um outro Canvas para a imagem do objeto de Tcanvas atual. Dest especifica o retângulo na tela onde a imagem-fonte será copiada. O parâmetro Canvas especifica a imagem de fonte. Source especifica um retângulo que delimita a porção do Canvas da fonte que será copiada.

A porção do Canvas da fonte é copiada usando o modo especificado em CopyMode.  procedure Draw(X, Y: Integer; Graphic: TGraphic);

Desenha o gráfico especificado no parâmetro Graphic na posição do ponto (X,Y), localizado no canto superior esquerdo da mesma.

Descrição:

Graphic pode ser bitmap, icon, ou metafile. Se o graphic é um objeto TBitmap, o bitmap é desenhado usando o valor de CopyMode.

 procedure DrawFocusRect(const Rect: TRect);

Desenha um retângulo no estilo atual para indicar que o objeto dentro do retângulo tem o foco.

Descrição:

Deve ser chamado DrawFocusRect para o perímetro de uma área de imagem toda vez que o controle requer ou perde o foco. O DrawFocusRect usa uma função ou-exclusivo (XOR) com a imagem e em seguida remove o retângulo da tela.

O retângulo que esta função desenha não pode ser movido. Para mover uma área que contém um retângulo desenhado por DrawFocusRect, chame DrawFocusRect para remover o retângulo da tela, mova a área, e então chame DrawFocusRect para redesenhar o retângulo na nova posição.

 procedure Ellipse(X1, Y1, X2, Y2: Integer);

Desenha uma elipse definida pelo contorno de um retângulo. Descrição:

Ellipse desenha um círculo ou uma elipse no canvas. O ponto (X1,Y1) representa o canto superior esquerdo e o ponto (X2,Y2) o canto inferior direito de um retânguloque circunscreve a elipse ou círculo.

A elipse é desenhada usando o valor de Pen, e é preenchida usando o valor de Brush. Nota: No Windows 95, a soma X1 + X2 e Y1 + Y2 não pode exceder 32768, assim como também a soma X1 + X2 + Y1 + Y2.

(5)

 procedure FillRect(const Rect: TRect);

Preenche o retângulo especificado no canvas usando o valor de brush atual. Descrição:

A região é preenchida incluindo o topo e o lado esquerdo do retângulo, mas, exclui os lados inferior e direito.

 procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle); Preenche uma área do canvas usando o valor de brush atual. Descrição:

type TFillStyle = (fsSurface, fsBorder);

Use FloodFill para preencher uma região possivelmente não-retangular da imagem com o valor de Brush. O região é preenchida a partir de um ponto (X,Y) situado dentro da região até encontrar uma cor que envolva a região.

O parâmetro FillStyle determina que tipo de cor define o contorno:

FsSurface Preenche toda a área que tem a cor indicada pelo parâmetro Color. Para quando uma cor diferente é encontrada.

fsBorder Preenche toda a área que NÃO tem a cor indicada pelo parâmetro Color. Para quando a cor é encontrada.

Use a propriedade Pixels para pegar a cor exata no ponto (X,Y) quando usar um FillStyle com o valor fsSurface. Da mesma forma, quando FillStyle é fsBorder, use Pixels para pegar a cor exata do contorno se um ponto do mesmo for conhecido.

 procedure LineTo(X, Y: Integer);

Desenha uma linha no canvas a partir de PenPos até o ponto especificado por X e Y, e passa a considerar a nova posição da pena em (X, Y).

Descrição:

Use FloodFill para preencher uma região possivelmente não-retangular da imagem com o valor de Brush. O região é preenchida a partir de um ponto (X,Y) situado dentro da região até encontrar uma cor que envolva a região.

Exemplo:

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin

Canvas.FillRect(ClientRect); apaga toda a tela antes de desenhar a linha Canvas.MoveTo(0, 0); // coloca a pena na posição (0,0)

Canvas.LineTo(X, Y); end;

(6)

 procedure MoveTo(X, Y: Integer);

Troca a posição da última posição da pena para a posição (X,Y). Descrição:

Use MoveTo para atribuir o valor de PenPos antes de chamar LineTo. Chamar MoveTo é o mesmo que aterar a propriedade PenPos.

 procedure Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Longint);

Desenha um gráfico de setor em uma elipse inscrita em um retângulo definido por (X1, Y1) e (X2, Y2).

Descrição:

A elipse é definida pelo retângulo que a circunscreve determinado pelos pontos (X1, Y1) e (X2,Y2). O setor e determinado por duas linhas radiais saindo do centro da elipse e indo até os pontos (X3,Y3) e (X4,Y4).

Tudo é desenhado usando os valores definidos por Pen e Brush.

Nota: No Windows 95, a soma X1 + X2 e Y1 + Y2 não pode exceder a 32768, assim como a soma X1 + X2 + Y1 + Y2.

 procedure Rectangle(X1, Y1, X2, Y2: Integer);

Desenha um retângulo definido por (X1, Y1) e (X2, Y2), onde o primeiro ponto representa o canto superior esquerdo e o segundo ponto, o canto inferior direito.

 procedure PolyBezier(const Points: array of TPoint);

Desenha um conjunto de curvas de Bézier (curvas que passam por pontos). Descrição

Use PolyBezier para desenhar uma seqüência de curvas de Bézier usando o último ponto desenhado e pontos de controle especificados pelo parâmetro de Points. A primeira curva é desenhada do primeiro ponto ao quarto ponto, usando o segundo e terceiro pontos como pontos de controle. Cada curva subseqüente na sucessão precisa de três mais pontos exatamente: o ponto final da curva anterior é usado como o ponto de partida da próxima, sendo que os dois pontos seguintes na sucessão são de controle, e o terçeiro é o ponto final; e assim sucessivamente:

Este procedimento desenha linhas utilizando a pen atual.

Use a função Slice (Fatia) para passar uma parte de vários pontos para o método de PolyBezier. Exemplo: para formar uma curva de Bézier que usa os primeiros dez pontos de um array de 100 pontos, use a função Slice como segue:

Canvas.PolyBezier(Slice(PointArray, 10));

x x

x x

x x x

x x x x

x x x x

x

x x

x

x

x x x

(7)

 procedure Polygon(Points: array of TPoint);

Desenha uma série de linhas, de acordo com o último valor de Pen, conectando o ponto anterior com o seguinte e fechando o polígono ligando o último ponto ao primeiro. Além disso, preenche o interior do mesmo com as características de preenchimento do último valor de Brush.

Para desenhar polígonos sem preenchimento é melhor usar o método Polyline especificando o primeiro ponto e o segundo sucessivamente até o final.

Use a função Slice para passar uma parte dos pontos da array para o método Polygon. Examplo: Para desenhar um polígono com os 10 primeiros pontos de um vetor de 100 pontos, use a função Slice da seguinte forma:

Canvas.Polygon(Slice(PointArray, 10));  procedure Polyline(Points: array of TPoint);

Desenha uma série de linhas com o valor corrente de pen conectando cada um dos pontos passados pelo parâmetro Points.

Se tivermos apenas 2 pontos, este método desenhará uma simples linha.

Chamando a função MoveTo com o valor do primeiro ponto, e chamando repetidamente o método LineTo com todos os pontos subseqüentes, obteremos o mesmo desenho. Porém, utsando PolyLine não temos como mudar as características da linha para cada uma das partes desenhadas, o que pode ser feito u tilizando LineTo.

Use a função Slice para passar uma parte do vetor de pontos para o método Polyline. Examplo: para conectar os primeiros 10 pontos de um vetor de 100 pontos usando a função Slice faça da seguinte forma:

Canvas.Polyline(Slice(PointArray, 10));  procedure Refresh;

Faz com que os valores selecionados para Pen, Brush, e Font retornem ao seu estado padrão (default). Mas, os valores não são perdidos, ao chamar qualquer um dos métodos de desenho depois de ter sido chamado o método Refresh os valores destas 3 propriedades voltam aos valores anteriormente selecionados.

 procedure RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer);

Desenha um retângulo com os cantos arredondados, usando os valores anteriores de Pen e de Brush. O retângulo é definido pelas coordenadas do canto superior esquerdo (X1,Y1) e do canto inferior direito (X2,Y2) e um quarto de elipse definida pela largura X3 e altura Y3.

 procedure Lock;

Impede que outras linhas utilizem a tela, isto é, o canvas não aceita mais nenhum desenho.

Usa-se chamar Lock em aplicativos multitarefa para impedir que outras tarefas desenhem no canvas. Este travamento permanence até que o método UnLock seja chamado. Depois de várias tentativas de desenhar, os travamentos são aninhados e contados, sendo esta quantidade guardada na propriedade LockCount. Daí, o canvas sera destravado somente depois que todas as tentativas de desenho forem destravadas.

(8)

Em aplicações multi-tarefas que usam Lock para proteger uma tela, todas as chamadas que usam a tela devem ser protegidas por uma chamada a Lock. Qualquer tarefa que não proteger a tela antes de usá-la causará erros.

Não use Lock indiscriminadamente, a menos que haja um perigo de que outra linha desenhada venha a interferir no desenho da tela.

 procedure StretchDraw(const Rect: TRect; Graphic: TGraphic );

Coloca a figura guardada no parâmetro Graphic dentro do retângulo determinado por Rect. Corresponde à propriedade Stretch dos objetos Image.

Estas figures podem ser bitmaps, icons, ou metafiles. Se a figura é um TBitmap, o bitmap é desenhado usando o valor de CopyMode.

 function TextExtent(const Text: string): TSize;

Esta função retorna a largura e a altura, em pixels, de um string desenhado com a fonte atual. type

TSize = record

cx: Longint; // largura cy: Longint; // altura end;

Exemplo:

Var TamFonte: Tsize; : : :

TamFonte:= Form1.Canvas.TextExtent(‘M’);

ShowMessage(‘Largura da letra M = ‘,Inttostr(TamFonte.cx), ‘Altura da letra M = ‘,InttoStr(TamFonte.cy);

Use TextExtent para determinar o espaço ocupado por um string na imagem. Outros elementos da imagem como linhas, retângulos, ou linhas adicionais de texto podem ser posicionadas de modo a respeitar o tamanho do texto.

Para determinar somente a altura, chame TextHeight. Para determinar somente a largura, chame TextWidth.

 function TextHeight(const Text: string): Integer;

Retorna a altura, em pixels, de um string desenhado na fonte atual. TextHeight retorna o mesmo valor que TextExtent(Text).cy.

 procedure TextOut(X, Y: Integer; const Text: string);

Escreve um string no canvas, partindo do ponto (X,Y), utilizando os valores da propriedade PenPos e Font até o final do string.

 procedure TextRect(Rect: TRect; X, Y: Integer; const Text: string);

Escreve um string dentro do espaço definido por um retângulo. O que exceder ao espaço do retângulo será “cortado”.

O canto superior esquerdo de onde o texto sera escrito é definido pelas coordenadas (X, Y).  function TextWidth(const Text: string): Integer;

Retorna a largura, em pixels, de um string desenhado na fonte atual. TextWidth returns the same value as TextExtent(Text).cx.

(9)

 function TryLock: Boolean;

Trava (Lock) o canvas se ele estiver destravado.

Se o canvas estiver destravado, Trylock irá travá-lo, atribuindo o valor 1 para LockCount, e retornando o valor True. Se o canvas já estiver travado, Trylock retornará o valor False sem fazer nenhuma troca.

Use TryLock antes de efetuar alterações no canvas que possam interferir com outros códigos de proteção realizados por um conjunto de Lock ... Unlock de outros métodos.

 procedure Unlock;

Decrementa o valor de LockCount, permitindo que outras linhas possam ser desenhadas quando este valor atingir o valor Zero.

Para evitar problemas, sempre use um Unlock para cada Lock utilizado.

Referências

Documentos relacionados

Portanto, mesmo percebendo a presença da música em diferentes situações no ambiente de educação infantil, percebe-se que as atividades relacionadas ao fazer musical ainda são

Objeto: A presente licitação tem como objeto a contratação de empresa para prestação de serviços de transporte e instalação de reservatório de água nas Escolas Ana

Os resultados obtidos nos ensaios com diferentes tipos de transportadores helicoidais e modelos reduzidos de cacambas transportadoras de racao mostraram o verdadeiro

b) Execução dos serviços em período a ser combinado com equipe técnica. c) Orientação para alocação do equipamento no local de instalação. d) Serviço de ligação das

libras ou pedagogia com especialização e proficiência em libras 40h 3 Imediato 0821FLET03 FLET Curso de Letras - Língua e Literatura Portuguesa. Estudos literários

¾ Segundo nível • Terceiro nível – Quarto nível A FAMÍLIA PROFIBUS A FAMÍLIA PROFIBUS PROFIBUS-FMS PROFIBUS-FMS é a solução de propósito geral para comunicação de

Além disso, as despesas com vendas nos restaurantes (excluindo depreciação e amortização) representaram 49,3% da receita operacional líquida, uma redução de 180

Avaliação do impacto do processo de envelhecimento sobre a capacidade funcional de adultos mais velhos fisicamente ativos.. ConScientiae