-
Добрый день! Создаю свой компонент - кнопку! Имеются ли способы предустановки координат кнопки в конструкторе компонента относительно формы-владельца? Отрывок кода... ... constructor TColorBtn.Create(AOwner: TComponent); begin inherited Create(AOwner); ... Left:=round((GetParentForm(Aowner as TControl).Name.Left)/2)-round(left/2); - ошибка компиляции "Record, object or class type required " - понятно чем вызвана! Но а как иначе реализовать это? ... end; ... Пример: "Мы кидаем на форму кнопку и она центруется посредите формы!" Какой способ поможет реализовать это?
Спасибо!
-
Удалено модератором
-
Left:=Round(GetParentForm(self).Width/2 - Width/2); :) А зачем такая кнопка(компонент)?)
-
Удалено модератором
-
Удалено модератором
-
>>{RASkov} © (22.12.08 12:15) [2] Left:=Round(GetParentForm(self).Width/2 - Width/2); :) А зачем такая кнопка(компонент)?) << Так тоже пробовал... - ошибка - Acces Violation... на этапе выполнения!
>>Медвежонок Пятачок © (22.12.08 12:16) [3] и даже если получил парент форму, то накой тебе её лефт? для мебели? <<Продвинутый дизайн формы при динамическом создании экземпляров класса!
-
Удалено модератором
-
Удалено модератором
-
Удалено модератором
-
Удалено модератором
-
Удалено модератором
-
>>Медвежонок Пятачок © (22.12.08 12:29) [8] Так тоже пробовал... - ошибка - Acces Violation... на этапе выполнения! нет парента вот и ав
<< Вот в том то и суть! Поэтому и спрашиваю сдесь!
-
Поэтому и спрашиваю сдесь!
парент есть в сетпарент. а еще есть оунер, который в дизайнере есть всегда.
-
Перекрой SetParent, там и центруй свою кнопку... по паренту - это может даже и лучше будет, чем по форме...
-
Удалено модератором
-
>>Во сказанул.... еще и поверят. :) В любом случае условие задачи - не в дугу) Нафик такие "продвинутые" компоненты не нужны :) <<В мире ИТ есть гласные и негласные законы, например ITIL и прочее.. В Windows corp. есть негласный стандарт качества в сфере дизайна форм... Сравните оформление программ Windows и HP, например... В винде никаких кнопок-коротышек, сокращенных(порой непонятных надписей). В хъюлетский же Servce Desk-е порой не поймещь, что к чему! Но это к вопросу: "Нафига козе боян"! А на практике очень полезно иметь набор визуальных smart компонентов, которые сами аккуратно ложаться на форму с учетом расположения других компонентов...
-
Удалено модератором
-
Удалено модератором
-
> Перекрой SetParent, там и центруй свою кнопку... по паренту > - это может даже и лучше будет, чем по форме...
Ну хорошо, пусть будет вот так ... procedure TColorBtn.SetParent(AParent: TWinControl); begin inherited SetParent(AParent); end; ... Но дальше то что? Мне по-прежнему надо обращаться к методам и свойствам, но какой "переменной"? Ведь я все еще в режиме construktor<?
-
Решение довольно простое. Перекрыть SetBounds, в котором и отследить размеры и положение
TMyButton = class(TButton)
protected
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer);override;
procedure SetParent(AParent: TWinControl);override;
end;
implementation
procedure TMyButton.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
if Assigned(Parent) then begin
ALeft := (Parent.Width - Width) div 2;
ATop := (Parent.Height - Height) div 2;
end;
inherited;
end;
procedure TMyButton.SetParent(AParent: TWinControl);
begin
inherited;
Left := Left;
end;
procedure TForm1.FormClick(Sender: TObject);
begin
TMyButton.Create(self).Parent := Form1;
end;
-
Если же нужно именно в конструкторе и при заброске на форму, то естественно по другому, например так
procedure TMyButton.CreateWnd;
var f: TCustomForm;
begin
inherited;
f := GetParentForm(self);
if F is TCustomForm then begin
Left := (TCustomForm(F).width - Width) div 2
end;
end;
-
Всем огромное спасибо за помощь... Особенно DimaBr... Даже перекрывать ничего не пришлось... Последний пример очень помог, только вместо self - GetParentForm(Aowner as TControl) Вот что в итоге получилось, : ... constructor TColorBtn.Create(AOwner: TComponent); var f: TCustomForm; begin inherited Create(AOwner); ... f := GetParentForm(GetParentForm(Aowner as TControl)); if F is TCustomForm then begin Left := (TCustomForm(F).width - Width) div 2; end; ... end;
-
> procedure TMyButton.SetParent(AParent: TWinControl); > begin > inherited; > Left := Left; > end;
Left:=Left не нравится.
Может AdjustSize ?
|