Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
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 07-01-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Creo que no vale, el problema es que almacena en un string los números que ya ha presentado para saber con qué color presentarlo, para ello hay que recorrer desde el principio hasta el final todos los registros. Si por ejemplo vas directamente al último con ctrl+fin entonces no guarda esos valores y no puede pintarlos.
Tienes razón. De hecho, ni conocía -o ya se me había olvidado- ese acceso por teclado (CRTL + END). Habrá que modificar el código entonces. Teniendo en cuenta lo que has dicho, podría almacenarse los número al momento de cambiar el registro actual. No sé exactamente como se haría esto, pero debe haber alguna forma de hacerlo.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #2  
Antiguo 07-01-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por rgstuamigo
[..] invalidate [..]
He probado 3 alternativas y con el invalidate y sin él... hace lo mismo


Cita:
Empezado por Chris Ver Mensaje
Tienes razón. De hecho, ni conocía -o ya se me había olvidado- ese acceso por teclado (CRTL + END).
Está duro de roer el hueso

Cita:
Empezado por cloayza Ver Mensaje
Una pequena optimizacion de codigo que propuse anteriormente.
Nada, acaba alternando colores incorrectamente.

Responder Con Cita
  #3  
Antiguo 08-01-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 947
Poder: 25
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Nada, acaba alternando colores incorrectamente.
Amigo he implementado el codigo en ejemplo de Chris, y me anda de maravillas...

Te copio el codigo completo de la unidad.

Código Delphi [-]
unit Unit24;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, IBCustomDataSet, IBDatabase, StdCtrls, ComCtrls, Grids, DBGrids;

type
  TForm24 = class(TForm)
    gr1: TDBGrid;
    DS1: TDataSource;
    dtp1: TDateTimePicker;
    lb1: TLabel;
    btn1: TButton;
    DB1: TIBDatabase;
    TR1: TIBTransaction;
    QR1: TIBDataSet;
    QR1CODIGOAPUNTE: TIntegerField;
    QR1CODIGOEMPRESA: TIntegerField;
    QR1EJERCICIO: TSmallintField;
    QR1NUMEROASIENTO: TIntegerField;
    QR1LINEAASIENTO: TIntegerField;
    QR1FECHAASIENTO: TDateField;
    QR1CODIGOCUENTA: TIBStringField;
    QR1CONCEPTO: TIBStringField;
    QR1DEBE: TFloatField;
    QR1HABER: TFloatField;
    QR1FECHACREACION: TDateField;
    QR1HORACREACION: TTimeField;
    procedure btn1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure gr1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure dtp1Exit(Sender: TObject);
  private
    { Private declarations }
{    nValorAnt: Integer;
    FColor, BColor: TColor;
    UltimoValor: Variant;
    BoolSwitch: Boolean;
    GrupoImpar: String;
}
  public
    { Public declarations }
    Sombra:Boolean;
    List:TStrings;
  end;

var
  Form24: TForm24;

implementation

{$R *.dfm}

procedure TForm24.btn1Click(Sender: TObject);
begin
  db1.Open;
  tr1.Active:=True;
  qr1.Close;
  qr1.selectsql.text := 'select * from tbapuntes where codigoempresa=2 and ejercicio=2 and codigoestadoapunte=2 '+
                        'and fechaasiento  between :fechadesde and :fechahasta '+
                        'order by codigoempresa, ejercicio, numeroasiento, lineaasiento';
  qr1.Params[0].AsDate := dtp1.Date;
  qr1.Params[1].AsDate := dtp1.Date;

  if Assigned(List) then
     List.Clear;

  // inicializar los datos del control de grupo
  qr1.Open;
  gr1.SetFocus;
end;

procedure TForm24.dtp1Exit(Sender: TObject);
begin

  btn1.SetFocus;
end;

procedure TForm24.FormClose(Sender: TObject; var Action: TCloseAction);
begin
     DB1.Close;
end;

procedure TForm24.gr1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
   index:Integer;
   fColor:TColor;
begin
      if Not Assigned(List) then
         List:=TStringList.Create;

      with TDBGrid(Sender) do
      begin
         if (gdFocused in State) then
         begin
            Canvas.Font.Color := clWhite;
            Canvas.Brush.Color := clHighlight;
         end
         else
         begin
              Index:=List.IndexOf(DataSource.DataSet.FieldByName('NUMEROASIENTO').AsString);
              if Index=-1 then
              begin
                   if Sombra then fColor:=clYellow  else fColor:=clInfoBk;

                   //fColor:=RGB(Random(205),Random(205),Random(205));

                   index:=List.AddObject(Datasource.Dataset.FieldByName('NUMEROASIENTO').AsString, Pointer(fColor));

                   Sombra := not Sombra;
              end;

              Canvas.Font.Color := clBlack;
              Canvas.Brush.Color := TColor(List.Objects[index]);

              DefaultDrawColumnCell(Rect, DataCol, Column, State);
          end;
      end;
end;

end.

Saludos cordiales
Responder Con Cita
  #4  
Antiguo 08-01-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por cloayza Ver Mensaje
Amigo he implementado el codigo en ejemplo de Chris, y me anda de maravillas...
Te copio el codigo completo de la unidad.
Saludos cordiales

Me sigue saliendo mal en el mismo sitio que antes :

Responder Con Cita
  #5  
Antiguo 08-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 24
Aleca Va por buen camino
ahora si.
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  Query.Open;
end;
 
procedure TForm1.QueryAfterOpen(DataSet: TDataSet);
var
  nValorAnt: Integer;
  lColor: Boolean;
begin
  nValorAnt := 0;
  lColor := False;
  mTabla.Open;
  while not Query.Eof do
  begin
    if QueryID_GRUPO.AsInteger <> nValorAnt then
    begin
      nValorAnt := QueryID_GRUPO.AsInteger;
      lColor := not lColor;
      mTabla.Append;
      mTablaAsiento.Value := nValorAnt;
      mTablaCOLOR.Value := lColor;
      mTabla.Post;
    end;
    Query.Next;
  end;
  mTabla.SortOnFields('ASIENTO');
  Query.First;
  Grilla.DataSource := DataSource1;
end;

 
procedure TForm1.GrillaDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  FColor, BColor: TColor;
begin
  if mTabla.Locate('ASIENTO', QueryID_GRUPO.AsInteger, []) then  //      nColor
    if mTablaCOLOR.AsBoolean then
    begin
      FColor := clWhite;
      BColor := clGreen;
    end
    else
    begin
      FColor := clBlack;
      BColor := clWhite;
    end;
  TJvDBUltimGrid(Sender).Canvas.Font.Color := FColor;
  TJvDBUltimGrid(Sender).Canvas.Brush.Color := BColor;
  TJvDBUltimGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
...
con una tablita auxiliar, funciona, no se si te será practico o no.
estoy convencido que la mosca la mate, ahora no se como te quedo la casa

Saludos.
__________________
Aleca
Responder Con Cita
  #6  
Antiguo 08-01-2011
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
jaja... eso es trampa

He estado probando a fondo las distintas metodologías que se han propuesto y todas terminan por "fallar" en alguna condición, aunque es cierto que "casi no se enteraría nadie" y no le darían mucha importancia, pero si se quiere hacer las cosas bien entonces he tenido que desestimar todas las que usan el método de controlar los registros anteriores y similares. Simplemente no pueden funcionar, por lógica, salvo que el usuario se mueva de principio a fin con las teclas, registro a registro, y eso no suele ser lo más habitual en este caso, ya que es el grid de consulta principal del programa y además donde se validarán los registros que se "dan por buenos", en fin, que va a ser seguramente lo más muy usado del programia.
Creo que ha quedado demostrado que la única opción totalmente segura y válida para esta tarea es que en el propio registro se tenga un campo o dato del que se extraiga el color, así es independiente por completo de los movimientos que haga el usuario por el grid, use tecla o ratón, haga lo que haga. Siempre se pintará el registro con los datos extraidos de sí mismo, no hay error.
Pensé de hacerlo con una tabla en memoria pero no me convencía porque tras hacer el select había después que pasar los datos a esa tabla, no sólo por el tiempo (que es rápido normalmente) sino también por consumo de memoria ram y porque habría que traerse todos los registros, y esto es algo que nunca me ha gustado hacer.
Finalmente he optado por el método de la base de datos, concretamente es un Store Procedure que además de los campos del registro se trae también un campo 'color'.
No es tampoco lo que me hubiese gustado hacer porque son muchos filtros los que puede usar el usuario y hay que pasarle muchos parámetros al SP, la mayoría son del tipo "si pasas este parámetro no hay que pasar el otro", así que finalmente he tenido que optar por una opción 'híbrida', desde delphi se monta la sentencia sql y se llama al SP únicamente con ese parámetro, luego en el SP se hace un 'execute statement sentencia' y listo.
He estado haciendo pruebas y de momento, por lo que he podido ver, va bien, es ágil y parece que funciona correctamente con todas las combinaciones.
Y ya está bien por hoy, que son casi las 8 de la mañana y aquí estoy todavía, ya creo que no me voy a ir a dormir, enlazaré el día... bueno, voy a prepararme un café y a asomarme a la ventana, que empieza a amanecer

Quiero dar las gracias a todos porque me ha servido para ir probando distintas modalidades y finalmente optar por la que pienso que me viene mejor. Sin vuestra ayuda hubiese tardado muchísimo más. Os debo una invitación de "tapa de jamón y cerveza"

MUCHAS GRACIAS A TODOS


p.d.: Y no doy esto por cerrado, si alguien descubre una manera fiable de hacerlo mediante la GUI... se lleva el jamón
Responder Con Cita
  #7  
Antiguo 08-01-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 25
José Luis Garcí Va camino a la fama
Casimiro se que das el tema por sanjado, pero me quedo la duda de como quedaría con la linea en el grid y la verdad me sorprendió la sencillez de la respuesta, te pongo unas imágenes y al final el código por si sirve de utilidad a algún compañero. Por cierto de momento en todas mis pruebas no me ha dado fallo.

Con linea y cinco colores



Con linea y dos colores



Con linea y sin colores




y por último el código

Código Delphi [-]

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var Linea:Integer;
begin
     Linea:=0;
     if Asiento<>DataSource1.DataSet.FieldByName('ASIENTO').AsString then
     begin
         if Column.FieldName='HABER' then  Asiento:=DataSource1.DataSet.FieldByName('ASIENTO').AsString;
         Linea:=1;
     end;
     if CheckBox3.Checked=false then
     begin
       if CheckBox1.Checked=true then
       begin
           if CheckBox2.Checked=true then
           begin
            case UlDigit(StrToInt(DataSource1.DataSet.FieldByName('ASIENTO').value)) of
                0 :ColorElegido:=ColorA;
                1 :ColorElegido:=ColorB;
                2 :ColorElegido:=ColorC;
                3 :ColorElegido:=ColorD;
                4 :ColorElegido:=ColorE;
                5 :ColorElegido:=ColorA;
                6 :ColorElegido:=ColorB;
                7 :ColorElegido:=ColorC;
                8 :ColorElegido:=ColorD;
                9 :ColorElegido:=ColorE;
            end;
           end else
           begin
            case UlDigit(StrToInt(DataSource1.DataSet.FieldByName('ASIENTO').value)) of
                0 :ColorElegido:=ColorA;
                2 :ColorElegido:=ColorA;
                4 :ColorElegido:=ColorA;
                6 :ColorElegido:=ColorA;
                8 :ColorElegido:=ColorA;
                1 :ColorElegido:=ColorB;
                3 :ColorElegido:=ColorB;
                5 :ColorElegido:=ColorB;
                7 :ColorElegido:=ColorB;
                9 :ColorElegido:=ColorB;
            end;
           end;
       end else
       begin
         if Asiento<>DataSource1.DataSet.FieldByName('ASIENTO').AsString then
         begin
           //  Asiento:=DataSource1.DataSet.FieldByName('ASIENTO').AsString;
             case SelectMiColor of          //Para invertir La Seleccion
                0:begin
                     ColorElegido:=ColorB;
                     SelectMiColor:=1;
                  end;
                1:begin
                     ColorElegido:=ColorA;
                     SelectMiColor:=0;
                  end;
             end;
         end;
       end;
       DBGrid1.Canvas.Brush.Color := ColorElegido;
       Dbgrid1.Canvas.FillRect(Rect);
       dbGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
     end;
     if Linea=1 then
     begin
         DBGrid1.Canvas.Pen.Color:=clNavy;
         DBGrid1.Canvas.Pen.Width:=3;
         DBGrid1.Canvas.MoveTo(Rect.Left, Rect.Top+1);
         DBGrid1.Canvas.LineTo(Rect.Right, Rect.Top+1);
     end;
end;
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"

Última edición por José Luis Garcí fecha: 08-01-2011 a las 10:38:11.
Responder Con Cita
  #8  
Antiguo 08-01-2011
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 16
pacopenin Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
jaja... eso es trampa

He estado probando a fondo las distintas metodologías que se han propuesto y todas terminan por "fallar" en alguna condición, aunque es cierto que "casi no se enteraría nadie" y no le darían mucha importancia, pero si se quiere hacer las cosas bien entonces he tenido que desestimar todas las que usan el método de controlar los registros anteriores y similares. Simplemente no pueden funcionar, por lógica, salvo que el usuario se mueva de principio a fin con las teclas, registro a registro, y eso no suele ser lo más habitual en este caso, ya que es el grid de consulta principal del programa y además donde se validarán los registros que se "dan por buenos", en fin, que va a ser seguramente lo más muy usado del programia.
Creo que ha quedado demostrado que la única opción totalmente segura y válida para esta tarea es que en el propio registro se tenga un campo o dato del que se extraiga el color, así es independiente por completo de los movimientos que haga el usuario por el grid, use tecla o ratón, haga lo que haga. Siempre se pintará el registro con los datos extraidos de sí mismo, no hay error.
Pensé de hacerlo con una tabla en memoria pero no me convencía porque tras hacer el select había después que pasar los datos a esa tabla, no sólo por el tiempo (que es rápido normalmente) sino también por consumo de memoria ram y porque habría que traerse todos los registros, y esto es algo que nunca me ha gustado hacer.
Finalmente he optado por el método de la base de datos, concretamente es un Store Procedure que además de los campos del registro se trae también un campo 'color'.
No es tampoco lo que me hubiese gustado hacer porque son muchos filtros los que puede usar el usuario y hay que pasarle muchos parámetros al SP, la mayoría son del tipo "si pasas este parámetro no hay que pasar el otro", así que finalmente he tenido que optar por una opción 'híbrida', desde delphi se monta la sentencia sql y se llama al SP únicamente con ese parámetro, luego en el SP se hace un 'execute statement sentencia' y listo.
He estado haciendo pruebas y de momento, por lo que he podido ver, va bien, es ágil y parece que funciona correctamente con todas las combinaciones.
Y ya está bien por hoy, que son casi las 8 de la mañana y aquí estoy todavía, ya creo que no me voy a ir a dormir, enlazaré el día... bueno, voy a prepararme un café y a asomarme a la ventana, que empieza a amanecer

Quiero dar las gracias a todos porque me ha servido para ir probando distintas modalidades y finalmente optar por la que pienso que me viene mejor. Sin vuestra ayuda hubiese tardado muchísimo más. Os debo una invitación de "tapa de jamón y cerveza"

MUCHAS GRACIAS A TODOS


p.d.: Y no doy esto por cerrado, si alguien descubre una manera fiable de hacerlo mediante la GUI... se lleva el jamón
Estoy con Casimirro.
Desde el primer momento me pareció que la solución estaba en tener la infomación en los registros. No he tenido tiempo de pensar en código ni de probar las soluciones que se daban.
Valoré, en un primer momento la posibilidad de las tablas en memoria, pero lo descarté por las mismas razones, y que en entornos multipuesto pueden llegar a "mentir" bastante (si no se recargan convenientemente).
Desde mi punto de vista, una solución que no debe costar (ni tiempo ni dinero, creo que era una premisa) es válida si no es demasiado mala. Es decir, que a veces, pequeñas "trampas" son necesarias en busca de la productividad.
En este caso, con el Store Procedure, si hay pocos puestos, no creo que la pérdida de rendimiento sea significativa. Y si hay muchos, probablemente habrá recursos suficientes para tomar medidas (unas pocas horas más para hacer pruebas, o gastar un poco de dinero en "algo" que lo resuelva).
No defiendo el todo vale mientras funcione. Pero en entornos empresariales, hemos de optimizar sobre todo el tiempo. Si necesito 10-12 horas para resolver un tema como este, me compensa más comprar un componente (que no se si lo hay) de 300 €, que además me dará otras ventajas que no tengo en un grid normal.
El código (o la solución en general), es mejor o peor si se puede comprobar que en situaciones similares, ofrecen respuestas distintas. Si el resultado es similar (tiempo de respuesta, uso de CPU y/o memoria, etc) ambos son válidos como solución. Otra cosa es comparar códigos fuente, horas de programación, legibilidad, etc.

Todo esto son opiniones personales y no afirmaciones categóricas.

Saludos,
__________________
http://www.gestionportable.com
Responder Con Cita
  #9  
Antiguo 07-01-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Chris Ver Mensaje
Tienes razón. De hecho, ni conocía -o ya se me había olvidado- ese acceso por teclado (CRTL + END). Habrá que modificar el código entonces.
Es que no sólo es eso. Hay muchas formas de desplazarse por un DBGrid. De entrada puedes arrastrar el botón de la barra de desplazamiento a una posición arbitraria, o puedes moverte por código, por ejemplo, mediante una búsqueda, etc.

El evento DrawColumnCell existe porque en la práctica es casi imposible predecir cuales celdas han de dibujarse. Por ello es que considero que cualquier técnica que recurra a una suerte de "último valor" fallará tarde o temprano pues presupone un pintado secuencial de las filas, cosa que no siempre se dará de esa manera.

// Saludos
Responder Con Cita
  #10  
Antiguo 08-01-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Cita:
Empezado por Chris Ver Mensaje
No pensaba en contestarte xq era desvirtuar el hilo. Pero has sido demaciado tosco y necesito contestar tus desagradables palabras.
Bien merecido lo tengo, y si... me pasé de las manos. Era mi total intención llamarte la atención.

Cita:
Empezado por Chris Ver Mensaje
Creo que lo que a tí te molesta es una opinión contraria a tus ideas.
No tengo problemas en que se me critique mis ideas. No lo que no pienso tolerar en una persona es pretender acabar un buen debate y discusión exponiendo púlblicamente la frase "¡Y punto!" o similar. Al decirlo ya pretendiste dar por acabado todo intento de negociar o de analizar otras perspectivas.

Y voy a seguir insistiendo... punto final no se vale ganar... yo también puedo ser muy infantil y bien gallego.

Y si te quiero llamar la atención lo voy a hacer a mi estilo cómico, y de mal humor... ¿A poco te no agrada NewDelphius? Ba... pensé que lo extrañaban por aquí.

[quote=Chris;386915]
No critique a cada una de las personas que propuso una solución, hay muchas soluciones propuestas si te fijas en todo el hilo. Critiqué, no solo la solución propuesta por Roman y desarrollada por tí, sino todas las que usen de muleta a la base de datos.
[quote]
A veces nos vemos obligados a emplear esas muletas Cris... entiende eso de una vez.
El que se hace UNA VEZ en todo el sistema no es un gran pecado... ¡entendelo! abrí un poco la cabeza.

Si prestaras atención te darás cuenta que inicialmente yo le estaba dando vueltas por el lado cliente. Y luego viendo como se estaba dando el hilo y aprovechando una SUGERENCIA de roman es que me tomé la buena volutad de seguir por ese lado y ver que más hay.

Soy yo y otros usuarios quienes impulsados por traer nuevas visiones, propuestas y alternativas no nos queremos quedar en un sólo lado.

Y disculpa que lo diga pero no por utilizar esas "salidas fáciles" nos hace ser muletas.

Cita:
Empezado por Chris Ver Mensaje
Las critico (en el mejor sentido de la palabra) y lo seguiré haciendo.
Actitudes cerradas la podemos tener todos, aunque reconozco que no eres la persona más cerrada... mi padre te lleva mucha ventaja.

Ojalá Cris no te vea por aquí tratando de darle un giro a tus ideas y desafiar tu postura... sería un duro golpe darle un repaso al archivo de tus palabras.

Te aviso que el tiempo es un buen maestro de que nuestras visiones pueden (y van) a cambiar.

Yo soy bastante crítico, pero al menos dejo un espacio a la posibilidad de un arreglo y de ser un poco más abierto o de darle una posibilidad de que me cautive y se defienda. Tu por parte cerraste las puertas ni bien al comienzo de haber dado la propuesta a Casimiro.

Cita:
Empezado por Chris Ver Mensaje
Creo que mi critica no fue en mal modo, si te fijas, eres el único que la ha tomado a mal. Te has ahogado en un vaso de agua sinceramente.
Si lo fue. Yo no voy a permitir que un usuario, sea quien sea, nos haya llamado en forma indirecta, y con cierta soberbia, ineficientes.

Lee tu frase por favor:
Cita:
Empezado por Chris
o es muy buena idea que la base de datos funcione de muleta de un programador que no pudo solucionar un problema de la GUI
Caratulas a un desarrollador de rengo, inepto... que no pudo hacer solucionar un problema sencillo de la GUI.
Ese es el mensaje que transmite tus palabras... Deberías saber que significa llamar a alguien de/usar muletas: rengo, mula, tonto. Obstinado, tosco, grosero.

Llamaste de muletas a Casi, Roman, a mi, y a fjcg02 cuando empezamos a darle una nueva posibilidad. Nos tiraste y sentenciaste en la cara con tu punto final.

Eso no lo voy a permitir.

Yo si he sido muleta en la forma de dirigirme hacia tí, pero no en el hilo al probar otras alternativas.

Cita:
Empezado por Chris Ver Mensaje
Sabes leer, pero no interpretar. Casimiro hizo lo correcto, vino a pedir ayuda a otros programadores.
Si, ¡y le tiras en la cara de que no pudo resolver un problema y debe recurrir a una muleta porque es rengo!
Eso no es apropiado Cris.
El vino porque tiene un problema, de no tenerlo no hubiera dicho nada. Tu estuviste de más al meter la muleta.

Ojalá no te veas envuelto en una.

Cita:
Empezado por Chris Ver Mensaje
Si así lo quieres ver desde tu distorsionada perspectiva.... allá tú. El que se pretende con aires de superioridad eres tú.
Yo no vine con aires de galantería ni superioridad. Estoy seguro de que aquí en ClubDelphi hay personas que saben muchísimo más que yo.
De que se, se... algo se. Muchísimo no... poco... no sabría decirlo. Pero no puedo ni me atrevería de llamar muletas a otro.

Cita:
Empezado por Chris Ver Mensaje
No toleras la más mínima critica a tus opiniones o en este caso, a tu manera de solucionar las cosas.
Admito que puedo llegar a ser intolerante en algunas cosas pero en esto no.
Repito que eres tu el que ha sido intolerante: no toleraste la nueva propuesta que se estaba analizando... repito de nuevo: tu sentenciaste... tu dictaste... tu quisiste poner punto final.

A todo eso yo es que le quiero poner punto final.

Cita:
Empezado por Chris Ver Mensaje
No programo desde ayer, sé que es KISS. Yo creo que lo único que sabes es que KISS es la abreviación de "Keep it simple stupid", más no sabes lo que eso conlleva. Puedes aprenderlo aquí.
A ver cris, no me vengas pretender enseñarme lo que significa. Senalé el principio KISS para apuntar que a veces es mejor optar por ciertas simplezas sabiendo que hay otros factores que tu no estabas considerando: entre ellos, que Casimiro está presionado para tenerlo para ayer, que no tiene presupuesto para mucho, que el enfoque que tu estabas dando estaba demostrando no ser el más adecuado.

Se te indicó que había una serie de problemas y tu le seguías dando... eres tu el que se ha sido insistente.

No supiste ver que había algo más que se tenía en cuenta... Y la propuesta KISS de por el lado de la base de datos si bien puede que no sea lo más adecuado al menos podría traer algo de equilibrio y permitiría salir de prisas.

Luego, podría destinar tiempo, para una siguiente versión, o mejora al sistema analizarlo con otras perspectivas.

Cita:
Empezado por Chris Ver Mensaje
Si no sabías, hay otra regla en el desarrollo de software: NO DES NADA POR SENTADO. Deberías tenerla siempre en cuenta porque es una de la más importantes.
Una de las más importante pero no la más importante.
Si no hay nada que dejar por sentado... entonces creo yo que te deberías comer esas palabras: diste por sentado, sentenciaste de que habrá problemas de perfomance con el SP. ¿Tienes los suficientes elementos como para afirmar con total certeza de que el SP le será muy lento, que sus usuarios se quejarán?

Deja eso a Casi... tu que quedaste sentado, encerrado en la idea del cliente, en verlo por el lado del swich booleano, de compararlo con una variable "anterior".

Pero te viste muy "lerdo" al no captar de que la solución que tu proponías no estaba correcta.

Me alegra de que insistieras en tus ideas, de que buscaras mejorar tu código pero te veníamos diciendo de una u otra forma que hacía falta algo más.

TU diste por sentado algunas cosas...

Cita:
Empezado por Chris Ver Mensaje
Creo que en esa frase te estás reflejando tú. Te juro que no me siento aludido.
Error, te reflejaste tú. Ti diste el punto final hace tiempo... te lo voy a hacer recordar. ¿Viste de feo que alguien te lo diga?
A mi no me afecta en lo más mínimo... yo más que nada te lo señalo para que en lo sucesivo sea más cuidadoso cuando pretendas callar a alguien diciéndole "Punto".

Las palabras te van a rebotar, yo no le voy a seguir dando al debate... No tiene sentido discutir más.... Ya te dije lo que te debía decir, pero te digo que pueden venir otros a decirte que ese "Punto" estuvo de más.

Si no te lo dijeron los demás, no quiere decir que se pueda pasar. Yo al menos no lo iba dejar pasar... Porque al tema lo veníamos tratando bien. Si tu lo querías cerrar, consideré bueno hacerte llamar la atención de que el tema todavía estaba abierto.

Te aviso Cris que no es la primera vez que veo en ti la idea de dar esas estocadas finales.... y no es la primera vez tampoco que intentas pasar de "fino" una indirecta como muletas. En ese entonces no me ví en esos hilos... pero a esta no la dejo pasar.

Saludos,
PD: Disculpen que metiera dervirtuadas al hilo.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #11  
Antiguo 08-01-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Cómo se traduce esta línea a:
if (@asiento <> asiento, @colorear:=1-@colorear, @colorear) as colorear, @asiento:=asiento

if @asiento<>asiento then
@colorear = 1-@colorear
else
@asiento = @colorear;
@asiento = asiento;

Supongo que @loquesea quiere decir que es una variable.
Eefectivamente Casimiro. Es la traducción correcta.
Y el @ es para simbolizar y declarar una variable.... al igual que en MS SQL Server.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #12  
Antiguo 08-01-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
La idea de tener una Lista, a modo de campo ficticio como el campo "Colorear" o la idea de un campo en el DBGrid y que no se muestre para que almacena un número identificador del color debería funcionar.

A como veo, es necesario tener una lista o una estructura, o algo por el estilo, que lleve la referencia sobre el color al pintar. No basta con aplicar técnica de comparación con valores anteriores, o siguientes... hay que verlo globalmente: como un conjunto de registros.

Supuestamente, de ese modo en el evento OnDrawColumnCell se podría consultar dicho valor con algo como Lista[DBGrid.RecNo] y si es 0,1,2 o lo que fuese pintar de un color a otro.

En teoría por más que se dezplazara por los registros, al consultar el RecNo (sabiendo que en la lista estarán todos los registros devueltos por la consulta) se debería poder recuperar el valor correcto y pintar de forma inequívoca la fila.

Es fundamental que exista un proceso que se encargue de analizar el conjunto de datos previamente y llenar la lista con los valores adecuados.
Una vez hecho esto recién ya es posible pintar.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
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
Alternar dos colores en las lineas de un DBGrid. jealousy OOP 4 07-05-2014 15:45:23
colores en un dbgrid frf_84 Gráficos 2 07-12-2004 12:14:57
dbgrid con colores Giniromero Conexión con bases de datos 7 08-07-2004 16:26:29
dbgrid en colores sebas Conexión con bases de datos 2 09-07-2003 09:16:14
Colores en una DBGrid REDCOM Varios 2 26-05-2003 20:42:58


La franja horaria es GMT +2. Ahora son las 21:00:51.


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