Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.06;
Скачать: CL | DM;

Вниз

создание компонента   Найти похожие ветки 

 
webpauk   (2003-09-24 14:12) [0]

ув. господа! Написал компонент, наследник Tpanel, на котором располагаю еще 2 Panel(Align 1:alTop; 2:alClient). Возникла прабл- когда я на этот компонент бросаю сверху еще какие-нибудь компоненты, то в DesignTime они видны, а при активации приложения исчезают. Кто знает что к чему?


 
Skier ©   (2003-09-24 14:34) [1]

еще2Panel.ControlStyle := еще2Panel.ControlStyle + [ csAcceptsControls]


 
Murad ©   (2003-09-24 14:41) [2]

2Skier
у TPanel при создании в ControlStyle есть csAcceptsControls


 
Skier ©   (2003-09-24 14:41) [3]

Отбой. csAcceptsControls уже есть в конструкторе TCustomPanel.

> а при активации приложения исчезают

Поясни.


 
webpauk   (2003-09-24 14:45) [4]

визуальные компоненты, которы я бросаю на этот компонент при запуске программы не видны. судя по всему они располагаются под одной из наложенных панелей


 
willys ©   (2003-09-24 14:46) [5]

имхо, дело в Parent. при добавлении компонентов, их родителем становится твой компонент, и панели их просто перекрывают. отлавливай добавление дочерних компонентов и устанавливай им Parent"ом одну из тех 2 панелей.


 
VAleksey ©   (2003-09-24 14:47) [6]

У них парент твоя главная панель, а должны быть панели, которые сверху :-))))


 
webpauk   (2003-09-24 14:52) [7]

дык, прабл в том, что эти 2 panel вообще никак в новом компоненты не отображаются и для изменения их св-в добавляю в компонент новые properity. и каким образом для бросаемых сверху компонентов изменять parent?


 
Skier ©   (2003-09-24 14:57) [8]


> и каким образом для бросаемых сверху компонентов изменять
> parent?

Вообще-то есть вирт. метод SetParent, но зачем он тебе понадобился, для твоей задачи, IDE установит того родителя, на которого ты бросил компонент, но 1) если компонент - визуальный, и 2) если у потенциального родителя установлен флаг csAcceptsControls

Вообще расскажи про общую задачу. Пару слов...


 
VAleksey ©   (2003-09-24 14:58) [9]

Я что-то в ступор впадаю...
А нафига вообще эти панели две нужны? Какие проперти? Какие св-ва панелей меняешь?

Может тогда как раз наоборот? Паренты эти панели, а посколько они не видимы то невидимы и компоненты которые на них находятсяю


 
webpauk   (2003-09-24 15:04) [10]

2skier

в приложении задаю определленый стиль для множества панелек: главная панель, на ней-панель для отображения названия главной панели и панель на которую цепляются различные компоненты.


 
webpauk   (2003-09-24 15:08) [11]

type
TMyPanel1 = class(TPanel)
private
FMyPanel0, FMyPanel1, FMyPanel2: TPanel;
{ Private declarations }
protected
procedure Paint; override;
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
{ Public declarations }
published
{ Published declarations }
end;

procedure Register;

implementation

constructor TMyPanel1.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := ControlStyle - [csSetCaption];
Color:=clWhite;
BevelOuter:=bvNone;
BorderWidth:=2;

FMyPanel0:=TPanel.Create(Self);
FMyPanel0.Align:=alClient;
FMyPanel0.Color:=MyColorBackground;
FMyPanel0.BevelOuter:=bvNone;
FMyPanel0.Visible:=True;
FMyPanel0.BorderWidth:=1;
InsertControl(FMyPanel0);

FMyPanel1:=TPanel.Create(FMyPanel0);
FMyPanel1.ParentColor:=True;
FMyPanel1.Align:=alTop;
FMyPanel1.Font.Size:=10;
FMyPanel1.Font.Color:=MyColorFont;
FMyPanel1.Font.Style:=[fsBold];
FMyPanel1.Height:=15;
FMyPanel1.BevelOuter:=bvNone;
FMyPanel1.Visible:=True;
FMyPanel0.InsertControl(FMyPanel1);

FMyPanel2:=TPanel.Create(FMyPanel0);
FMyPanel2.Color:=clWhite;
FMyPanel2.Align:=alClient;
FMyPanel2.BevelOuter:=bvNone;
FMyPanel2.Visible:=True;
FMyPanel0.InsertControl(FMyPanel2);
end;

procedure TMyPanel1.Paint;
begin
inherited;
end;


 
Alex_Raider ©   (2003-09-24 15:14) [12]

Убери InsertControl.
используй Parent

и не плоди такое количество панелей, так как каждая аллоцирует
окно. Это ни к чему.
Используй TGraphic / TCustom Control.


 
webpauk   (2003-09-24 15:21) [13]

2Alex_Raider
хрен редьки не слаще. Эффект тот же


 
willys ©   (2003-09-24 16:14) [14]

писал ведь уже... попробуй перехватить бросание компонентов...
т.е. в protected-секцию добавь:
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
и в ней уже пишешь:
procedure TMyPanel1.Notification(AComponent: TComponent; Operation: TOperation);
begin
if (Operation = opInsert) and (AComponent is TControl) then
AComponent.Parent := FMyPanel2;
end;

по идее должно сработать.


 
VAleksey ©   (2003-09-24 16:15) [15]

Еще раз.
Какая из этих панелей является Parent-ом для компонентов, которые ты помещаешь на свой компонент?


 
webpauk   (2003-09-24 17:14) [16]

2VAleksey
Fmypanel2


 
webpauk   (2003-09-24 17:16) [17]

2willys
Undeclared identifier: "parent"


 
willys ©   (2003-09-24 17:18) [18]

сорри, запамятовал :) надо так:
(AComponent as TControl).Parent := FMyPanel2;


 
webpauk   (2003-09-24 17:25) [19]

2willys
компонент запустился, только при попытке чего-нибудь на нем разместить = страшно и нецензурно ругается (типа попытка записать в запрещенную область памяти)


 
webpauk   (2003-09-24 17:46) [20]

а вообще можно прогр.путем разместить компонент выше(ниже) всех остальных?


 
Юрий Зотов ©   (2003-09-24 17:52) [21]

> webpauk (24.09.03 17:46) [20]

BringToFront/SendToBack.
На общем Parent"е.


 
webpauk   (2003-09-24 18:30) [22]

вобщем прабл следующий: panel, лежащий на родительском Panel имеющий свойство align=alclient во время запуска приложения закрывает собой остальные компоненты. может кто знает как от этого избавиться?


 
VAleksey ©   (2003-09-25 15:30) [23]

Посмотри сюда:

constructor TsmPanel.Create(AOwner: TComponent);
var Pnl:TPanel;
begin
inherited Create(AOwner);
With TPanel.Create(AOwner) do
begin
Height := Round(Self.Height/3);
BevelInner := bvLowered;
BevelOuter := bvLowered;
Align := alTop;
ControlStyle := ControlStyle - [csAcceptsControls];
Parent:=Self;
end;
With TPanel.Create(Self) do
begin
Align := alClient;
BevelInner := bvRaised;
BevelOuter := bvRaised;
ControlStyle := ControlStyle - [csAcceptsControls];
Parent := Self;
end;
end;



Страницы: 1 вся ветка

Текущий архив: 2003.10.06;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.018 c
4-18689
antonyan
2003-08-01 13:54
2003.10.06
Сообщения Word


14-18595
panov
2003-09-17 18:59
2003.10.06
Ну что, бета-тестер... слабо теперь?


9-18210
Griffen
2003-04-02 07:22
2003.10.06
Sun flare в DirectX 8.0


1-18397
Balkon
2003-09-25 10:58
2003.10.06
Как считать число типа Word или SmallInt из массива...


1-18411
Jack
2003-09-25 15:44
2003.10.06
Процедуры и методы