Ir para conteúdo
Fórum Script Brasil
  • 0

REFORMULADO - Desenhar com canvas em um form sem foco


Martha Fernanda

Pergunta

Estou fazendo um programa que tem no form princial um objeto TImage.

Utilizo a função Canvas para desenhar formas geométricas.

Num determinado momento do programa, ao invés do usuário clicar com o mouse na tela para determinar as coordenadas de uma reta, eu abro um formulário para que ele digite as coordenadas e posteriormente eu desenho essa reta no image.

Quando o usuário digita apenas as coordenadas de 1 reta não encontro problemas porque guardo os dados das coordenadas em variaveis globais e mando desenhar diretamente do formulário principal. Porém, o meu problema aparece quando quero desenhar várias retas, sem fechar esse segundo formulário de digitação das coordenadas.

Não ocorre nenhum erro, mas o programa não desenha nenhuma reta.

Alguém pode me ajudar??

Obrigada,

Fernanda

Editado por Martha Fernanda
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Gente, vou reformular minha pergunta pois vi que não fui clara!!! Desculpem...

Estou fazendo um programa que tem no form princial um objeto TImage.

Utilizo a função Canvas para desenhar formas geométricas nesse objeto.

O programa desenha essas formas a partir das coordenadas dadas pelo clique do mouse (X e Y do evento OnMouseDown):

Canvas.Pixels[X,Y]:=blBlue;

Num determinado momento do programa, ao invés do usuário clicar com o mouse na tela para determinar certas coordenadas, eu abro um segundo formulário para que ele digite essas coordenadas e posteriormente eu gravo essas coordenadas em um lista do tipo Point e dps desenho:

Canvas.Rectangle(pF.x, pF.y, pF.x, pF.y);

O problema é que eu não consigo desenhar no form1 quando estou no form2, por exemplo:

form1.image1.canvas.Rectangle(pF.x, pF.y, pF.x, pF.y);

Apenas quando estou no form1.

E não acusa nenhum tipo de erro, apenas não desenha!!

Alguém saberia me ajudar???????

Obrigada,

Fernanda.

Link para o comentário
Compartilhar em outros sites

  • 0
O problema é que eu não consigo desenhar no form1 quando estou no form2, por exemplo:

form1.image1.canvas.Rectangle(pF.x, pF.y, pF.x, pF.y);

Apenas quando estou no form1.

E não acusa nenhum tipo de erro, apenas não desenha!!

Se voce não mandar o foco para o form1 não vai acontecer nada

exemplo:

procedure TForm2.BitBtn1Click(Sender: TObject);
begin
   form1.image1.Canvas.Polygon([Point(10, 10), Point(30, 10),
   Point(130, 30), Point(240, 120)]);
   form1.Show;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Se voce não mandar o foco para o form1 não vai acontecer nada
Jhonas, desculpe-me mas não acredito que isto seja necessário (veja que como o exemplo abaixo não há problemas). Caso ela estivesse utilizando o canvas do form, talvez algo assim ocorresse porque se ela pintar direto no canvas dele e uma nova mensagem de pintura (WM_PAINT) chegar para ele - automaticamente ele será limpo, exceto se for provido código para que neste evento (OnPaint) os desenhos sejam refeitos (baseadas nas coordenadas armazenadas na tal lista). Mas, como ela usa um TImage, a imagem deve permanecer inalterada até que seja limpa explicitamente.

Penso que seria interessante a colega postar a parte do código que usa para o desenho da imagem. Por acaso, algum tipo de cálculo seria feito com os pontos (tipo escala ou deslocamento)? Deve haver algum detalhe na construção da imagem que esteja causando este efeito.

O meu exemplo:

Unit1, onde o form contém 01 TImage e 01 TButton:

implementation
uses 
  Unit2;  // referência ao Form2 que permite a entrada de coordenadas para o desenho
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not Assigned(Form2) then
    Form2 := TForm2.Create(Self);
  Form2.Show;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  if Assigned(Form1) then
    Form1.Release;
end;

end.
Unit2, onde o form contém 04 TEdit's e 01 TButton, para entrada das coordenadas e usando o exemplo da colega, ele desenha um retângulo:
implementation
uses
  Unit1;  // referência ao Form1, que contém o Image1
{$R *.DFM}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Form1.Image1.Canvas.Rectangle(StrToIntDef(Edit1.Text, 0), StrToIntDef(Edit2.Text, 0),
                                StrToIntDef(Edit3.Text, 0), StrToIntDef(Edit4.Text, 0));
end;

end.

a cada conjunto de coordenada entrada e clicando no botão, um retângulo é desenhado no Image1 do Form1.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Jhonas, desculpe-me mas não acredito que isto seja necessário (veja que como o exemplo abaixo não há problemas).

Micheus ao me referir que não vai acontecer nada ... seria não ver nada no form onde está o TImage, a menos que um form estivesse um ao lado do outro. rs

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...