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

Вниз

Сериализация дочернего   Найти похожие ветки 

 
DimaBr   (2006-05-25 11:35) [0]

Здравствуйте !
Есть панель с ToolBar-ом. Никак не записываются кнопки в ресурс. Уже создал свой ToolBar со своей сериализацией, всё равно не помогает. Помогите пожалуйста. :(((

unit TestPanel;

interface
uses Classes,ExtCtrls,Forms,Controls,ComCtrls,dialogs,SysUtils;
type
TMyToolBar = class(TToolBar)
 procedure GetChildren(Proc: TGetChildProc; Root: TComponent);override;
end;

TTestPanel = class(TCustomPanel)
 private
   fBar: TMyToolBar;
  public
    procedure GetChildren(Proc: TGetChildProc; Root: TComponent);override;
    constructor Create(Aowner: TComponent);override;
    destructor Destroy;override;
    procedure Notification(AComponent: TComponent; Operation: TOperation);override;
  published
    property Bar: TMyToolBar read fBar write fBar;
end;

procedure Register;

implementation
procedure Register;
begin
 RegisterComponents("Standard",[TTestPanel]);
end;

{ TTestPanel }

constructor TTestPanel.Create(Aowner: TComponent);
var i: integer;
begin
 inherited;
 RegisterClass(TMyToolBar);
 fBar := TMyToolBar.Create(self);
 i := 1;
 while FindComponent("ToolBar"+IntToStr(i)) <> nil do inc(i);
 fBar.Name := "ToolBar"+IntToStr(i);
end;

destructor TTestPanel.Destroy;
begin
 fBar.Free;
 inherited;
end;

procedure TTestPanel.GetChildren(Proc: TGetChildProc; Root: TComponent);
begin
 Proc(fBar);
end;

procedure TTestPanel.Notification(AComponent: TComponent;
 Operation: TOperation);
begin
 inherited;
 if (Operation = opRemove)and(AComponent = Bar) then fBar := nil;
end;

{ TMyToolBar }

procedure TMyToolBar.GetChildren(Proc: TGetChildProc; Root: TComponent);
var i: integer;
begin
//   Always 0   !!!!!!!!!!!!!!!!!!!!!!!
 ShowMessage(inttostr(ButtonCount));
 for i := 0 to ButtonCount -1 do
   Proc(Buttons[i]);
end;

end.


 
StriderMan ©   (2006-06-01 15:28) [1]


>  for i := 0 to ButtonCount -1 do
>    Proc(Buttons[i]);

а если попробовать ComponentCount...?


 
DimaBr   (2006-06-02 13:38) [2]

Ну хоть кто-то ответил :))).
Естественно пробывал, даже давал им имена и FindComponent не находит.


 
StriderMan ©   (2006-06-02 17:15) [3]

может у ToolBar кнопки не являются компонентами в Делфишном смысле


 
DimaBr   (2006-06-05 13:08) [4]

TComponent
TControl
TWinControl
TToolWindow
TToolBar


 
DimaBr   (2006-06-05 13:09) [5]

Ой, ошибся, надо вот так

TComponent
TControl
TGraphicControl
TToolButton


 
StriderMan ©   (2006-06-05 19:21) [6]

еще как вариант - ControlCount


 
DimaBr   (2006-06-06 08:42) [7]

Так ведь дурак, но не на столько же. Пробывал, причём с самого начала. Это то и удивило, что кнопки есть а FindComponent = nil


 
StriderMan ©   (2006-06-06 11:54) [8]

ну прям даже сам заинтересовался. Есть еще одна мысль - кнопки лежат на какой-то подложке, которая у них является Parent"ом, а уже подложка на ToolBar"е


 
StriderMan ©   (2006-06-06 12:45) [9]

очень странно. У меня код


procedure TForm1.ToolButton1Click(Sender: TObject);
var
 i: integer;
begin
 for i := 0 to tb.ButtonCount - 1 do
   ShowMessage(tb.Buttons[i].Name);
end;


прекрасно работает


 
DimaBr   (2006-06-06 12:46) [10]

Полложкой является мой компонент (панель), её сохраняет нормально
procedure TTestPanel.GetChildren(Proc: TGetChildProc; Root: TComponent);
begin
Proc(fBar);
end;


 
StriderMan ©   (2006-06-06 12:52) [11]

кстати в коде, который вы тут представили, не создаются кнопки на ToolBar"е, может в этом дело... :)


 
DimaBr   (2006-06-06 13:31) [12]

Они и не должны создаваться в коде, разве что в (SetParent запихнуть) поскольку набиваются вручную в дизайнере как в реальном ToolBare.


 
StriderMan ©   (2006-06-06 13:37) [13]

хм. В рантайме насоздавал кнопок, все прекрасно записалось в FileStream.


procedure TTestPanel.CreateButtons;
var
 i: integer;
begin
 for i := 1 to 5 do
   with TToolButton.Create(Owner) do
   begin
     Parent := fBar;
   end;
end;


А в SetParent у панельки пришлось дописать к вашему классу:


procedure TTestPanel.SetParent(AParent: TWinControl);
begin
 inherited;
 fBar.Parent := Self;
end;


 
DimaBr   (2006-06-06 14:05) [14]


> А в SetParent у панельки пришлось дописать к вашему классу:
>
>
>
> procedure TTestPanel.SetParent(AParent: TWinControl);
> begin
>  inherited;
>  fBar.Parent := Self;
> end;

Что же это получается, fBar в ресурсе сохраняется, читается нормально, а парента у него нет ? Нужно вручную проставлять ?


 
StriderMan ©   (2006-06-06 15:05) [15]

Зарегистрирован ведь компонент TTestPanel, а он уже сам создает ToolBar, и должен сам разруливать кто у него будет парентом.

Когда вы в дизайне кладете свою панель на форму, сначала вызывается конструктор TTestPanel.Create, а в конструкторе Parent этой панели еще неизвестен, поэтому рисоваться ей негде, соответственно ToolBar который создается в конструкторе панели тоже "еще не знает". где ему рисоваться. и если ему в конструкторе панели сказать
ToolBar.Parent := Self
то он скажет что-то типа "No Parent Window".

Потом после конструктора панельке присваивается Parent, вот здесь- то и нужно тубару тоже парента дать


 
DimaBr   (2006-06-06 15:34) [16]

Спасибочки огромное.



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

Форум: "Компоненты";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.039 c
15-1171536457
mmms
2007-02-15 13:47
2007.03.11
Какой процессор взять, требуется совет...


15-1171326757
Трей
2007-02-13 03:32
2007.03.11
Принципы программирования математического решателя?


8-1150456899
!_SM_!
2006-06-16 15:21
2007.03.11
Проиграть звук


3-1165994423
cad2206
2006-12-13 10:20
2007.03.11
Приложение для базы MySQL


1-1168968633
Garacio
2007-01-16 20:30
2007.03.11
найти пустые ячейки в третьем столбце ListView по всем строкам





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский