Montando Hint no Dbgrid
Galera tenho o seguinte caso...
Tenho uma tabela que esta ligada em um grid ai conforme o cara navega na tabela (after scroll) eu monto uma string faço algumas verificaçoes caso seja satisfatorio monto um Hint atraves da posiçao do mouse, ai qndo o cara clica no registro no grid o hint monta certinho um pouquinho abaixo do registro ate ai tudo beleza a questão é qndo o cara navega pelo teclado ai o hint é montado onde o mouse estiver parado, a questão é saber se tem como pegar a posiçao X e Y da linha selecionada no grid ou algo que resolva essa questão !
abç
Guilherme
Tenho uma tabela que esta ligada em um grid ai conforme o cara navega na tabela (after scroll) eu monto uma string faço algumas verificaçoes caso seja satisfatorio monto um Hint atraves da posiçao do mouse, ai qndo o cara clica no registro no grid o hint monta certinho um pouquinho abaixo do registro ate ai tudo beleza a questão é qndo o cara navega pelo teclado ai o hint é montado onde o mouse estiver parado, a questão é saber se tem como pegar a posiçao X e Y da linha selecionada no grid ou algo que resolva essa questão !
abç
Guilherme
Guilherme
Curtidas 0
Respostas
Vitor Alcantara
27/10/2008
Tenta isso:
Declara na sessão private do teu form principal :
No OnCreate do teu form coloca isso:
PS: Estou utilizando o component ApplicationEvents no form principal.
Declara na sessão private do teu form principal :
procedure AppShowHint(var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo);
procedure TfPrincipal.AppShowHint(var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo); Var curPos : LongInt; gridCoord: TGridCoord; begin with HintInfo do begin if HintControl is TDBGrid then with TDBGridDescendant(HintControl),gridCoord do begin Application.HideHint; //Tempo que demora para exibir novamente //se continuar com o mouse sobre o DBGrid ReshowTimeout := 1500; HintColor := clInfoBk; //Largura Máxima da janela de Hint //HintMaxWidth := 160; gridCoord := MouseCoord(CursorPos.x,CursorPos.y); try curPos := DataLink.ActiveRecord; try DataLink.ActiveRecord := y-1; if not((x-1)< 0) and not((y-1)< 0) and (x-1 <= FieldCount) then begin if Fields[x-1].DataType = ftMemo then begin HintStr := Fields[x-1].AsWideString; end else if Fields[x-1].DataType = ftBoolean then begin if Fields[x-1].AsBoolean then begin HintSTr := ´Sim´; end else begin HintStr := ´Não´; end; end else begin HintStr := Fields[x-1].AsString end; end else HintStr := ´\´; finally DataLink.ActiveRecord := CurPos end; CanShow := not((x-1)< 0) and not((y-1)< 0) and (x-1 <= FieldCount) except CanShow := False end; end; end; end;
No OnCreate do teu form coloca isso:
Application.ShowHint := True; ApplicationEvents1.OnShowHint := AppShowHint;
PS: Estou utilizando o component ApplicationEvents no form principal.
GOSTEI 0
Vitor Alcantara
27/10/2008
Tinha me esquecido tem que declarar um tipo descendente do DbGrid
type TDBGridDescendant = class(TDBGrid);
GOSTEI 0