Problema Canvas x TextOut x Thread x Delphi 7
13/11/2009
0
Olá a todos,
preciso muito de uma luz e já agradeço muito a quem poder ajudar.
Possuo um aplicação em Delphi 7 e roda em um Windows XP e funciona da seguinte maneira:
Fica recebendo dados de uma serial;
Quando o dado pertinente é reconhecido no meio de várias informações recebidas pela serial, é criado um Objeto que possui um TBitMap que também é criado nesta hora, bato uma foto que fica armezanado neste TBitMap e o adiciono o Objeto em um TObjectList;
Há um Thread que fica verificando este TObjectList que o processa esta fila quando há algum objeto;
Nesta Thread basicamente é escrito alguns dados na imagem utilizando Canvas.TextOut e salvo a imagem em disco.
O PROBLEMA é que não há uma lógica específica, mas algumas imagens são salvas em disco e não é gerado o texto na imagem, segue o trecho do código para avaliação, já mudei várias vezes no ituito de descobrir o problema, mas o atual é este:
procedure TEventoThread.CriaTxt(Aimg: TBitMap);
begin
imgTxt := Aimg; //declarado na thread
Synchronize(AtualizaTxt);
// depois numa outra chama gravo em disco
end;
procedure TEventoThread.AtualizaTxt;
var
txt : string;
begin
imgTxt.Canvas.Lock;
imgTxt.Canvas.Brush.Color:= clBlack;
imgTxt.Canvas.Font.Color := clWhite;
imgTxt.Canvas.Font.Size := 9;
imgTxt.Canvas.Pen.Style := psSolid;
altCaracter := imgTxt.Canvas.TextHeight('X');
txt := 'XXXXXXXXXX';
imgTxt.Canvas.Rectangle(0, 0, imgTxt.Width, altCaracter*2);
imgTxt.Canvas.TextOut(0, 0, txt);
imgTxt.Canvas.Unlock;
end;
preciso muito de uma luz e já agradeço muito a quem poder ajudar.
Possuo um aplicação em Delphi 7 e roda em um Windows XP e funciona da seguinte maneira:
Fica recebendo dados de uma serial;
Quando o dado pertinente é reconhecido no meio de várias informações recebidas pela serial, é criado um Objeto que possui um TBitMap que também é criado nesta hora, bato uma foto que fica armezanado neste TBitMap e o adiciono o Objeto em um TObjectList;
Há um Thread que fica verificando este TObjectList que o processa esta fila quando há algum objeto;
Nesta Thread basicamente é escrito alguns dados na imagem utilizando Canvas.TextOut e salvo a imagem em disco.
O PROBLEMA é que não há uma lógica específica, mas algumas imagens são salvas em disco e não é gerado o texto na imagem, segue o trecho do código para avaliação, já mudei várias vezes no ituito de descobrir o problema, mas o atual é este:
procedure TEventoThread.CriaTxt(Aimg: TBitMap);
begin
imgTxt := Aimg; //declarado na thread
Synchronize(AtualizaTxt);
// depois numa outra chama gravo em disco
end;
procedure TEventoThread.AtualizaTxt;
var
txt : string;
begin
imgTxt.Canvas.Lock;
imgTxt.Canvas.Brush.Color:= clBlack;
imgTxt.Canvas.Font.Color := clWhite;
imgTxt.Canvas.Font.Size := 9;
imgTxt.Canvas.Pen.Style := psSolid;
altCaracter := imgTxt.Canvas.TextHeight('X');
txt := 'XXXXXXXXXX';
imgTxt.Canvas.Rectangle(0, 0, imgTxt.Width, altCaracter*2);
imgTxt.Canvas.TextOut(0, 0, txt);
imgTxt.Canvas.Unlock;
end;
Marcio Tenorio
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)