Главная страница
    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.49 MB
Время: 0.045 c
2-1171896060
Ezorcist
2007-02-19 17:41
2007.03.11
Удалить первые N байт из MemoryStream?


4-1161778277
Den-63
2006-10-25 16:11
2007.03.11
Как установить время ВКЛЮЧЕНИЯ компа в БИОСе?


2-1171228788
Alban
2007-02-12 00:19
2007.03.11
Подсчёт трафика в Delphi


15-1170142655
k2
2007-01-30 10:37
2007.03.11
Поздравляю с рождением дочки!


2-1171632549
Dreamse
2007-02-16 16:29
2007.03.11
Как при создании нового окна показывать кнопку на пенеле задач ?





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