![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Незнаю как назвать. (Заполнение свойства при создании объекта)
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.