Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-10-2013
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Controlar scrollbars en DBGrid

Hola, deseo que las barras de scroll del DBGrids, sólo aparezcan cuando hay mas registros de los que se pueden mostrar en pantalla.

He leido este hilo sobre el tema http://www.clubdelphi.com/foros/showthread.php?t=55512

He registrado el componente que roman adjunta en el archivo AutoSBDBGrid.zip y he insertado un rmDBGrid en mi aplicación, pero éste sigue apareciendo con ambas barras de scroll, aunque todos los registros aparecen en el rmDBGrid.

¿Mi duda es si tengo que hacer algún cambio más en la aplicación, si hay que utilizar algún evento del rmDBGrid o de su dataset o hacer alguna llamada a la procedure WMNCCalcSize?

Espero que alguno de vosotros me pueda ayudar, gracias de antemano.

Un saludo
Responder Con Cita
  #2  
Antiguo 10-10-2013
Avatar de Pericles
Pericles Pericles is offline
Miembro
NULL
 
Registrado: sep 2013
Ubicación: Buenos Aires, Argentina
Posts: 24
Poder: 0
Pericles Va por buen camino
Control scrollbar en BDgrid

Hola, buscando por ahi veo que alguien sobreescribe el metodo de refresco de la barra de scroll. En el ejemplo solo se indica si se muestran o no las barras.(funciona perfecto).
Para lo que planteas (habria que probar) se me ocurre evaluar cantidad de registros que soporta tu dbgrid (segun el alto del grid) y la cantidad de registros en el Dataset.


Saludos
Nicolas Perichon

Código Delphi [-]

....
type
  TDBGrid = class(DBGrids.TDBGrid)
  private
    procedure UpdateScrollBar; override;
  end;
...


implementacion del metodo:

Código Delphi [-]

procedure TDBGrid.UpdateScrollBar;

begin
  
 IF bdGrid.datasource.dataset.fields.count > cantidadMaxima  THEN ShowScrollBar(form1.DBGrid1.Handle, SB_VERT, False);

 
  //ShowScrollBar(form1.DBGrid1.Handle, SB_HORZ, False);

  end;

Última edición por Pericles fecha: 10-10-2013 a las 16:04:19.
Responder Con Cita
  #3  
Antiguo 11-10-2013
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Gracias Pericles por tu ayuda

En mi caso, he probado el código, pero el dbgrid sigue presentando ambas barras de scroll, incluso si el área del dbgrid es suficientemente grande para presentar todos los registros. No se si será debido a un error mio, a la versión del Delphi (XE2)...

Espero que alguno de vosotros pueda indicarme un pequeño ejemplo del uso del componente de roman:

Código Delphi [-]
unit AutoSBDBGrid;

interface

uses
  Windows, Messages, Classes, DBGrids;

type
  TrmDBGrid = class(TDBGrid)
  protected
    procedure WMNCCalcSize(var msg: TMessage); message WM_NCCALCSIZE;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TrmDBGrid]);
end;

{ TrmDBGrid }

procedure TrmDBGrid.WMNCCalcSize(var msg: TMessage);
var
  Style: Integer;

begin
  if Assigned(DataSource) and Assigned(DataSource.DataSet) then
  begin
    Style := GetWindowLong(Handle, GWL_STYLE);

    if DataSource.DataSet.RecordCount > VisibleRowCount then
      Style := Style or WS_VSCROLL
    else
      Style := Style and not WS_VSCROLL;

    SetWindowLong(Handle, GWL_STYLE, Style);
  end;

  inherited;
end;

end.

Gracias
Responder Con Cita
  #4  
Antiguo 11-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jocaro.

Otra forma podría ser usando el evento OnDataChange del TDataSource asociado:
Código Delphi [-]
...
type
  TDBGrid = class(DBGrids.TDBGrid);
  TTuForm = class(TForm)
    ...
    TuDataSource: TDataSource;
    TuDBGrid: TDBGrid;
    procedure TuDataSourceDataChange(Sender: TObject; Field: TField);
  ...

implementation

procedure TTuForm.TuDataSourceDataChange(Sender: TObject; Field: TField);
begin
  with TuDBGrid do
    ShowScrollBar(Handle, SB_VERT + SB_CTL, DataSource.DataSet.RecordCount > VisibleRowCount);
end;
Funciona en Delphi 7, pero habrá que ver en XE2...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 14-10-2013
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Gracias ecfisa

Funciona correctamente en XE2

Un saludo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Desaparicion de ScrollBArs en DBGrid adrall OOP 7 20-09-2012 09:58:25
Quitar scrollbars en un dbgrid sur-se OOP 3 18-11-2008 19:02:13
dbgrid y scrollbars Rabata Conexión con bases de datos 3 25-07-2005 11:41:21
Los DBGrid y sus scrollbars SnaKe Varios 3 31-10-2003 19:11:26
cambio aspecto/color de scrollbars de un dbgrid Joa0 Varios 0 24-05-2003 10:39:42


La franja horaria es GMT +2. Ahora son las 12:38:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi