Cita:
Empezado por FGarcia
Errores:
El texto se dibuja pero no en el orden adecuado, todo se repite en cada columna.
Las celdas de las columnas del horario aparecen con un marco el cual desaparece si se hace click en ellas
|
(1) El primer problema de que se repita el texto de los horarios, es simplemente que no pasas como parámetro la fila, y es algo imprescindible. Creo que la rutina la has complicado más de lo necesario. Si haces la llamada por ejemplos así:
Código Delphi
[-]
if (ACol = 0) then begin
_PaintHourCol0(ACol, ARow);
end;
Y el procedimiento lo simplificas así:
Código Delphi
[-]
procedure _PaintHourCol0(ACol, ARow:integer);
var
a,j,p:integer;
Str:String;
begin
if (ACol=0) then begin
a := ARow+6;
Str := Format('%.2d:00',[a]) + ' - ' + Format('%.2d:00',[a+1]);
end;
if (ARow > 1) then
begin
StringGrid1.Canvas.Brush.Style := bsSolid;
StringGrid1.Canvas.Brush.Color := $00E6E6E6;
StringGrid1.Canvas.Rectangle(Rect); Application.ProcessMessages;
StringGrid1.Canvas.TextOut(Rect.Left + 5,Rect.Top + 3, Str);
Application.ProcessMessages;
end;
end;
Funciona perfectamente (sólo basta replicarlo en los otros dos).
Y si me apuras mucho, eso tres puedes juntarlo en uno sólo (eso para más adelante
).
(2) El tema del marco que desaparece, no es ningun misterio
, simplemente es que te has dejado de añadir a línea:
Código Delphi
[-]
StringGrid1.Canvas.Pen.Color := clBlack;
En los procedimientos _PaintHourCol0, _PaintHourCol3, _PaintHourCol6 en la segunda parte cuando pintas sobre el canvas.
Si añades la línea:
Código Delphi
[-]
InflateRect(Rect, -2, -2);
Controlas si el recuadro está más ajustado al borde o menos:
Código Delphi
[-]
...
if (ARow > 1) then
begin
InflateRect(Rect, -2, -2);
StringGrid1.Canvas.Pen.Color := clBlack;
StringGrid1.Canvas.Brush.Style := bsSolid;
StringGrid1.Canvas.Brush.Color := $00E6E6E6;
StringGrid1.Canvas.Rectangle(Rect); Application.ProcessMessages;
StringGrid1.Canvas.TextOut(Rect.Left + 5,Rect.Top + 3, Str);
Application.ProcessMessages;
end;
Una cosa más.
Pare evitar este efecto en las celdas:
En la propiedad
Options, pon
goFixedVertLine a
FALSE. En diseño.