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-05-2006
CamiloU CamiloU is offline
Miembro
 
Registrado: dic 2005
Ubicación: Sincelejo - COlombia
Posts: 59
Poder: 19
CamiloU Va por buen camino
Alineación en StringGrid

Quisiera saber si es posible alinear en forma independiente las columnas de un StringGrid, por ejemplo, los datos de la columna 1 centrados, la columna 2 a la izquierda y la columna 3 a la derecha.

Aprovecho para otra pregunta. Si en alguna de las columnas del StringGrid manejo valores es posible que me haga separación de miles con punto?

Muchas gracias.
Responder Con Cita
  #2  
Antiguo 10-05-2006
Acanol Acanol is offline
Miembro
 
Registrado: abr 2006
Ubicación: Elche
Posts: 75
Poder: 19
Acanol Va por buen camino
Muy buenas Camilou, no te lo tomes a mal pero podrias molestarte en buscar un poco antes de hacer la pregunta, ya que es un tema que se ha tratado y no pocas veces en este foro.

En este hilo y en este otro.

Espero te sirvan de ayuda.

Un saludo.

//Antes de formular preguntas, intetemos encontra nosotros la respuesta
//Todos los dias se aprende algo, Por que no enseñarlo nosotros¿?

Responder Con Cita
  #3  
Antiguo 10-05-2006
CamiloU CamiloU is offline
Miembro
 
Registrado: dic 2005
Ubicación: Sincelejo - COlombia
Posts: 59
Poder: 19
CamiloU Va por buen camino
No lo tomo a mal, al contrario, muchas gracias por la colaboracion y tienes razon en lo de la busqueda. Di un primer vistazo y no encontre el tema y no profundice la busqueda.

Respecto a la segunda pregunta, tienes alguna idea?
Responder Con Cita
  #4  
Antiguo 10-05-2006
Acanol Acanol is offline
Miembro
 
Registrado: abr 2006
Ubicación: Elche
Posts: 75
Poder: 19
Acanol Va por buen camino
Buenas, me alegro de que te sirvan los hilos,si solamante quieres poner los puntos para indicar que son miles (sin tener que hacer calculos luego), se podria hacer una funcion que introdujese un punto en determinadas posiciones, yo tngo una funcion que elimina los espacios en blanco supongo que se podria hacer algo asi pero para poner los puntos. Si te parece bien lo miro y te digo si consigo algo.
__________________
{Saludos.}

//Todos los dias se aprende algo nuevo, por que no enseñar nosotros?
Responder Con Cita
  #5  
Antiguo 10-05-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por CamiloU
Si en alguna de las columnas del StringGrid manejo valores es posible que me haga separación de miles con punto?
Debes formatear ese valor para que se visualice con puntos en los miles.
Busca en la ayuda de Delphhi "Format function"; en la parte inferior de la pantalla tienes información sobre "Format Strings".

Revisa la opción m (para Money) que te formateará el correspondiente número utilizando los separadores definidos por la variables ThousandSeparator y DecimalSeparator.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 01-06-2006
CamiloU CamiloU is offline
Miembro
 
Registrado: dic 2005
Ubicación: Sincelejo - COlombia
Posts: 59
Poder: 19
CamiloU Va por buen camino
Segui el procedimiento que encontre en otro hilo, pero no me funciona. Me podrían indicar donde esta el error. Anexo el codigo.

Código Delphi [-]
procedure TComPagoDetalleACD.IngresosDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
   if ACol = 0 then
      Display(Ingresos, Ingresos.Cells[ACol,ARow], taCenter);
  if ACol = 2 then
      Display(Ingresos, Ingresos.Cells[ACol,ARow], taRightJustify);
end;

procedure TComPagoDetalleACD.WriteText(StringGrid: TStringGrid; ACanvas: TCanvas; const ARect: TRect;
     const Text: string; Format: Word);
const
  DX = 2;
  DY = 2;
var
  S: array[0..255] of Char;
begin
  with Stringgrid, ACanvas, ARect do
    begin
      case Format of
          DT_LEFT: ExtTextOut(Handle, Left + DX, Top + DY,
             ETO_OPAQUE or ETO_CLIPPED, @ARect, StrPCopy(S, Text), Length(Text), nil);
          DT_RIGHT: ExtTextOut(Handle, Right - TextWidth(Text) - 3, Top + DY,
             ETO_OPAQUE or ETO_CLIPPED, @ARect, StrPCopy(S, Text),
             Length(Text), nil);
          DT_CENTER: ExtTextOut(Handle, Left + (Right - Left - TextWidth(Text)) div 2,
             Top + DY, ETO_OPAQUE or ETO_CLIPPED, @ARect,
             StrPCopy(S, Text), Length(Text), nil);
      end;
    end;
end;

procedure TComPagoDetalleACD.Display(StringGrid: TStringGrid; const S: string; Alignment: TAlignment);
const
  Formats: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
begin
  WriteText(StringGrid, StringGrid.Canvas, B, S, Formats[Alignment]);
end;


Muchas Gracias.
Responder Con Cita
  #7  
Antiguo 01-06-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Funciona perfectamente, sólo que en lugar de B (?¿?¿) que tienes aquí (que no se de dónde sale):
Código Delphi [-]
  WriteText(StringGrid, StringGrid.Canvas, B, S, Formats[Alignment]);

debes poner el parámetro Rect.

Código Delphi [-]
  WriteText(StringGrid, StringGrid.Canvas, Rect, S, Formats[Alignment]);
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 02-06-2006
CamiloU CamiloU is offline
Miembro
 
Registrado: dic 2005
Ubicación: Sincelejo - COlombia
Posts: 59
Poder: 19
CamiloU Va por buen camino
En la declaración de variables de la Form tengo lo siguiente:
B, R: TRect;

Sin embargo, segui el consejo y me genero el siguiente error:
[Error] ComPago_DetalleACD.pas(389): There is no overloaded version of 'Rect' that can be called with these arguments.

Me podrian dar una ayuda. Muchas Gracias.
Responder Con Cita
  #9  
Antiguo 02-06-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
ARect, perdón. Debes usar el que viene como parámetro.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 02-06-2006
CamiloU CamiloU is offline
Miembro
 
Registrado: dic 2005
Ubicación: Sincelejo - COlombia
Posts: 59
Poder: 19
CamiloU Va por buen camino
No me funciona.

Presento todo el proceso. En el primer procedimiento recorro la Tabla Nomina y lleno los StringGrid (Ingresos y Descuentos) de acuerdo al tipo. Después estan los procedimientos de alineacion, pero no hace nada.

Antes de estos procedimientos es necesario realizar alguna declaración o algun paso anterior.

Código Delphi [-]
procedure TComPagoDetalleACD.MPerSelect(Sender: TObject);
var
  i, suming, sumegr : integer;
begin
  for i := 0 to Ingresos.RowCount do
      Ingresos.Rows[i].Clear;
  for i := 0 to Descuentos.RowCount do
      Descuentos.Rows[i].Clear;
  SuelDocente.Clear;
  DescDocente.Clear;
  NetoRecibido.Clear;
  pmes := MPer.Text;
  pper := concat(pmes,'/',pano);
  TNomina.First;
  cont1 := 0;
  cont2 := 0;
  suming := 0;
  sumegr := 0;
  while (Not TNomina.Eof) do
    begin
      if (TNomina.FieldByName('cedula').AsString = ceddocente) and
         (TNomina.FieldByName('periodo').AsString = pper) then
        begin
          if TNomina.FieldByName('clase').AsString = 'D' then
            begin
              Ingresos.Cells[0,cont1] := TNomina.FieldByName('codigo').AsString;
              Ingresos.Cells[1,cont1] := TNomina.FieldByName('factor').AsString;
              suming := suming + strtoint(TNomina.FieldByName('valor').AsString);
              Ingresos.Cells[2,cont1] := TNomina.FieldByName('valor').AsString;
              cont1 := cont1 + 1;
            end;
          if TNomina.FieldByName('clase').AsString = 'C' then
            begin
              Descuentos.Cells[0,cont2] := TNomina.FieldByName('codigo').AsString;
              Descuentos.Cells[1,cont2] := TNomina.FieldByName('factor').AsString;
              sumegr := sumegr + strtoint(TNomina.FieldByName('valor').AsString);
              Descuentos.Cells[2,cont2] := TNomina.FieldByName('valor').AsString;
              cont2 := cont2 + 1;
            end
        end;
      TNomina.Next;
    end;
  SuelDocente.Text := inttostr(suming);
  DescDocente.Text := inttostr(sumegr);
  NetoRecibido.Text := inttostr(suming - sumegr);
end;

procedure TComPagoDetalleACD.IngresosDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if ACol = 0 then
      Display(Ingresos, Ingresos.Cells[ACol,ARow], taCenter);
  if ACol = 2 then
      Display(Ingresos, Ingresos.Cells[ACol,ARow], taRightJustify);
end;

procedure TComPagoDetalleACD.WriteText(StringGrid: TStringGrid; ACanvas: TCanvas; const ARect: TRect;
     const Text: string; Format: Word);
const
  DX = 2;
  DY = 2;
var
  S: array[0..255] of Char;
begin
  with StringGrid, ACanvas, ARect do
    begin
      case Format of
          DT_LEFT: ExtTextOut(Handle, Left + DX, Top + DY,
             ETO_OPAQUE or ETO_CLIPPED, @ARect, StrPCopy(S, Text), Length(Text), nil);
          DT_RIGHT: ExtTextOut(Handle, Right - TextWidth(Text) - 3, Top + DY,
             ETO_OPAQUE or ETO_CLIPPED, @ARect, StrPCopy(S, Text),
             Length(Text), nil);
          DT_CENTER: ExtTextOut(Handle, Left + (Right - Left - TextWidth(Text)) div 2,
             Top + DY, ETO_OPAQUE or ETO_CLIPPED, @ARect,
             StrPCopy(S, Text), Length(Text), nil);
      end;
    end;
end;

procedure TComPagoDetalleACD.Display(StringGrid: TStringGrid; const S: string; Alignment: TAlignment);
const
  Formats: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
begin
  WriteText(StringGrid, StringGrid.Canvas, ARect, S, Formats[Alignment]);
end;

Muchas gracias y peronen por tanta molestadera.
Responder Con Cita
  #11  
Antiguo 03-06-2006
CamiloU CamiloU is offline
Miembro
 
Registrado: dic 2005
Ubicación: Sincelejo - COlombia
Posts: 59
Poder: 19
CamiloU Va por buen camino
Queria comentarles que encontre en la red otro procedimiento y me funciono a la perfección. Anexo el código para la persona que lo necesite.

Otra cosa. Muchas gracias a las personas que me colaboraron, especialmente Neftaly, por el interes y la paciencia.

Código Delphi [-]
procedure TComPagoDetalleACD.IngresosDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  Grid : TStringGrid;
  Texto : String;
begin
  Grid := TStringGrid(Sender);
  Grid.Canvas.FillRect(Rect);
  Texto := Grid.Cells[ACol,ARow];
  if ACol = 0 then DrawText(Grid.Canvas.Handle, PChar(Texto), StrLen(PChar(Texto)), Rect, DT_CENTER);
  if ACol = 1 then DrawText(Grid.Canvas.Handle, PChar(Texto), StrLen(PChar(Texto)), Rect, DT_LEFT);
  if ACol = 2 then DrawText(Grid.Canvas.Handle, PChar(Texto), StrLen(PChar(Texto)), Rect, DT_RIGHT);
end;
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
alineacion de un memo Choclito Varios 5 02-05-2006 08:24:46
StringGrid, colores y alineación Alexander Varios 5 17-11-2005 01:15:11
Alineación en Edit rbeltran Varios 1 28-01-2005 17:01:11
Alineación de controles roman OOP 9 24-08-2004 00:00:57
alineacion de 2 StringGrid miguel_fr OOP 6 17-06-2004 15:50:09


La franja horaria es GMT +2. Ahora son las 18:15:52.


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