[Delphi]Dynamiczne tworzenie komponentów na stworzonych dyn.

0

Witam mam nowy problem po rozwiązaniu poprzedniego, a mianowicie mam dynamicznie utworzony komponent TToolBar (jego Name zostało załadowane z pliku, zakładamy że jest to "Standard") i na nim chcę utworzyć dynamicznie przycisk no i wszystko fajnie tylko jak mam:

var
i:Integer;
CurBTN: TToolButton;
ToolTabName, Image, Name, Text: String;
begin
debuglog.Lines.Add('//Rozpoczęto ładowanie przycisków');

if BTNListBox.ItemIndex = 0 then debuglog.Lines.Add('Nie istnieje lista ładowania przycisków.') else begin
for i:=0 to BTNListBox.Count - 1 do
  begin
    INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'Package\BTN\'+BTNListBox.Items[i]);
  try
debuglog.Lines.Add('!>Ładowanie danych o przycisku');
   ToolTabName:=ini.ReadString('ToolTab','ToolTab' ,ToolTabName);
   Image:=ini.ReadString('BUTTON','Image' ,Image);
   Name:=ini.ReadString('BUTTON','Name' ,Name);
   Text:=ini.ReadString('BUTTON','Text' ,Text);
debuglog.Lines.Add('Załadowano przycisk o danych:');
debuglog.Lines.Add('   @ToolTabName: '+ToolTabName);
debuglog.Lines.Add('   @Nazwa BTN:    '+Name);
debuglog.Lines.Add('   @Text Fukcji:      '+Text);
debuglog.Lines.Add('   @ID obrazka:      '+Image);
//   BTNImg.InsertIcon(StrToInt(Image),Ticon(ExtractFilePath(Application.ExeName) + 'Package\BTN\'+Image+'.bmp'));

   CurBTN:=TToolButton.Create(Self);
   debuglog.Lines.Add('Stworzonio przycisk');
   debuglog.Lines.Add(' >Dodawanie TToolButton do Parent o naziwe: '+ToolTabName);
   CurBTN.Parent.Name:=ToolTabName;
   debuglog.Lines.Add(' >Dodno');
   CurBTN.Caption:=Text;
   debuglog.Lines.Add('Dodano Text: '+Text);
   CurBTN.OnClick:=BTNOnClick;
   debuglog.Lines.Add('Dodano funkcje przycisku');
//   CurBTN.ImageIndex:=StrToInt(Image);
debuglog.Lines.Add('!>przycisk utworzony');

  finally
    INI.Free;
  end;

 end;
end;
debuglog.Lines.Add('//Zakończono ładowanie przycisków');
end;

To wywala błąd ale aplikacja po uruchomieniu a nie debuger delphi, napisałem sobie taki mały wew. debuger to mi pokazał:

//Rozpoczęto ładowanie KART.
Dodano TTabSheet o Tytule: Standard
Dodano TToolBar o nazwie: Standard i tytule:Standard
Dodano TTabSheet o Tytule: Funkcje
Dodano TToolBar o nazwie: Funkcje i tytule:Funkcje
Dodano TTabSheet o Tytule: Markery
Dodano TToolBar o nazwie: Markery i tytule:Markery
//Zakończono ładowanie KART
//Rozpoczęto ładowanie przycisków
!>Ładowanie danych o przycisku
Załadowano przycisk o danych:
   @ToolTabName: Standard
   @Nazwa BTN:    delete
   @Text Fukcji:      del
   @ID obrazka:      0
Stworzonio przycisk
 >Dodawanie TToolButton do Parent o naziwe: Standard

i zacina się przy ustalaniu gdzie ma się znajdować przycisk. Ale jak dałem nazwę istniejącego komponentu ToolBarTEST zamiaste ToolTabName to działa poprawnie.
Nie mam pomysłu jak rozwiązać ten problem...

0

A po co robisz .Create(Self)? jak sam tworzysz, to Create(nil).

0

1.A czytałeś mój post dokładnie ???
2.Po co zmieniać na nil jak to nic nie daje co ??? Z inną częścią jest problem !

0

CurBTN.Parent.Name:=ToolTabName;
przecież Parent jest w tym momencie nilem!

0

CurBTN.Parent.Name:=ToolTabName; probowałem tez (CurBTN.Parent:=ToolTabName;)
jak przed tym dałem ShowMessage(ToolTabName);
to wyświetlało nazwę Stadard

0

mamo ....
CurBTN.Parent jest NILem więc próba zrobienia CurBTN.Parent.Name := cokolwiek da ci AV!! Najpierw trzeba przypisać parenta (NIE NAZWĘ!!!) I PARENTEM NIE BĘDZIE NAZWA TYLKO KOMPONENT

1 użytkowników online, w tym zalogowanych: 0, gości: 1