Ajuda - Busca - Membros - Calendário
Versão Completa: Problemas Com Canvas
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
- Robson -
Pessoal, está acontecendo o seguinte tenho um TImage onde Desenho linhas entre os componentes dipostos(elipses) só que a cada vez que desenho em tempo de execução o Timage dá um piscada.
Como faço para isso não acontecer?

Obrigado.........
Churc
opa

tenta assim, primeiro no evento OnCreate do Form
você coloca

DoubleBuffered := True;

se só isso não resolver o que acho pouco provável
então deve ter no TImage essa mesma propriedade
então você faz o mesmo...

Image1.DoubleBuffered := True;

to sem o delphi aqui...

abraço
- Robson -
cara não deu certo..........
não existe essa propriedade para o TImage ......
Valeu..
Micheus
QUOTE(- Robson - @ Feb 3 2007, 05:34 PM) *
... onde Desenho linhas entre os componentes dipostos(elipses)
com licença, uma curiosidade: você guarda algum tipo de informação referente ao desenho das linhas? Tipo tem algum tipo de estrutura que indique a sequência de linhas que desenha?
Churc
QUOTE
cara não deu certo..........
não existe essa propriedade para o TImage ......
Valeu..
opa
tente colocar no Evento OnCreate do Form DoubleBuffered := True; talvez funcione...
Se não funcionar ou não for o que deseja responda a pergunta do Micheus talvez
seja o que você precisa!

Eu sempre usei o DoubleBuffered mas em alguns casos pode não funcionar rs

abraço
Visitante
Micheus desculpe pela demora em te responder.........
Sim eu quardo os pontos inicial e final de cada linha que chamo de transição em um vetor.
Quando movo um componente calculo novamente os pontos que envolvem esse componente a chamo um método que lê o vetor de transicoes e redesenha na tela cada transicao...
Coloquei o DoubleBuffered := true no meu scrollbox que armazena o Timage no evento onShow do Form
Deu certo só que ficou lento.
Abraços...........
Micheus
QUOTE(Visitante @ 09/02/2007 - 09:21) *
Sim eu quardo os pontos inicial e final de cada linha que chamo de transição em um vetor.
Quando movo um componente calculo novamente os pontos que envolvem esse componente a chamo um método que lê o vetor de transicoes e redesenha na tela cada transicao...
Robison, acho que esse assunto é referente ao seu outro post, certo?

Eu não saberia como resolver o problema que vem se desenrrolando por aqui. Mas já que você mantém um tipo de estrutura que lhe indica o que e onde algo deve ser desenhado, permitam-me sugeri algo que já utilizei em outra oportunidade, que se bem me lembro não gerava este efeito de piscar. Era um esquema para desenha fluxogramas/portas lógicas. Derrepente vale o teste. smile.gif

O princípio é o seguinte: você define e cria um canvas no form onde estará adicionado o seu ScrollBox, então cria um procedimento para desenhar seus elementos gráficos no scrollbox utilizando aquele canvas (observe, não é utilizado outra coisa além do scrollbox). Um exemplo:
CODE
type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
  private
    ScrollCanvas :TCanvas;
    procedure DesenhaDiagrama;
  end;
...

procedure TForm1.FormCreate(Sender: TObject);
begin
  ScrollCanvas := TCanvas.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ScrollCanvas.Free;
end;

// aqui va o procedimento que lê a estrutura de dados e procede ao
// desenho por ela representado
procedure TForm1.DesenhaDiagrama;
begin
  ScrollCanvas.Handle := GetDC(ScrollBox1.handle);
// desenha os diagramas
  ...
  ScrollCanvas.Rectangle(10, 10, 200, 150);  // desenhando apenas um retângulo
  ...
  ReleaseDC(ScrollBox1.handle, ScrollCanvas.Handle);
end;

// aqui, quando o form for redesenhado, redesenha o diagrama
procedure TForm1.FormPaint(Sender: TObject);
begin
  DesenhaDiagrama;
end;

Abraços
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.