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

Тема в разделе "Delphi - Базы данных", создана пользователем newnat, 15 апр 2008.

  1. newnat

    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.
     
  2. SMitty

    SMitty Гость

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

    Например так:
    Код (Text):
    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'у.
     

Поделиться этой страницей