Fórum Montando Hint no Dbgrid #365519

27/10/2008

0

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


Guilherme

Guilherme

Responder

Posts

27/10/2008

Vitor Alcantara

Tenta isso:

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.


Responder

Gostei + 0

27/10/2008

Vitor Alcantara

Tinha me esquecido tem que declarar um tipo descendente do DbGrid

type
  TDBGridDescendant = class(TDBGrid);



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar