комоненты Tstringgrid и Tdrawgrid

  • Автор темы newnat
  • Дата начала
N

newnat

Таблица, представляющая собой типичное двухнедельное расписание
(столбцы - недели, строки - пары). Разные недели, а также пары, соответствующие
дневному и вечернему отделениям должны быть отделены жирной линией.
Как сделать, которую линию нарисовали, сделать видимой на таблице.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, ExtCtrls, ComCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Image1: TImage;
StringGrid1: TStringGrid;
ColorDialog1: TColorDialog;
Button1: TButton;
UpDown1: TUpDown;
procedure FormPaint(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormPaint(Sender: TObject);
begin
//рисуем сплошную линию (psSolid)
Canvas.Pen.Style:=psSolid;
Canvas.MoveTo(468,176);
Canvas.LineTo(468,394);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if ColorDialog1.Execute then
Canvas.Pen.Color:=ColorDialog1.Color;
FormPaint(nil);
end;

procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
Canvas.Pen.Width:=UpDown1.Position;
Repaint;
end;



procedure TForm1.FormShow(Sender: TObject);
begin
//заполняем значениями все колонки
StringGrid1.Cells[0,1]:='8:15-9:45';
StringGrid1.Cells[0,2]:='9:55-11:25';
StringGrid1.Cells[0,3]:='11:35-13:05';
StringGrid1.Cells[0,4]:='13:35-15:05';
StringGrid1.Cells[0,5]:='15:15-16:45'; и тд.
end;
end.
 
S

SMitty

Если я правильно понял вопрос, то проблема в том, что для рисования линий Вы используете своыство Canvas формы.
Чтобы рисовать линии на StrungGrid'е надо пользоваться свойством Canvas самого StrungGrid.

Например так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
StringGrid1.Canvas.Pen.Color:=clRed;
StringGrid1.Canvas.Pen.Width:=10;
for i:=1 to StringGrid1.ColCount-1 do begin
for j:=1 to StringGrid1.RowCount-1 do begin
StringGrid1.Canvas.MoveTo(StringGrid1.CellRect(i,j).BottomRight.X,
StringGrid1.CellRect(i,j).BottomRight.Y);
StringGrid1.Canvas.LineTo(StringGrid1.CellRect(i,j).TopLeft.x,
StringGrid1.CellRect(i,j).TopLeft.y);

end;
end;
end;

Единственно, надо будет обойти проблему перерисовки клеток при кликании по StringGrid'у.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!