Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];
ВнизПередача двумерного массива методу объекта... Найти похожие ветки
← →
$HiC0 (2002-09-02 18:48) [0]У меня есть много классов, раскиданных по модулям, в главной программе
объявив переменную главного класса который в качестве полей включает
в себя объекты остальных классов запускаю программу на выполнение.
Все вроде нормально, возникла необходимость что-бы матрица полученная в результате
деятельности методов одного из объектов попадала в другой для вывода...
Если-бы надо-было шлепать все на определенную форму проблем не было-бы,
добавляешь метод который выводит все что ты наработал
Но так как мне необходими что-бы отображение шло на StringGrid
формы вызывающего модуля, то приходится делать новый обхъект с методом для
отображения... в общем не буду долго разглогольствовать.. посмотрите пожалуйста
Вот примерная конструкция... все лишние классы исключил, оставил, по моему мнению
все что может пригодиться...
type
TMatrix =array of array of Integer;
TKB=class(TComponent)
Private
PatCount : Integer;
ActCount : Integer;
EstCount : Integer;
Procedure SetPatCount(PatCount_:Integer);
Procedure SetActCount(ActCount_:Integer);
Procedure SetEstCount(EstCount_:Integer);
Public
FReal_Matrix : Array of Array of Array of Integer;
FMatrix : TMatrix;
Constructor Create(AOwner:TComponent);override;
Procedure SaveData;
Procedure ExportMatrix;
Property Patterns : Integer read PatCount write SetPatCount;
Property Actions : Integer read ActCount write SetActCount;
Property Estemates : Integer read EstCount write SetEstCount;
TViz_KB=class
Private
FTable : TStringGrid;
Public
Constructor Create(ATable:TStringGrid);
Procedure ShowMatrix;
End;
Вот чего я делаю
Var
Pattern : Integer;
Action : Integer;
Estemation : Integer;
Matrix : TMatrix;
Constructor TKB.Create(AOwner:TComponent);
Begin
inherited Create(AOwner);
SetPatCount(Pat);
SetActCount(Act);
SetEstCount(Est);
SetLength(FReal_Matrix,Pat,Act,Est);
SetLength(FMatrix,Pat,Act);
End;
Procedure TKB.SaveData;
Begin
Inc(FReal_Matrix[Pattern][Action][Estemation]);
If FReal_Matrix[Pattern][Action][Estemation]>=Porog then Begin
FReal_Matrix[Pattern][Action][Estemation]:=Porog; //Дабы избежать переполнения
FMatrix[Pattern][Action]:=Estemation;
End;
ExportMatrix;
End;
Procedure TKB.ExportMatrix;
Begin
Matrix:=FMatrix;
End;
Ну тут все работает как надо... В FMatrix сидит моя матрена и не рыпается,
дальше делаю вот что:
Constructor TViz_KB.Create(ATable:TStringGrid);
Begin
inherited Create;
FTable := ATable;
End;
ATable - Соответсвенно опредляется в основном модуле строчкой
VizKB :=TViz_KB.Create(MatrixG);
Где MatrixG это StringGrid
Procedure TViz_KB.ShowMatrix;
Var i,j : integer;
Begin
For i:=0 to Pat do
For j:=0 to Act do
Begin
FTable.Cells[i,j]:=IntToStr(Matrix[i,j]); ---< RUntime Error
End;
End;
Я не понял почему. Matrix вроде задан, все работает верно...
Стоит и все... может я что-то не то со StringGridom делаю
Да нет, вроде все то что надо, проверял через FTAble менял цвета баловался,
все работало... а вот что-то с матрицой не хочет...
Ошибка: Аксес виолатион по адресу такому-то...
Помогите плиз... вроде все что может пригодится для совета я привел, даже много лишнего.. так что очень расчитываю на помощь.
← →
McSimm (2002-09-02 18:56) [1]Разбираться подробно не стал. Проверь для начала такое
For i:=0 to Pat - 1 do
For j:=0 to Act - 1 do
← →
$hiC0 (2002-09-02 19:17) [2]Оба-ну не туп-ли я? :) Как я сам не додумался :) Блован литой :)
Спасибо McSimm. Большое спасибо :) Все заработало :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c