Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.007 c
1-18470
Nucl
2003-09-23 18:04
2003.10.06
Быстро проверить что значение в строке это число


14-18572
Бразилец
2003-09-18 13:34
2003.10.06
Эффект своего поля


14-18578
Максим
2003-09-18 14:28
2003.10.06
такая тема


3-18263
KIR
2003-09-15 17:06
2003.10.06
Строка соединения с IB


1-18453
GreySerg
2003-09-24 17:19
2003.10.06
Какая максимальная длина имени переменной в Delphi ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский