Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как узнать имя компонента, создан-


Автор: -Сергей- 24.6.2004, 17:57
Компоненты создаю так:
Код

var stop:boolean;
procedure TForm1.Button1Click(Sender: TObject);
var
 I: Integer;
Count, cv:integer;
begin
 cv := StrToInt(Edit1.Text);//кол. вкладок.
 Stop := False;
 ProgressBar1.Max := cv;
 with Form2.PageControl1 do
   for Count := 1 to cv do
    begin
      Application.ProcessMessages;
      if Stop=True then exit;
      ProgressBar1.Position := count;
      with TTabSheet.Create(Self) do
       begin
         PageControl := Form2.PageControl1;
         TabVisible := True;
         Caption := '№ ' + IntToStr(PageIndex);
       end;// with TTabSheet.Create(Self) do
    end;// for Count := 1 to cv do
 Form2.PageControl1.ActivePage := Form2.TabSheet1;
 Form2.Show;
end;


Автор: _hunter 24.6.2004, 18:04
ну вопервых ты не компонент создаеш smile.gif
а во вторых чем тебе Name не нравится ( или ты под именем что-то другое подразумеваеш? )?

Автор: -Сергей- 25.6.2004, 06:46
Как раз мне Name и нужен. Как я потом к ним обращаться буду?. Только через FindComponent.

Автор: Illusion Dolphin 25.6.2004, 09:13
А если приблизительно так:

TabSheets = array of TTabSheet;

...

Setlength(TabSheets , cv)

TabSheets [i-1]:= TTabSheet.Create(Self);
With TabSheets [i-1] do
begin
PageControl := Form2.PageControl1;
TabVisible := True;
Caption := '№ ' + IntToStr(PageIndex);
end;

...
А потом обращаешься как к элементу массива...

P.S. А можно и в том же With... do у тебя влепить что-то вроде
Name:='MyTabSheet'+inttostr(cv)...

Автор: -Сергей- 25.6.2004, 09:51
Цитата
А можно и в том же With... do у тебя влепить что-то вроде
Name:='MyTabSheet'+inttostr(cv)...

Я уже так пробовал. Не помогает.
Цитата
А потом обращаешься как к элементу массива...

Тоже не помогает.

Автор: _hunter 25.6.2004, 15:54
чем тебе массив не подходит? что значит не помогает?

Автор: -Сергей- 26.6.2004, 08:34
Допустим так:
TabSheets [1].Caption:='Вкладка';
Не работает.
А если ShowMessage(TabSheets [1].Name);
То вылетает ошибка.

Автор: z-END 26.6.2004, 09:33
-Сергей-
Какая ошибка-то? и причем здесь Caption и Name? это же разные вещи... Caption - это есть заголовок, а Name - имя компонента.
Код
ты попробуй так:
TabSheets[1].Name:='My_tabsheet1';
ShowMessage (TabSheets[1].Name);

Автор: _hunter 26.6.2004, 11:17
он имеет в вид, что обращение к элементу массива не эквивалентно обращению к объекту ( устновка / чтение свойств не прходит )

-Сергей-, не помню как с этим в Delphi дело обстоит, но в Buiolder' e для этих целей нужно было массив указателей на объекты создавать а не масив объектов
может поможет

Автор: -Сергей- 26.6.2004, 11:20
nJIaKca.spb, ты не правильно понял.
Код

ShowMessage(TabSheets [1].Name);//Так я хочу узнать имя по умолчанию, которое присваивается в процессе создания, а так как его нет то и выдаёт Exception.

И так тоже выдаёт Exception.
Код

With TabSheets [i-1] do
begin
PageControl := Form2.PageControl1;
TabVisible := True;
Caption := '№ ' + IntToStr(PageIndex);
Name := 'Tab' + IntToStr(PageIndex);
end;
ShowMessage (TabSheets[1].Name);// в этом месте Exception (Acces violation at addres...)

Автор: _hunter 26.6.2004, 11:27
причем тут Exception при отсутствии имени? отсутсвие имени это просто пустая строка и она без проблем выводится.
смотри мой предыдущийй пост

Автор: z-END 26.6.2004, 12:49
Толи у меня лыжи не едут, толи не сезон простоsmile.gif
Объясните мне плиз, в чем проблемма-то, Зачем вообще к TabSheet'ам обращаться через FindComponent (ИМХО через сию ф-цию его никогда и ненайдешь, т.к. искать надо у предка в Controls[xx]) ?! Ведь к ним можно обращаться просто так:
Код
ShowMessage (PageControl1.Pages [PageControl1.ActivePageIndex].Name);


И чего там неработает?! сделал как посоветовал Illusion Dolphin:
Код

var Tabs: Array of TTabSheet;
...
procedure TForm1.Button1Click (Sender: TObject);
var cv, i: Integer;
begin
cv := 15;
Setlength (Tabs , cv);
for i := 0 to cv - 1 do
begin
 Tabs [i] := TTabSheet.Create (PageControl1);
  With Tabs [i] do
   begin
     PageControl := Form2.PageControl1;
     TabVisible := True;
     Caption :=  '№ ' + IntToStr (PageIndex);
     Name :=  'TAB_'+inttostr (PageIndex);
   end;
end;
end;
// ... активной вкладке присваиваем заголовок
procedure TForm1.Button2Click (Sender: TObject);
begin
Tabs[PageControl.ActivePageIndex].Caption := 'лыжи НЕ едут!!!';
end;
//... смотрим название Tab номер 3
procedure TForm1.Button3Click (Sender: TObject);
begin
ShowMesage (Tabs[3].Name);
end;

Или я совсем не про то?

Автор: _hunter 26.6.2004, 12:54
про то smile.gif

Автор: Marriage 26.6.2004, 21:44
Я могу ошибаться, но ...
Когда создается компонент на форме, его можно узнать его имя так :

Form1.Components[Form1.ComponentCount-1].Name; (если создаешь на форме)
Или я чего то не понял ... withstupid.gif

Автор: -Сергей- 27.6.2004, 05:08
nJIaKca.spb , вот это что надо:
Код

ShowMessage (PageControl1.Pages [PageControl1.ActivePageIndex].Name);


Добавлено @ 05:12
Всем спасибо за участие!
Тема закрыта.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)