Наследник StringGrid

 
0
 
Delphi, Kylix and Pascal
ava
poisonX | 23.01.2006, 18:47
Вообщем нужно создать компонент на основе StringGrid. Необходимо, чтобы конструктор компонента потомка присваивал начальные значения ячейкам этого компонента (например Cells[0,0]). По идее потомок должен приобретать все properties предка, но это только в том случае если эти свойства содержаться в Object Inspector (например Width, ColCount и др.). Такое свойство как Cells там не содержится. Как быть в таком случае.

Подскажите, please!!!
Ответы (20)
ava
Guedda | 23.01.2006, 19:08 #

procedure TMyStringGrid.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
TMyStringGrid.Cells[0,0] := 'Hello!';
end;
ava
poisonX | 24.01.2006, 12:29 #
Не получается! Компилятор пишет Method identifier expected.
И еще, может быть в приведенном коде вместо procedure имеется в виду constructor?
ava
_hunter | 24.01.2006, 12:35 #
poisonX, код показывай. Cels спокойно наследуются...
ava
poisonX | 24.01.2006, 13:44 #

unit MyStringGrid;

interface

uses
SysUtils, Classes, Controls, Grids;

type
TMyStringGrid = class(TStringGrid)
private
{ Private declarations }
FNewName: string;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
procedure DblClick; override;
published
{ Published declarations }
property NewName: string read FNewName write FNewName;
end;

procedure Register;

implementation
procedure SqRoot(a,b,c : integer);

begin
end;

procedure Register;
begin
RegisterComponents('Standard', [TMyStringGrid]);
end;
{ TMyStringGrid }

constructor TMyStringGrid.Create(AOwner: TComponent);
begin
inherited create(Aowner);
width:=199;
height:=29;
colcount:=3;
rowcount:=1;
fixedcols:=0

TMyStringGrid. Cells[0,0] :=' ' //здесь выдается mes об ошибке

end;

procedure TMyStringGrid.DblClick;
var
k1,k2: integer;
rez: boolean;
mes: string;

begin
inherited DblClick;

SqRoot(StrToInt(TMyStringGrid.Cells[0,0]), StrToInt(TMyStringGrid.Cells[1,0]),
StrToInt(TMyStringGrid.Cells[2,0]));//Необходимо передать эти значения в качестве параметров некоторой функции (пока не реализована), но здесь делф также не компилит



ava
Snowy | 24.01.2006, 14:08 #
Цитата
TMyStringGrid. Cells[0,0] :=' ' //здесь выдается mes об ошибке


Cells[0,0] :=' ' //здесь не выдается mes об ошибке

Добавлено позднее:
Цитата (poisonX @ 24.1.2006, 13:44 findReferencedText)


SqRoot(StrToInt(TMyStringGrid.Cells[0,0]), StrToInt(TMyStringGrid.Cells[1,0]),
  StrToInt(TMyStringGrid.Cells[2,0]));



SqRoot(StrToInt(Cells[0,0]), StrToInt(Cells[1,0]),
StrToInt(Cells[2,0]));
ava
_hunter | 24.01.2006, 14:15 #
а это:
TMyStringGrid. Cells[0,0] :=' ' //здесь выдается mes об ошибке
зачем?
так:
Cells[0,0] :=' '
достаточно...
ava
Yanis | 24.01.2006, 14:25 #
Цитата (poisonX @ 24.1.2006, 13:44 findReferencedText)


TMyStringGrid. Cells[0,0] :=' ' //здесь выдается mes об ошибке


Удали пробел между методом и точкой.

А точнее между свойством и точкой.
ava
poisonX | 24.01.2006, 14:32 #
Да ошибка-то не в этом. Созданный класс TMyStringGrid не наследует свойства базового, не указанные в Инспекторе (такое как Cells). hunter пишет что должен наследовать... А из-за пробела ошибки не возникает.
ava
_hunter | 24.01.2006, 14:38 #
poisonX, в смысле? и сейчас ( после исправления ) не наследует?
что за ошибку получаеш?
ava
Alexeis | 24.01.2006, 14:43 #

TMyStringGrid. Cells[0,0] :=' '

В принципе не верно (так обращаются только к
class function функциям класса а не объекта)
Для обращения к экземпляру объекта используется self
self.Cells[0,0] :=' ';
ava
Snowy | 24.01.2006, 14:51 #
Цитата (alexeis1 @ 24.1.2006, 14:43 findReferencedText)


Для обращения к экземпляру объекта используется self


Для обращения к классу в методе self не нужно - он подразумевается по умолчанию.
ava
Alexeis | 24.01.2006, 15:06 #
Цитата


Для обращения к классу в методе self не нужно


Верно почти всегда :exclamation
Однако иногда нужно работать с указателем на объект тогда self
очень удобен.
Кроме того self.Cells[0,0] :=' '; - не является ошибкой.
ava
_hunter | 24.01.2006, 15:15 #
ошибкой не является. но является избыточным кодом...
ava
poisonX | 24.01.2006, 16:24 #
Цитата


Для обращения к классу в методе self не нужно - он подразумевается по умолчанию.



С помощью self свойства наследуются вроде нормально. Спасибо с этим smile
Тогда в каком случае self испльзуется по умолчанию и в чем избыточность кода?
ava
Alexeis | 24.01.2006, 16:59 #

self.Cells[0,0] :=' ';
Cells[0,0] :=' ';

делает тоже самое поэтому придаток "self." лишний
причем во всех подобных конструкциях.
это все равно как в обработчике формы писать

form1.height := 100;
вместо
height := 100;
в принципе тоже только короче.
ava
poisonX | 24.01.2006, 17:44 #
Спасибо за разъяснения!
И еще у меня такой вопрос: как сделать наследника StringGrid редактируемым по умолчанию, то есть как в конструкторе активизировать функцию goEditing, вкладки Options?

ava
Alexeis | 24.01.2006, 18:13 #
в конструкторе
написать
Options := Options + [goEditing];
ava
_hunter | 24.01.2006, 18:13 #
в конструкторе добавить опцию в опции
ava
poisonX | 25.01.2006, 07:03 #
И последний вопрос: можно ли как-нибудь создать компонент, состоящий из двух базовых (например из TEdit и TButton). Если да то не могли бы вы привести код наиболее простого в качестве примера?
ava
_hunter | 25.01.2006, 11:32 #
Ответ в вопросе: пишеш наследник от кнопки и одним из его приватных членов делаеш TEdit
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
  _hunter   Yanis   Snowy ava  Guedda   poisonX ava  Alexeis
advanced
Отправить