Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2009, 15:17   #1
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию Динамически созданный tabSheet

Добрый день. При двойном щелчке мыши в ListString Динамически создается TabSheet и на нем компоненты.
Допустим у меня создано несколько Табшитов, у каждого свое имя. Как сделать активным уже открытый таб шит зная его имя?
Пробую так но не получается
Код:
var t:TTabSheet;
    m:TMemo;

procedure createsheet;
var i:integer;
begin
with F_message do begin
if PageControl1.PageCount=0 then
  begin

    F_Client.t:=TTabSheet.Create(PageControl1);
    F_Client.t.PageControl:=PageControl1;
    F_Client.t.Name:='Tab'+F_Client.Cont_name;
    F_Client.t.Caption:=F_Client.Cont_Uin;
    
    F_Client.m:=TMemo.Create(F_message);
    F_Client.m.Parent:=F_Client.t;
    F_Client.m.Name:='Memo'+F_Client.Cont_name;
    F_Client.m.Align:=alClient;
    F_Client.m.Text:='';
    
    F_message.Show;
   
  end else
  begin
  for i:=0 to PageControl1.PageCount-1 do begin
    if PageControl1.Pages[i].Name='Tab'+F_Client.Cont_name then
      begin
      F_Client.a:=1;
          
      end else
      begin
      if F_Client.a<>1 then F_Client.a:=0;
      end;
   end;
   if F_Client.a=0 then
    begin
    F_Client.t:=TTabSheet.Create(PageControl1);
    F_Client.t.PageControl:=PageControl1;
    F_Client.t.Name:='Tab'+F_Client.Cont_name;
    F_Client.t.Caption:=F_Client.Cont_Uin;
    
    F_Client.m:=TMemo.Create(F_message);
    F_Client.m.Parent:=F_Client.t;
    F_Client.m.Name:='Memo'+F_Client.Cont_name;
    F_Client.m.Align:=alClient;
    F_Client.m.Text:='';
  
    F_message.Show;

    PageControl1.ActivePage:=F_Client.t;
    end;
   end;
end;
где Cont_name и Cont_UIN Имя и номер контакта окно которого нужно сделать активным.
S@fer вне форума Ответить с цитированием
Старый 03.04.2009, 01:35   #2
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

Как вариант могу предложить при создании табшита записывать его номер в его же таг, потом находим компонент по имени, считываем его таг и делаем эту вкладку активной..
Второй вариант: создать массив соответствий.. И потом быстро в массиве найти нужное имя и посмотреть какой вкладке оно соответствует..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 03.04.2009, 10:53   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как сделать активным уже открытый таб шит зная его имя?
Можно через:
Код:
FindComponent(const AName: string): TComponent;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.04.2009, 17:45   #4
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Может просто слегка переместить
Код:
var t:TTabSheet;
    m:TMemo;

procedure createsheet;
var i:integer;
begin
with F_message do begin
if PageControl1.PageCount=0 then
  begin

    F_Client.t:=TTabSheet.Create(PageControl1);
    F_Client.t.PageControl:=PageControl1;
    F_Client.t.Name:='Tab'+F_Client.Cont_name;
    F_Client.t.Caption:=F_Client.Cont_Uin;
    
    F_Client.m:=TMemo.Create(F_message);
    F_Client.m.Parent:=F_Client.t;
    F_Client.m.Name:='Memo'+F_Client.Cont_name;
    F_Client.m.Align:=alClient;
    F_Client.m.Text:='';
    
    F_message.Show;

  end else
  begin
  F_Client.a:=0;
  for i:=0 to PageControl1.PageCount-1 do begin
    if PageControl1.Pages[i].Name='Tab'+F_Client.Cont_name then
      begin
      F_Client.a:=1;
      break;
      end;
   end;
   if F_Client.a=0 then
    begin
    F_Client.t:=TTabSheet.Create(PageControl1);
    F_Client.t.PageControl:=PageControl1;
    F_Client.t.Name:='Tab'+F_Client.Cont_name;
    F_Client.t.Caption:=F_Client.Cont_Uin;

    F_Client.m:=TMemo.Create(F_message);
    F_Client.m.Parent:=F_Client.t;
    F_Client.m.Name:='Memo'+F_Client.Cont_name;
    F_Client.m.Align:=alClient;
    F_Client.m.Text:='';

    F_message.Show;
    end;
   end;
   PageControl1.ActivePage:=F_Client.t;
end;
s.Creator вне форума Ответить с цитированием
Старый 08.04.2009, 11:02   #5
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Цитата:
Можно через:
FindComponent(const AName: string): TComponent;
Пробую так:
Код:
F_message.PageControl1.ActivePage:=(FindComponent('Tab'+F_Client.Cont_name) As TTabSheet);
Но активной становится не Табшит, а сам PageControl,т.е. все открытые вкладки остаются на заднем плане, а на передний выходит пустой PageControl

Последний раз редактировалось S@fer; 08.04.2009 в 11:07.
S@fer вне форума Ответить с цитированием
Старый 08.04.2009, 11:05   #6
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Цитата:
Сообщение от s.Creator Посмотреть сообщение
Может просто слегка переместить
Таким способом, активной становиться последняя созданная вкладка.
S@fer вне форума Ответить с цитированием
Старый 08.04.2009, 11:48   #7
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

попробуй листинг первого поста заменить этим:

Код:
var t:TTabSheet;
    m:TMemo;

procedure createsheet;
var i:integer;
begin
i:=0;
with F_message do begin
  for i:=0 to PageControl1.ComponentCount-1 do begin
    if (PageControl1.Components[i] is TTabSheet)and
       (TTabSheet(PageControl1.Components[i]).Name='Tab'+F_Client.Cont_name) then
         begin
                   PageControl1.ActivePageIndex:=TTabSheet(PageControl1.Components[i]).PageIndex;
                    break;
          end
  end;
  if i>=PageControl1.ComponentCount then
    begin
         F_Client.t:=TTabSheet.Create(PageControl1);
         F_Client.t.PageControl:=PageControl1;
         F_Client.t.Name:='Tab'+F_Client.Cont_name;
         F_Client.t.Caption:=F_Client.Cont_Uin;

         F_Client.m:=TMemo.Create(F_message);
         F_Client.m.Parent:=F_Client.t;
         F_Client.m.Name:='Memo'+F_Client.Cont_name;
         F_Client.m.Align:=alClient;
         F_Client.m.Text:='';

         F_message.Show;

         PageControl1.ActivePageIndex:=PageControl1.PageCount-1;
    end;
end;
одно из изменений добвь.. иначе будут ошибки когда нету ниодной вкладки..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"

Последний раз редактировалось Ntlegend; 08.04.2009 в 12:11.
Ntlegend вне форума Ответить с цитированием
Старый 08.04.2009, 12:03   #8
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Ntlegend, Спасибо. Работает.
S@fer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как привязать ScrollBar к TabSheet в PageControl fen Компоненты Delphi 11 10.04.2012 19:39
Как удалить вкладку TabSheet во время выполнения программы SibBear Общие вопросы Delphi 27 18.03.2009 17:28
Как динамически создать компонент subsonic Общие вопросы Delphi 2 13.03.2009 15:23
TabSheet как родитель для формы из DLL - Проблема Leser Общие вопросы Delphi 2 11.01.2009 20:40
TabSheet one Компоненты Delphi 0 10.03.2007 07:38