Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-05-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 23
gluglu Va por buen camino
No he entrado al máximo detalle a analizar la solución que propones, pero a simple vista denoto algunos asuntos que no sé si funcionarán exactamente como tu lo prevés :

1. Utilizas RecordCount. Dependiendo de la base de datos, este valor es en la mayoría de las ocasiones muy falso, devolviendo valores que no suelen ser los reales. En el caso de Firebird al menos, se ha hablado en múltiples ocasiones en los foros que no se debería usar RecordCount.

2. No veo cómo solucionas el tema de pulsar la tecla Shift, que es el asunto principal del hilo que cree en su momento y que aparece al principio del Post. El principal problema es que la multiselección en el DBGrid estándar no está prevista con la tecla Shift, como en cualquier otro programa (como ejemplo se podría poner cualquier programa de correo electrónico).

Al pulsar el Shift deberían seleccionarse todos los registros desde el que actualmente estaba seleccionado hasta el que acabas de hacer click con la tecla shift pulsada.

3. No sé si es eficiente ejecutar Locate y MoveBy al tener el DBGrid abierto y con el DataSet asociado también abierto.

... sólo eran algunos comentarios propios a la solución propuesta, sin desmerecer ni la una ni la otra.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 17-05-2011
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 21
ElDioni Va por buen camino
Buenas tardes gluglu,

La función del mouseup del dbgrid para que controle la tecla shift lo tenía puesto de la siguiente forma:

Código Delphi [-]
procedure TFrmMenuArt.DbGridOrdenesMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
w:integer;
begin
if pulsada<>17 then
  begin
    QueFilas:='';
    if button=MBLeft then
      begin
        if pulsada=16 then
          begin
            UltiRegOrd:=QueryOrdenes.RecNo;
            DbGridOrdenes.SelectedRows.Clear;
            for w:=PrimerRegOrd to UltiRegOrd do
              begin
                DbGridOrdenes.DataSource.DataSet.RecNo:=w;
                DbGridOrdenes.SelectedRows.CurrentRowSelected:=true;
                QueFilas:=QueFilas+DbGridOrdenes.DataSource.DataSet.FieldByName('NOrden').AsString+';';
              end;
            FilasSeleccionadas:=DbGridOrdenes.SelectedRows.Count;
          end
        else
          begin
            PrimerRegOrd:=QueryOrdenes.RecNo;
          end;
      end;
  end;
end;

Pero al hacerlo así se me mueve el listado y entonces empieza a volverse un poco loco, estoy dandole un poco de vueltas a ver si le saco punta.

Saludos.
Responder Con Cita
  #3  
Antiguo 18-05-2011
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 21
ElDioni Va por buen camino
Buenos días,

al final he optado por la opción cobarde, he puesto el componente SMDBGrid que tiene la propiedad eoKeepSelection que deja seleccionados los registros seleccionados (valga la redundancia) aunque pinches fuera de uno de ellos, he tenido que poner un código en el OnMouseDown para que se deseleccionen los registros si he pinchado en alguno que no estuviera seleccionado.

Código Delphi [-]
procedure TFrmMenuArt.DBGridOrdenesMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if button=MBLeft then
  begin
    if (pulsada<>17)AND(pulsada<>16)then
      begin
        if DbGridOrdenes.SelectedRows.CurrentRowSelected=false then
          begin
            DbGridOrdenes.SelectedRows.Clear;
          end;
      end;
    DbGridOrdenes.BeginDrag(false,10);
    LblNOrden.Caption:=FrmMenuArt.QueryOrdenes.fieldbyname('NOrden').AsString;
  end;

end;

Si no había utilizado este componente antes es porque al poner el ReadOnly a true no te deja seleccionar una parte de texto de un registro con el que yo, posteriormente, hacía filtros por selección o excluyendo la selección, lo que he hecho es dejar el ReadOnly a false y en el OnKeyDown del SMDBGrid he controlado que no esté pulsado ni el control ni las mayusculas ni el alt y pongo el key:=0, así no se puede modificar el registro.

Gracias a todos por su tiempo.

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
MultiSelect con maýusculas en DBGrid ElDioni OOP 0 24-11-2009 13:14:46
Contenido de un DBGrid en MultiSelect mrnovice OOP 7 20-01-2009 18:34:30
MultiSelect en DBGrid con Shift gluglu OOP 0 01-06-2007 02:22:04
Dbgrid y Multiselect jorge_mosquera OOP 3 26-04-2007 03:22:41
Multiselect con celdas en DBGrid??? Jonnathan OOP 0 26-09-2006 20:38:02


La franja horaria es GMT +2. Ahora son las 04:00:52.


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