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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2013, 16:41   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Работа с вкладками TabControl

Пытаюсь реализовать приблизительную работу с вкладками TabControl как в QIP или ему подобным. Часть получилась, часть нет.

Здесь в выделенном ////////////////////// блоке столкнулся с проблемой добавления вкладки, которая была когда-то закрыта.

Сначала мы ищем данные по IP в TabList. Если данные найдены, но вкладки нет, то создать вкладку и загрузить в неё данные. Если такая вкладка есть, то переключиться на неё и загрузить данные.

Скажу сразу, что на Caption Tab опираться запрещено, так как они могут быть одинаковые.
Код:
procedure TFormPrivate.ProcAddTab(Nick, IP: string; ChangeTab, ShowForm: Boolean);
var
  i: Integer;
  B: Boolean; // Создать новую вкладку (True - да, False - нет)
begin
  B := False; // Чтобы изначально не создавать вторую вкладку после самой первой
  // Добавляем самую первую вкладку
  if TabControl1.Tabs.Count = 0 then
  begin
    // Добавляем пользователя
    UserData := TabList.AddTab(Nick, IP, '', '');
    // Добавляем вкладку
    tbInd := TabControl1.Tabs.Add(Nick);
    // "Привязываем" пользователя к вкладке
    TabControl1.Tabs.Objects[tbInd] := UserData;

    LNick.Caption := Nick;
    LIP.Caption := IP;
  end
  else
  begin
    // Ищем IP-адрес в массиве
    for i := 0 to TabList.Count - 1 do
    begin
      B := False;
      // Если найден нужный IP-адрес
      if TabList[i].IP = IP then
      begin
        // Если разрешено сменить вкладку
        if ChangeTab then
        begin
          // Получаем пользователя на текущей вкладке
          tbInd := TabControl1.TabIndex;
          // Работаем с полями пользоваьтельской записи напрямую
          TTabData(TabControl1.Tabs.Objects[tbInd]).Chat := MChat.Text;
          TTabData(TabControl1.Tabs.Objects[tbInd]).TempMessage := MMessage.Text;
////////////////////////////////////////////////////////////////////////////////
          // Если вкладка отсутсвует в TabControl, то находим её данные и отображаем
          tbInd := TabControl1.Tabs.IndexOfObject(UserData);
          if (tbInd = -1) then TabControl1.Tabs.Add(TabList[i].Nick); // добавляем вкладку в TabControl
          // Перейдём на вкладку
          TabControl1.TabIndex := TabControl1.Tabs.Count;
////////////////////////////////////////////////////////////////////////////////
          // Заполняем новыми данными
          LNick.Caption := TabList[i].Nick;
          LIP.Caption := TabList[i].IP;
          MChat.Text := TabList[i].Chat;
          MMessage.Text := TabList[i].TempMessage;

          Break;
        end
        else
        begin
          // Если IP-адрес из массива совпадает с IP-адресом на вкладке
          if TabList[i].IP = LIP.Caption then
          begin
            // Загрузим историю переписки приватного чата
            Break;
          end;
        end;

        Break;
      end
      else B := True;
    end;
  end;

  if B then
  begin
    // Добавляем пользователя
    UserData := TabList.AddTab(Nick, IP, '', '');
    // Добавляем вкладку
    tbInd := TabControl1.Tabs.Add(Nick);
    // "Привязываем" пользователя к вкладке
    TabControl1.Tabs.Objects[tbInd] := UserData;

    // Если разрешено сменить вкладку
    if ChangeTab then
    begin
      // Получаем пользователя на текущей вкладке
      tbInd := TabControl1.TabIndex;
      // Работаем с полями пользоваьтельской записи напрямую
      TTabData(TabControl1.Tabs.Objects[tbInd]).Chat := MChat.Text;
      TTabData(TabControl1.Tabs.Objects[tbInd]).TempMessage := MMessage.Text;
      // Перейдём на вкладку
      TabControl1.TabIndex := TabControl1.Tabs.Count - 1;
      // Заполняем новыми данными
      LNick.Caption := Nick;
      LIP.Caption := IP;

      MChat.Clear;
      MMessage.Clear;
    end;
  end;

  if ShowForm then ShowAs; // Покажем форму если разрешено
end;
Вложения
Тип файла: zip Example.zip (15.3 Кб, 14 просмотров)
Shouldercannon вне форума Ответить с цитированием
Старый 29.04.2013, 17:13   #2
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

для подобных вещей есть свойство tag. При создании вкладки, в него указывай уникальный ID, и храни соответствия ID-IP в каком нить value-key листе.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 19.12.2014, 11:24   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Решено. Получилось сделать
Вложения
Тип файла: zip TabControl.zip (17.1 Кб, 21 просмотров)
Shouldercannon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с вкладками компонента PageControl Unique_Maks Помощь студентам 0 25.09.2011 00:58
Работа с вкладками. Dron712 Общие вопросы Delphi 2 16.01.2011 17:58
Работа с вкладками Cannibal Microsoft Office Access 2 20.06.2010 09:58
Работа с вкладками. blackstersl Общие вопросы Delphi 2 21.03.2009 11:28