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>


RASkov   (2006-10-07 00:30:00) [1]

> [44] Percent   (06.10.06 23:50)

Ну вот оно то что надо... помоему. Пока результат удовлетворил полностью... посмотрим. Спасибо.


Zeqfreed   (2006-10-07 00:15:00) [2]

> [45] Percent   (06.10.06 23:58)

Угу. Был неправ :)


RASkov   (2006-10-07 00:03:00) [3]

> [44] Percent   (06.10.06 23:50)

Спасибо... уже ближе к делу... счас поробую.

> P.S. Научись формулировать мысли. И ставить конкретные задачи.
> А то мне заказчики уже поперек горла стоят с подобными подходами.
> А тут еще и ты... Что ни пост - то новая мысль, предыдущей
> противоречащая...

Как смог сформулировал... вроде усе ясно было и конкретно, чебы кинуть на форму и в инспекторе продублить свойства высоты и ширины компанента.. даже код привел... Извеняюсь если Вы не поняли меня. Под каждого не угодишь....:( Сорри, и спасибо, что в сад не отправили:)


Percent   (2006-10-06 23:58:00) [4]

Zeqfreed ©   (06.10.06 23:27) [38]
> Это еще почему это?

Вот из-за этой строчки наверное:

> FStartHeight := Height;


А тут подробнее, пожалуйста...


Percent   (2006-10-06 23:50:00) [5]

public
 procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;

{...}
procedure TMyComponent.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
 inherited;
 if (csDesigning in ComponentState) then
 begin
   FStartHeight := Height;
   FStartWidth := Width;
 end;
end;

Так?

P.S. Научись формулировать мысли. И ставить конкретные задачи. А то мне заказчики уже поперек горла стоят с подобными подходами. А тут еще и ты... Что ни пост - то новая мысль, предыдущей противоречащая...


RASkov   (2006-10-06 23:36:00) [6]

Т.е. StartWidth и StartHeight можно указать отличные от реальных Width Height в дизайнтайме. Например форму с этим меню в дизайнере можно сделать маленькой а при старте она примет необходимые размеры а StartWidth и StartHeight будут размеры от которых плясать при масштабе... Блин, ну в этом плане.


RASkov   (2006-10-06 23:33:00) [7]

> [41] Zeqfreed ©   (06.10.06 23:31)

Ну это... такое графическое меню... А StartWidth и StartHeight нужны для дальнейшего (во время работы проги) масштабирования элементов меню...Вот.


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

> [40] RASkov   (06.10.06 23:29)

Ничего нового. ComponentState. Не знаю уж что там не работает у тебя. Вообще зачем тебе нужно такое поведение. Зачем при создании сразу растягивать компонент на всю клиентскую область.


RASkov   (2006-10-06 23:29:00) [9]

> Я бы попробовал, но мне лень регистрировать компонент

Что именно?.... Я попробую он у меня уже зарегестрирован:)


RASkov   (2006-10-06 23:28:00) [10]

> [36] Percent   (06.10.06 23:25)

Так это можно и просто
FStartWidth:=200;
FStartHeight:=200;
Что не хотелось бы...


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

> Это еще почему это?

Вот из-за этой строчки наверное:

> FStartHeight := Height;



> [37] RASkov   (06.10.06 23:25)


> Похоже больше вариантов нет...?

Мозг не работает. Я бы попробовал, но мне лень регистрировать компонент, чтобы он появился в палитре.


RASkov   (2006-10-06 23:25:00) [12]

Похоже больше вариантов нет...?


Percent   (2006-10-06 23:25:00) [13]

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


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


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

Это еще почему это?


RASkov   (2006-10-06 23:07:00) [14]

в Create никакого результата
в Loaded только после того как сделаешь View as Text и назад (View as Form)
в Notifycation только после кидания другого компанента на форму.

procedure T<Class>.Loaded;
var N: Integer;
begin
 inherited;
 ....
//  if csDesigning in ComponentState then FMenuStartWidth := Width;
end;

procedure T<Class>.Notification(AComponent: TComponent; Operation: TOperation);
begin
 inherited;
// if(AComponent=Self)and(Operation=opInsert)then begin
//   FStartWidth:=Width;
//   FStartHeight:=Height;
// end;
if csDesigning in ComponentState then FStartWidth := Width;
end;


Комментировал в момент проверок по разному.
Результат 0 :( ну наверное "нельзя" хотя я неверю просто не могу добиться...


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

> [32] Zeqfreed ©   (06.10.06 22:53)

По моему это не поможет но сейчас попробую все три варианта т.е.
в Create
в Loaded
в Notifycation....


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

> [32] Zeqfreed ©   (06.10.06 22:53)

if csDesigning in ComponentState then читать справку.
:()
Серьезно куда можно это
if csDesigning in ComponentState then FStartWidth := Width;


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

> [31] RASkov   (06.10.06 22:52)

then читать справку.


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

> [28] Zeqfreed ©   (06.10.06 22:48)

И что then?


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

> [28] Zeqfreed ©   (06.10.06 22:48)

Нет а куда это в Create Loaded или Notifycation?


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

> [25] Percent   (06.10.06 22:12)

Можно конечно и так:
FMenuStartWidth:=TControl(AOwner).Width;
но тоже по моему не правильно, т.к. AOwner: TComponent да и размеры получаются разные - после кидания на форму у моего компанента в инспекторе
(например)Width - 463 а StartWidth чуть больше - 471.


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

Наверх

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