Конференция "Компоненты" » компонент-наследник StringGrid [D7]
 
  • Тарас (03.06.11 12:43) [0]
    На базе визуального компонента TstringGrid реализовать класс который реализует двухмерный массив. Количество рядков и столбцов должно задаваться через свойство. Элементы массива отображать в соответствующих ячейках компонента. На базе данного класса реализовать СЛАУ Гаусса.Мне сказали что нужно создать новый компонент на базе TstringGrid. Люди я новичок в этом помогите пожалуйста разобраться..
  • clickmaker © (03.06.11 17:14) [1]
    > На базе данного класса реализовать СЛАУ Гаусса

    в грид коэффициенты вводить?
    так для этого новый компонент не нужен
  • Тарас (04.06.11 08:51) [2]
    В грид кофициенты через свойство вводить нужно. А компонент нада обязательно)
  • DimaBr © (06.06.11 15:37) [3]
    > На базе визуального компонента TstringGrid реализовать класс который реализует двухмерный массив.
    StringGrid - это и есть визуализация двухмерного массива
    > Количество рядков и столбцов должно задаваться через свойство
    RowCount, ColCount
  • Тарас (08.06.11 13:10) [4]
    DimaBr спс..
    У меня есть еще вопрос а Слау Гауса в компоненте писать или же в главном модуле проекта?
  • DimaBr © (08.06.11 13:12) [5]
    Как лично вам хочется, или как указано в тех-задании
  • Тарас (08.06.11 13:18) [6]
    DimaBr  пожалуйста посмотри мой код ,а то я незнаю правильно ли написал...
    ето код компонента

    unit StringGridmass1;

    interface

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

    type

    Tmass=array of Real;
    Tmatrix=array of Tmass;

     TStringGridmass1 = class(TStringGrid)
     private
       function GetCols(Index: Integer): TStrings;
       function GetRows(Index: Integer): TStrings;
       procedure SetCols(Index: Integer; const Value: TStrings);
       procedure SetRows(Index: Integer; const Value: TStrings);
       { Private declarations }
     protected
       { Protected declarations }

       procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState:
    TGridDrawState; Sender: TObject;State: TGridDrawState);
     public
       { Public declarations }

        // Конструктор, создающий массив с указанным размером
         constructor Create(AOwner: TComponent); override;
         destructor Destroy; override;

     procedure Per(k,n:integer;var a:Tmatrix;var b:Tmass);
     Procedure PrChod(n:integer;var a:Tmatrix;var b:Tmass);
     Procedure ObrChod(n:integer;a:Tmatrix;b:Tmass;var x:Tmass);

      property Cols[Index: Integer]: TStrings read GetCols write SetCols;
      property Rows[Index: Integer]: TStrings read GetRows write SetRows;

         // Соответственно, нужно возвращать размеры массива

         //function sizeX : integer;
         //function sizeY : integer;
     published
       { Published declarations }
     end;

    procedure Register;

    implementation

    procedure Register;
    begin
     RegisterComponents('Samples', [TStringGridmass1]);
    end;

    { TStringGridmass1 }
            //
    constructor TStringGridmass1.Create(AOwner: TComponent);
    begin
     inherited;
     Create(AOwner);
    end;
       //
    destructor TStringGridmass1.Destroy;
    begin

     inherited;
    end;


    procedure TStringGridmass1.DrawCell(ACol, ARow: Longint; ARect: TRect; AState:
    TGridDrawState; Sender: TObject ; State: TGridDrawState);
    var
     lRow, lCol: LongInt;
     S: string;
     begin
     with Sender as TStringGrid, Canvas do
     begin
       if (gdSelected in State) then
       begin
         Brush.Color := clHighlight; { *** }
       end
       else if (lRow < FixedRows) or (lCol < FixedCols) then
       begin
         Brush.Color := FixedColor;
       end
       else
       begin
         Brush.Color := Color;
       end;
       FillRect(ARect);
       SetBkMode(Handle, TRANSPARENT);
       TextOut(ARect.Left + 2, ARect.Top + 2, Cells[lCol, lRow]);
     end;
    end;

    function TStringGridmass1.GetCols(Index: Integer): TStrings;
    begin

    end;

    function TStringGridmass1.GetRows(Index: Integer): TStrings;
    begin

    end;

    procedure TStringGridmass1.SetCols  (Index: Integer; const Value: TStrings);
    begin

    end;

    procedure TStringGridmass1.SetRows(Index: Integer; const Value: TStrings);
    begin

    end;

         // Слау Гаусса  >>>>>>>>>>>

    procedure TStringGridmass1.Per(k, n: integer; var a: Tmatrix;
     var b: Tmass);
     var j,i:integer;z:Real;
    begin
      z:=a[k,k];i:=k;
      for j:=k+1 to n-1 do
      begin
        if abs(a[j,k])>z then
        begin
        z:=a[j,k];i:=j;
        end;
      end;
        if i>k then
        for j:=k to n-1 do
        begin
        z:=a[i,j];a[i,j]:=a[k,j];a[k,j]:=z;
        end;
        z:=b[i];b[i]:=b[k];b[k]:=z;
    end;

    //прямой ход Гаусса>>>>>>>>>>>

    procedure TStringGridmass1.PrChod(n: integer; var a: Tmatrix;
     var b: Tmass);
    var k,j,i:integer; r:real;
    begin
     for k:=0 to n-1 do
     begin
     if a[k,k]=0 then Per(k,n,a,b);//перестановка строк
       for j:=k+1 to n-1 do //пересчет коэффициентов
       begin
       r:=a[j,k]/a[k,k];
         for i:=k to n-1 do
         begin
         a[j,i]:=a[j,i]-r*a[k,i];
         end;
       b[j]:=b[j]-r*b[k];
       end;
     end;
    end;

    //обратный ход Гаусса>>>>>>>>>>>>

    procedure TStringGridmass1.ObrChod(n: integer; a: Tmatrix; b: Tmass;
     var x: Tmass);
    var k,j:integer;r,g:real;
    begin
     for k:=n-1 downto 0 do
     begin
     r:=0;
       for j:=k+1 to n-1 do
       begin
       g:=a[k,j]*x[j];
       r:=r+g;
       end;
       x[k]:=(b[k]-r)/a[k,k];
     end;
    end;

      end.
  • DimaBr © (08.06.11 13:45) [7]
    1.
    constructor TStringGridmass1.Create(AOwner: TComponent);
    begin
    inherited;
    end;


    2. Ничего не понятно, что вы храните в гиде
    3. Зачем вручную рисуете ячейки ?
    4. Что за посторонние массивы ?
  • Тарас (08.06.11 13:58) [8]
    Масивы работают с Слау Гауса...В гриде нужно хранить елементы массива. А ячейки я просто забыл закоментировать.
  • Тарас (08.06.11 14:00) [9]
    Я в этом деле новенький...
  • Тарас (08.06.11 14:23) [10]
    Спасибо и на єтом))
  • Тарас (10.06.11 12:26) [11]
    Удалено модератором
  • Тарас (10.06.11 13:55) [12]
    Подскажите пожалуйста как в компоненте вписать массив в Stringrid ? Чтобы каждое число массив было в отдельной ячейке?
  • DimaBr © (11.06.11 23:52) [13]
    Cells[X,Y] := Value;
 
Конференция "Компоненты" » компонент-наследник StringGrid [D7]
Есть новые Нет новых   [119118   +117][b:0][p:0.001]