Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 875

/ вопрос решён /

Здравствуйте, уважаемые эксперты! Работаю с MDI окнами. Есть TabControl, нужно при переключении вкладок менять активное MDI окно. Допустим, 5 вкладок, 5 окон. Как при выборе третьей вкладки сделать активным третье окно?

alone Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: alone (статус: Посетитель)
Вопрос отправлен: 1 июня 2009, 18:27
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: min@y™

У TTabControl есть свойство Tabs: TStrings, у которого, в свою очередь, есть свойство Objects. Для данной задачи именно это свойство является ключевым.
При создании нового MDIChild-окна нужно также создавать новую вкладку методом

function TTabControl.AddObject(const S: string; AObject: TObject): Integer; virtual;
где в параметр Object передавать указатель на объект свежесозданного окошка.

При клике на TabControl нужно просто сделать типа так:
TForm(TabControl.Tabs.Objects[TabControl.TabIndex]).SetFocus(); // Или Show()

Ну и с закрытием надо тоже подсуетиться: поиском найти ту вкладку, у которой Data равно указателю закрываемой формы, и удалить её.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 1 июня 2009, 18:49
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: DNK

Здравствуйте, alone!
Попробуй так, см приложение.
Заметил, что MDIChildren[TabControl1.TabIndex].Show работает непойми как.

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, ComCtrls, ExtCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Panel1: TPanel;
  12. TabControl1: TTabControl;
  13. procedure FormShow(Sender: TObject);
  14. procedure TabControl1Change(Sender: TObject);
  15. private
  16. { Private declarations }
  17. public
  18. { Public declarations }
  19. end;
  20.  
  21. var
  22. Form1: TForm1;
  23.  
  24. implementation
  25.  
  26. {$R *.dfm}
  27.  
  28. procedure TForm1.FormShow(Sender: TObject);
  29. var i: integer;
  30. begin
  31. for i := 0 to MDIChildCount - 1 do
  32. TabControl1.Tabs.Add(MDIChildren[i].Caption);
  33. end;
  34.  
  35. procedure TForm1.TabControl1Change(Sender: TObject);
  36. var i: integer;
  37. begin
  38. for i := 0 to MDIChildCount - 1 do
  39. if MDIChildren[i].Caption = TabControl1.Tabs[TabControl1.TabIndex] then
  40. MDIChildren[i].Show;
  41. end;
  42.  
  43. end.


Ответ отправил: DNK (статус: Студент)
Время отправки: 1 июня 2009, 19:12
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 1 июня 2009, 18:37; участников в обсуждении: 1.
Вадим К

Вадим К (статус: Академик), 1 июня 2009, 18:37 [#1]:

скомбинируйте вот такой код для закрытия всех MDI окон
procedure TfrMain.CloseAll1Click(Sender: TObject);
var
  i: integer;
begin
  for i:= 0 to MdiChildCount - 1 do
    MDIChildren[i].Close;
end;
и метода show формы
Галочка "подтверждения прочтения" - вселенское зло.

31 января 2011, 19:36: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:41
Выполнено за 0.03 сек.