Главная Новые темы Список тем Задать вопрос Поиск  

Форум "Delphi" (архив)


Паскаль, Делфи


 #0  Чернышевский 16.09.03 17:00:25 - 21.09.03 14:30:28

Самопальный контрол и его "дочки"



Наваял самопальный компонент - потомок TCustomControl. Он содержит панель. Теперь в design-time ставлю на эту панель контролы. Все вроде гладко. Запускаю - нету контролов, одна голая панель. Смотрю ресурсы формы - и правда нету контролов. Открываю в редакторе - вот они радЁмые. Что делать? Цитата

 #1 Паша © 16.09.03 17:14:46

он содержит или наследник панели? Если наследник, то будет все автоматом, если нет, то надо Parent-ам сонтролов, которые ты ложишь на панель, делать
сонтрол.Parent:= Panel
кажись
 #2  Чернышевский 16.09.03 17:22:25

>он содержит или наследник панели?
Внимательно читаем второе предложение моего поста :)
>надо Parent-ам сонтролов, которые ты ложишь на
>панель, делать сонтрол.Parent:= Panel
Это я понимаю. Вопрос КАК?
 #3 Deep © 16.09.03 18:05:28

выход - бросать компоненты на панель не в дизайне, а ручками код прописать. А
сонтрол.Parent:= Panel
писать в конструкторе своего потомка.
 #4 Паша © 16.09.03 18:15:06

игрался тут, нифига не выйдет, кажись. надо наследоватся от панели.
Будет код, мож чего яснее станет
 #5  Чернышевский 17.09.03 07:57:51

>Deep © 16.09.03 19:05
Не устраивает. Это ж компонент. В требованиях написано, что должно быть редактирование в design-time :(
>Паша © 16.09.03 19:15
Не надо наследоваться от панели - еще геморойнее.
Я думаю, что надо написать обработчик сообщения на изменение списка дочерних контролов CM_CONTROLCHANGE. Но как? Или перекрыть методы TComponent, сохраняющие/читающие ресурсы формы.
 #6 Deep © 17.09.03 09:33:02

constructor TMyCustomControl.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle:= [csAcceptsControls];
end;
 #7 Паша © 17.09.03 09:39:28

> Чернышевский 17.09.03 8:57
> Не надо наследоваться от панели надо Федя, надо(с). Я наследовался от панели, и все прекрасно работает. Какого тебе надо от TCustomControl? Это что, принципиально?
 #8 Паша © 17.09.03 09:57:36

по всему, надо перекрывать procedure TComponent.Loaded, а каким макаром, то мне неведомо, никогда не пробовал.
 #9  Чернышевский 17.09.03 11:07:07

>Deep © 17.09.03 10:33
Это к чему?

>Паша © 17.09.03 10:39
Паша, не надо. Я же не сказал, что пишу свою панель. Я сказал, что контрол "содержит" панель. Еще он много чего содержит. И если ставить это все на панель (наследоваться от панели), то получается сплошной офедрон. Я тоже так пробывал. Сначала.

>Паша © 17.09.03 10:57
Перекрывать надо WriteState/ReadState. Только это не тот путь.
 #10 Паша © 17.09.03 11:21:47

код бы посмотреть
 #11  Чернышевский 17.09.03 11:38:26

Что ты хочешь увидеть?
 #12 Паша © 17.09.03 11:51:36

в общем, понятно. если ты панель создаешь от self, то в дизайнере у тебя все ОК, но ни хера не сохраняется. В случае, если ты создашь панель от Owner , то все будет нормально. Этого тебе достаточно?

шось таке:

constructor lala.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  if csDesigning in componentstate then
  begin
    panel:= TPanel.Create(AOwner);
    panel.Align:= alClient;
    panel.Visible:= true;
    self.InsertControl(panel);
  end;
end;
 #13 Паша © 17.09.03 12:44:30

> Паша © 17.09.03 12:51
А дизайнере - мучайся!

> Что ты хочешь увидеть? Да код твоего зверя. Что там за монстр такой хитрый, что его от панели сделать невозможно?
 #14  Чернышевский 17.09.03 12:47:48

Я так и делаю. Толку никакого.
 #15 Marser © 17.09.03 12:50:34

А не от TCustomScrollingControl (или как там его) ли нам наследоваться?
 #16 Паша © 17.09.03 12:51:54

вот я только слышу, что ты там чего-то делаешь, а видеть этого - не вижу.
зы. А у меня в тестике толк есть - сохраняет в дфм и запускается - все видно. Только в дизайнере у(собачка)бищьно работает.
 #17 Deep © 17.09.03 12:58:01

> Чернышевский 17.09.2003 12:07:00
>
> >Deep © 17.09.03 10:33
> Это к чему?

это указывает что компонент может "принимать на себя"(быть parent) другие компоненты.
 #18  Чернышевский 17.09.03 13:15:54

>Deep © 17.09.03 13:58
Да пробывал я. Не помогает.
 #19  Чернышевский 17.09.03 13:27:15

>Паша © 17.09.03 13:51
Паша, я очень рад, что в твоем текстике есть толк. Значит ты толковый парень. Но я-то - бестолковый! И толка в моем текстике нету. От панели сделать возможно все. На то она и панель.
Там кода - целый модуль :)
Вот тебе, например, конструктор:

constructor TgtSideBarPanel.Create(AOwner: TComponent);
begin
  inherited;
  ControlStyle := ControlStyle + [csAcceptsControls];
  Width := 100;
  Height := 100;
  Align := alRight;
  FFullSize := 100;
  FButton := TSpeedButton.Create(AOwner);
  FButton.Name := 'RollButton';
  FButton.Parent := Self;
  FButton.Caption := '';
  FButton.OnClick := ButtonClick;
  FButton.ShowHint := True;
  FButton.Align := alLeft;
  Realign;
  FPanel := TPanel.Create(AOwner);
  FPanel.Name := 'SidePanel';
  FPanel.Parent := Self;
  FPanel.Caption := '';
  FPanel.FullRepaint := False;
  FPanel.Align := alClient;
  ButtonPosition := posLeft;
  ButtonSize := 11;
  Roll;
end;


Вот тебе, как сказал уважаемый Deep "принимать на себя":

procedure TgtSideBarPanel.CMControlChange(var Message: TCMControlChange);
var
  AControl: TControl;
  Handled: Boolean;
begin
  Handled := False;
  if not Assigned(FPanel) then exit;
  if Message.Inserting then
  begin
    AControl := Message.Control;
    if (AControl <> FPanel) and (AControl <> FButton) then
    if AControl.Parent <> FPanel then
    begin
      AControl.Parent := FPanel;
      Handled := True;
    end;
  end;
  if not Handled then DefaultHandler(Message);
end;

 #20  Чернышевский 17.09.03 13:29:23

Может дело в нотификации?
 #21 Паша © 18.09.03 12:18:04

> Может дело в нотификации?
нет, не похоже

зы. из твоего примера не видно, почему нельзя сделать наследника от панели
 #22  Чернышевский 21.09.03 14:30:28

Дело в том, что контролы, поставленные на мой компонент в дизайне не имеют Owner'а (=nil). Как бороться не знаю. Буду переписывать от панели. На Пашиной улице праздник :)




  • Тема находится в архиве

    Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов