Mascara no DBGrid mesmo sem foco

Delphi

04/08/2006

sempre q o DBGrid perde o foco a máscara desaparece, e os dados só voltam a ficar formatados conforme a máscara quando recebe novamente o foco.

como deixar o DBGrid sempre com a máscara?


Raserafim

Raserafim

Curtidas 0

Respostas

Micheus

Micheus

04/08/2006

Além da propriedade EditMask, vc está configurando DisplayFormat?


GOSTEI 0
Raserafim

Raserafim

04/08/2006

Não, até pq no campo (que é string) não tem esta propriedade.


GOSTEI 0
Marco Salles

Marco Salles

04/08/2006

Não, até pq no campo (que é string) não tem esta propriedade.


Não tem a propriedade DisplayFormat , mas tem, a propriedade EditMask

Se voce não usa o editMask . como voce faz para mascarar o ´campo´. ???


GOSTEI 0
Raserafim

Raserafim

04/08/2006

eu defino a propriedade EditMask.

mas acho que já achei o pq do problema.

já que eu pinto o canvas da linha da grid, então tenho que recolocar o texto tb, acho que é neste momento que fica sem a máscara.

vou tentar ver se tem jeito


GOSTEI 0
Marco Salles

Marco Salles

04/08/2006

mas acho que já achei o pq do problema. já que eu pinto o canvas da linha da grid, então tenho que recolocar o texto tb, acho que é neste momento que fica sem a máscara.


tem grandes possibilidades de ser este o ´problema´...

mas a saida para isto pode ser talvez mais simples ....

para pintar voce usa qual das duas instruçoes abaixo ?????

DBGReltPesquisa.Canvas.FillRect(Rect); 
DBGReltPesquisa.Canvas.TextOut(Rect.Left+2,Rect.Top+2,Column.Field.DisplayText);

ou

Grid.DefaultDrawColumnCell(Rect, DataCol, Column, State); 



GOSTEI 0
Raserafim

Raserafim

04/08/2006

no evento OnDrawColumnCell

utilizo o DrawText para escrever o texto



eu não conhecia este TextOut, mas sim o TextRect, na qual utilizava em conjunto com o FillRect.


GOSTEI 0
Raserafim

Raserafim

04/08/2006

encontrei a solução.


ao capturar o valor do campo para colocar na função DrawText, ao invés de eu pegar o valor:
  Column.Field.AsString


utilizo este código e passa a pegar exatamente o valor que está sendo exibido:
  Column.Field.DisplayText



GOSTEI 0
Marco Salles

Marco Salles

04/08/2006

[b:85b27eabbe]como é que é esta função função DrawText ?????[/b:85b27eabbe]


GOSTEI 0
Raserafim

Raserafim

04/08/2006

no evento OnDrawColumnCell faço o seguinte:

...
var
  S: string;
  R: TRect;
begin
  S := Column.Field.DisplayText;
  R := Rect;
  R.Top := R.Top + 2;
  R.Left := R.Left + 2;
  TDBGrid(Sender).Canvas.FillRect(Rect);
  DrawText(TDBGrid(Sender).Canvas.Handle, PChar(S), Length(S), R, DT_LEFT)
end;



GOSTEI 0
Marco Salles

Marco Salles

04/08/2006

me recordei ... Draw Text é uma Api do Windows para Pintar o Texto no
Handle Especificado.. Mas esta chamada é so em casos especificos , o que voce faz especificamente nesse evento Para ter a necessidade de fazer esta ´chamada´....

Sei que isto esta fora do contesto de sua dúvida inicial , que por sinal , ja ate foi resolvida , mas aqui se relembra conceitos e métodos..

[b:69736b27e9]citação de raserafim[/b:69736b27e9]
mas acho que já achei o pq do problema.


[b:69736b27e9]citação de marco salles[/b:69736b27e9]
tem grandes possibilidades de ser este o ´problema´...



GOSTEI 0
POSTAR