FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
hola Neftali
Cita:
|
#2
|
|||
|
|||
HOla, no tengo delphi a la mano, pero ésta es una idea de cómo podría ser:
Guarda la información en un arreglo de dos dimensiones:
Cuando selecciones la celda en el grid cambias el estado en el arreglo
Cuando verifiques si se tiene que resaltar consultas el arreglo
Última edición por ecfisa fecha: 09-07-2015 a las 23:35:47. Razón: Corregir error WYSIWYG |
#3
|
||||
|
||||
Cita:
Si marcas 2 días inhabiles en un mes, debes tenerlos almacenados en algún sitio, de forma que luego cuando pintes el grid (en el evento DrawCell) debes consultar esos días y pintarlos. En el pintado de cada celda del stringgrid se debe hacer una consulta a la estructura, y si la celda que se está dibujando corresponde a un día inhabil, entonces debes pintarla. ¿Cómo se guardan esos días? ¿Qué estructura estás utilizando? ¿Qué función estás utilizando en el OnDrawColumnCell -o similar-?
__________________
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. |
#4
|
||||
|
||||
Hola El_Chava.
Como te comenta Neftali todo puede variar según programes la estructuración de los datos. Te pongo una idea de tantas en que podrías realizarlo. El ejemplo hace uso del mouse tanto para la elección única como múltiple de días y usa un PopupMenu cuyos ítems ponen el día o la selección en día feriado o laboral. Por la imágen que adjuntaste pareciera que usas 12 StringGrids, el ejemplo usa uno solo (StringGridEnero), pero es muy simple modificarlo para que funcione con los restantes.
Muestra: Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#5
|
|||
|
|||
Hola ecfisa, Neftali y tmsanchez primeramente muchas gracias por responder. Al fin logre lo que quería hacer y era que por el momento solo me marcaran los días en el stringGrid antes de guardarlos en la base de datos.Investigando por la red(y claro en el foro) encontre ejemplos y los adapte a los requerimientos que necesitaba Les dejo el código espero le sean de utilidad. Saludos.
procedimientos Código:
procedure seleccionar_dia(X, Y: Integer;StrMes:TStringGrid); var aCol, aRow :integer; p:TPoint; begin with FrmCalendarioOficial do begin StrMes.MouseToCell(X, Y, aCol, aRow); StrMes.Row := aRow; StrMes.Col := aCol; p := StrMes.ClientToScreen(Point(x,y)); PopupMenu1.popup(p.x, p.y); end; end; procedure celda_seleccionada(Sender: TObject); var aRect:TRect; begin with TStringGrid(sender) do begin aRect:= CellRect(Col,Row); if Cells[Col,Row]<>'' then begin Objects[Col, Row] := TObject(clSilver); Canvas.Brush.Color := TColor(Objects[Col, Row]); Canvas.FillRect(aRect); Canvas.Font.Color := clBlack; Canvas.TextOut(aRect.Left+2, aRect.Top+2, Cells[Col, Row]); end; end; end; Código:
procedure TFrmCalendarioOficial.FormCreate(Sender: TObject); var c, f: Integer; begin with StrEnero do begin for c := FixedCols to ColCount-1 do for f := FixedRows to RowCount-1 do begin Objects[c, f]:= TObject(clWhite); // color por defecto end; end; end; Código:
procedure TFrmCalendarioOficial.StrEneroDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); begin with TStringGrid(Sender) do begin if (ARow >= FixedRows) then begin if ((gdSelected in aState) and (Cells[Acol,Arow]<>'')) then Canvas.Brush.Color := clHighlight else Canvas.Brush.Color := TColor(Objects[ACol, ARow]); Canvas.FillRect(aRect); Canvas.Font.Color := clBlack; Canvas.TextOut(aRect.Left+2, aRect.Top+2, Cells[ACol, ARow]); end; end; end; Código:
procedure TFrmCalendarioOficial.StrEneroMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var aCol, aRow :integer; p:TPoint; begin with TStringGrid(Sender) do begin MouseToCell(X, Y, ACol, ARow); case Button of // mbLeft :seleccionar_dia( X, Y,StrEnero); mbRight: seleccionar_dia( X, Y,StrEnero); end; end; end; Código:
procedure TFrmCalendarioOficial.MenudiainhabilClick(Sender: TObject); begin if strEnero.Focused then celda_seleccionada(StrEnero); end; |
#6
|
||||
|
||||
Podrías subir tu proyecto o el formulario donde hiciste eso, estoy necesitando algo parecido, te agradecería que me colaboraras. Gracias.
Última edición por Casimiro Notevi fecha: 17-10-2017 a las 22:22:33. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Validar Calendario Días Habiles | mantraxer21 | Varios | 2 | 05-11-2014 21:27:29 |
diferencia de dias , suponiendo que los meses son de 30 dias. | ingabraham | Varios | 30 | 12-09-2010 22:37:48 |
Sumar Columna en StringGrig | carlosh2006 | Varios | 2 | 28-08-2007 03:23:53 |
Titulos en StringGrig | CamiloU | OOP | 3 | 09-02-2006 01:07:56 |
Calendario. fecha de noviembre 2005 me pone 31 dias y a diciembre 30 | sakuragi | PHP | 2 | 21-11-2005 18:39:59 |
|