GARANTIR DESCONTO

Fórum Interceptar evento OnPaint do DBGrid #268900

16/02/2005

0

O componente DBGrid não tem o evento OnPaint acessível. Como faço para executar algum comando sempre que o evento OnPaint do DBGrid for disparado?


Raserafim

Raserafim

Responder

Posts

17/02/2005

Buosinet

Utilize o comando OnDrawColumnCell da DBGrid (veja o help, explica legal)


Responder

Gostei + 0

17/02/2005

Buosinet

Desculpe, o EVENTO OnDrawColumnCell


Responder

Gostei + 0

17/02/2005

Raserafim

esse evento não dá certo pois ele é idparado para cada célula. o comando que preciso utilizar não pode ser disparado tantas vezes assim.
Preciso de um evento que seja disparado menas vezes.


Responder

Gostei + 0

17/02/2005

Massuda

Preciso de um evento que seja disparado menas vezes.
O que exatamente você está querendo fazer? Dependendo do que for, pode ser que usar os eventos do datasource do grid seja mais viável do que tentar interceptar o evento OnPaint.


Responder

Gostei + 0

17/02/2005

Raserafim

o principal motivo é que um colega aqui do fórum (gabriel) me forneceu o comando para ocultar as barras de rolagem. Coloquei este evento no OnPaint do form. Ao abrir o form o DBGrid fica sem as barras, mas ao selecionar algum registro as barras voltam. Tentei colocar no evento OnDrawColumnCell, mas este evento é disparado muitas vezes e quando a brra de rolagem aparece as células são desenhadas novamente o que causa um loop.


Responder

Gostei + 0

17/02/2005

Massuda

o principal motivo é ... para ocultar as barras de rolagem.
Algum tempo atrás o colega Microbios apresentou um [url=http://forum.clubedelphi.net/viewtopic.php?t=58157]código para eliminar as barras de rolagem de uma janela MDIForm[/url]... entretanto, o código dele serve (teoricamente) para qualquer componente derivado de TWinControl. Assim, acho que este código serviria no seu caso (não testei):)...
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  // ...

implementation

// ...

function ClientWindowProc(wnd: HWND; Msg: Cardinal; wparam, lparam: Integer): Integer; stdcall;
var
  f: Pointer;
begin
  f := Pointer(GetWindowLong(wnd, GWL_USERDATA));

  case Msg of
    WM_NCCALCSIZE: begin
        if (GetWindowLong(wnd, GWL_STYLE) and (WS_HSCROLL or WS_VSCROLL)) <> 0 then
          SetWindowLong(wnd, GWL_STYLE, GetWindowLong(wnd, GWL_STYLE) and not (WS_HSCROLL or WS_VSCROLL));
      end;
  end;

  Result := CallWindowProc(f, wnd, Msg, wparam, lparam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Troque SeuGrid pelo nome do seu dbgrid
  if SeuGrid.Handle <> 0 then begin
    if (not (GetWindowLong(SeuGrid.Handle, GWL_USERDATA) <> 0)) then begin
      SetWindowLong(SeuGrid.Handle, GWL_USERDATA, SetWindowLong(ClientHandle, GWL_WNDPROC, Integer(@ClientWindowProc)));
    end;
  end;

  // ...
end;

// ...



Responder

Gostei + 0

28/02/2005

Raserafim

massuda, tentei utilizar este código mas dá um erro no final da chamada que está no create. o erro diz que uma variável é requerida.


Responder

Gostei + 0

28/02/2005

Massuda

Desculpe... tem um pequeno erro que ocorreu quando copiei o código de para a mensagem... onde está
SetWindowLong(SeuGrid.Handle, GWL_USERDATA, SetWindowLong(ClientHandle, GWL_WNDPROC, Integer(@ClientWindowProc)));
devia ser
SetWindowLong(SeuGrid.Handle, GWL_USERDATA, SetWindowLong(SeuGrid.Handle, GWL_WNDPROC, Integer(@ClientWindowProc)));
Testei e funcionou sem problemas com um dbgrid.


Responder

Gostei + 0

01/03/2005

Raserafim

massuda, testei mas ainda não deu certo.
se não for pedir muito, faz um projeto com o form, um dbgrid e o código, e envia pro meu e-mail raserafiminfo@bol.com.br


Responder

Gostei + 0

01/03/2005

Sistemald

Amigo use o seguinte código no enventro [b:a4a1cb6731]OnDrawDataCell[/b:a4a1cb6731]

ShowScrollBar(dbgrid1.Handle,SB_HORZ,False);
ShowScrollBar(dbgrid1.Handle,SB_Vert,False);



Responder

Gostei + 0

01/03/2005

Sistemald

Você também pode utilizar o TDonatoDbGrid

Possui as funções:
* Zebra
* Autosave(salvar as posições e tamanho da coluna)
* Boolean(Mostra os campos booleanos com uma figura pré definida)
* Mostrar/Esconder barra de rolagem

Veja o tópico:
[url]http://forum.clubedelphi.net/viewtopic.php?p=188031#188031[/url]

ou Faça o download direto:
[url]http://www.donato.inf.br/desenvolvedor/TDonatodbgrid.zip [/url]


Responder

Gostei + 0

01/03/2005

Edukobra

A parte do componente que esconde as barras não funcionou comigo.

Alguém sabe como eu faço para que se o dado estiver posicionado do lado direito, ao passar por ele, que ele não va para a esquerda ?


Responder

Gostei + 0

02/03/2005

Raserafim

valeu Massuda, agora deu certo.
aliás já poderia ter dado certo antes, mas o problema era o seguinte, que já fica de aviso pra quem vai utilizar o código.

o código da função tem que estar antes do código do evento create.


Responder

Gostei + 0

02/03/2005

Sistemald

Não funcionou porque vc usa delphi 6 ou 7,

encontrei um bug, para essas versões e ja esta corrigido em breve colocarei disponivel para download.


Responder

Gostei + 0

23/03/2005

Raserafim

massuda, o código não funciona caso o form não seja criado dinamicamente pelo delphi, ou seja, quando eu crio o form no momento em que ele vai ser exibido o código não funciona.
Alguma solução?


Responder

Gostei + 0

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

Aceitar