Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Незнаю как назвать. (Заполнение свойства при создании объекта)


Страницы:   1 2 3

RASkov ©   (2006-10-04 00:35:00) 

Есть такое вот дело (код компанента):

TArrRect: array of TRect;
....
-----------
ArrRect: TArrRect;
....
published
property MCount: Integer read GetMCount;
property SList: TStrings read FSList write SetSList;

constructor T<name>.Create(...);
begin
 SList := TStringList.Create;
 ...
end;

function T<name>.GetMCount: Integer;
begin
 Result:=SList.Count;
end;

procedure T<name>.SetRect;
begin
 SetLength(ArrRect, MCount); //MCount=0 ????
 for N := 0 to MCount-1 do...
end;

procedure T<name>.SetSList(const Value: TStrings);
begin
 SList.Assign(Value);
//  SetLength(ArrRect, SList.Count);
 SetRect;
end;

procedure T<name>.Paint;
begin
 Canvas.TextOut(10, 10, IntToStr(MCount)+' - '+IntToStr(Length(ArrRect)));
end;


Такая вот конструкция неправильна.
Вопрос: как при создании экземпляра T<name> заполнить поле ArrRectпри условии, что поле SList заполняется в инспекторе объектов?
при выполнении Paint рисует 5 - 0 ????(аргентина-ямайка, блин) - в SList - 5 строк....
ЗЫ SetLength в SetSList проблему не решает.
ЗЫЫ Если нужно, могу привести полное описание T<name>


Zeqfreed   (2006-10-06 22:48:00) [21]

[23] не пробовал?


RASkov   (2006-10-06 22:41:00) [22]

> [25] Percent   (06.10.06 22:12)

Они выставляются в 0 (ноль) пробовал и так
FStartHeight := Height;
и так
StartHeight := Height;

> [26] Zeqfreed ©   (06.10.06 22:23)

Да вот не хотелось бы по умолчанию, а хотелось бы после того как
Align := alClient;
"Расплылся" по контейнеру и тут узнать его новые Width и Height и прировнять их StartWidth и StartHeight. Нельзя ли как отловить эти изменения в конструкторе, ведь вызываются же SetAlign у предка т.е. у TControl'a и его FWidth принимает новое значение.... Ух запутался уже.


Zeqfreed   (2006-10-06 22:23:00) [23]

> [25] Percent   (06.10.06 22:12)

Угу и как не устанавливать StartHeight в инспекторе св-в, при запуске программы оно будет устанавливаться равным обычному Height. В этом и есть проблема автора. Здесь надо использовать значения св-в по умолчанию, мне кажется.


Percent   (2006-10-06 22:12:00) [24]

как сделать так, что бы, когда кидаем на форму компанент то в инспекторе - свойства Height и Width продублировались(скопировались) в StartHeight и StartWidth соответственно?

constructor TPicMenus.Create(AOwner: TComponent);
begin
inherited;
FBitmap := TBitmap.Create;
Align := alClient;
FStartHeight := Height;
FStartWidth := Width;
end;


И нечего городить огород...


Zeqfreed   (2006-10-06 21:40:00) [25]

Или просто установить default значения для свойств.


Zeqfreed   (2006-10-06 21:25:00) [26]

if csDesigning in ComponentState then кажется должно помочь.


RASkov   (2006-10-06 21:15:00) [27]

Блин, вот сюда же о том же...
Мне очень помогло:
procedure Loaded;
Здесь я все понял и сделал - немного другой вопрос но все о том же...
вот куски кода паблишед свойств и конструктор компанента - вопрос ниже:

published
....
  property Height stored False;
  property StartWidth: Integer read FStartWidth write SetStartWidth;
  property StartHeight: Integer read FStartHeight write SetStartHeight;
  property Picture: TBitMap read FBitmap write SetBitmap;
  property Width stored False;
....
end;

Конструктор
constructor TPicMenus.Create(AOwner: TComponent);
begin
 inherited;
 FBitmap:=TBitmap.Create;
 Align:=alClient;
 //FStartHeight:=Height;
 //FStartWidth:=Self.Width;

end;


Вот вопрос, извеняюсь если до ужоса глупый и простое решение, как сделать так, что бы, когда кидаем на форму компанент то в инспекторе - свойства Height и Width продублировались(скопировались) в StartHeight и StartWidth соответственно? Далее эти свойства могут менятся независимо от ширины и высоты, например в SetBitmap они могут установится в высоту и ширину рисунка, но это уже не суть. Нужно именно когда кидаем в дизайнтайме на форму или на еще какой контейнер. А то они в ноль устанавливаются а вручки придумывать/устанавливать в конструкторе от балды не то.
ЗЫ пробовал в Loaded и Notification не то получается или не так делал:(
срабатывает как то не сразу... Спасибо.


RASkov   (2006-10-04 02:28:00) [28]

> [17] Percent   (04.10.06 01:54)

А про это то я знал... ну чето даже и не подумал о них.... всетаки компанент...новый... в конструкторе создается поле (ну и что, что класс)...Ух... А вот про Loaded забыл да еще и незнал:)


RASkov   (2006-10-04 02:24:00) [29]

> [19] sniknik ©   (04.10.06 01:58)

Извеняюсь... Усе понял... Спасибо..

> [17] Percent   (04.10.06 01:54)

Очень и очень в тему Loaded; (не знал про него - см[13]) уже сделал - то что надо. Спасибо.


sniknik   (2006-10-04 01:58:00) [30]

> Так здесь по моему все просто...
именно. и это именно то, что ты (имхо) пытаешся повторить в своем компаненте. для того там у тебя и присутствует массив рекордов и попытка совместить размеры, чтобы сделать аналог. (т.е. велосипед)

> Ну т.е. в [12] ничего нового/полезного для моего конкретного случая. Сорри.
ну, значит мощьность телепатора уже не та... сорри.


Percent   (2006-10-04 01:55:00) [31]

RASkov   (04.10.06 01:48) [16]
> [15] RASkov   (04.10.06 01:48)

образно/утрировано...


Это если очень образно...


Percent   (2006-10-04 01:54:00) [32]

См. также
TStringList.OnChange()
TStringList.OnChanging()


RASkov   (2006-10-04 01:48:00) [33]

> [15] RASkov   (04.10.06 01:48)

образно/утрировано...


RASkov   (2006-10-04 01:48:00) [34]

Или, если я правильно понял, БуттонКлик - это и есть procedure Loaded; override;


RASkov   (2006-10-04 01:46:00) [35]

> [12] sniknik ©   (04.10.06 01:32)

Так здесь по моему все просто... инициализация по кнопке. У меня в конструкторе моего компанентасоздается StringList и следом нужно заполнить массив в зависимости от кол-ва введенных строк в инспекторе в дизайнтайме. Ну т.е. в [12] ничего нового/полезного для моего конкретного случая. Сорри.


RASkov   (2006-10-04 01:40:00) [36]

> [11] Zeqfreed ©   (04.10.06 01:31)

Ничё бывает, бывает и хуже.
Это я просто первый свой компанет делаю (никогда в жизни их не писал). Кстати полезная вещь - писать компаненты - стока многова и полезнова про сам язык узнаешь:) ну от сюда такие вот глупые вопросы, к сожалению.
Спасибо Вам, всем кто помогает в таких случаях, а не издевается:) типа про метлы:).


sniknik   (2006-10-04 01:32:00) [37]

> Если есть какие варианты подругому - пожалуйста - я весь внимание.
внимай! (если телепатор не подвел ;)

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure FormPaint(Sender: TObject);
 private
   ts: TStringList;
 public
 end;

 PRect = ^TRect;
 TRect = record
   x,y: integer;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 ts:= TStringList.Create;
 Randomize;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
 i: integer;
begin
 for i:= 0 to ts.Count-1 do
   Dispose(PRect(ts.Objects[i]));
 ts.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Rect: PRect;
 i: integer;
begin
 for i:= 0 to 10 do begin
   New(Rect);
   Rect.x:= i*10+Random(20);
   Rect.y:= i*15+Random(20);
   ts.AddObject(InttoStr(i), Pointer(Rect));
 end;
 Refresh;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
 i: integer;
begin
 for i:= 0 to ts.Count-1 do
   if i=0 then Canvas.MoveTo(PRect(ts.Objects[i]).x, PRect(ts.Objects[i]).y)
          else Canvas.LineTo(PRect(ts.Objects[i]).x, PRect(ts.Objects[i]).y)
end;

end.


думаю все ясно из кода и его работы.


Zeqfreed   (2006-10-04 01:31:00) [38]

Как-то плохо на меня институт влияет. Буйный стал :(


RASkov   (2006-10-04 01:31:00) [39]

> [9] Zeqfreed ©   (04.10.06 01:30)

Initializes the component after the form file has been read into memory.
Вроде понял.:)
Спасибо


Zeqfreed   (2006-10-04 01:30:00) [40]

> [7] RASkov   (04.10.06 01:29)

Тебе уже сказали, переопредели поведение компонента в методе Loaded.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо