|
Вопрос # 2 875/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты! Работаю с MDI окнами. Есть TabControl, нужно при переключении вкладок менять активное MDI окно. Допустим, 5 вкладок, 5 окон. Как при выборе третьей вкладки сделать активным третье окно?
 |
Вопрос задал: 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 работает непойми как.
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ComCtrls, ExtCtrls;
-
- type
- TForm1 = class(TForm)
- Panel1: TPanel;
- TabControl1: TTabControl;
- procedure FormShow(Sender: TObject);
- procedure TabControl1Change(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.FormShow(Sender: TObject);
- var i: integer;
- begin
- for i := 0 to MDIChildCount - 1 do
- TabControl1.Tabs.Add(MDIChildren[i].Caption);
- end;
-
- procedure TForm1.TabControl1Change(Sender: TObject);
- var i: integer;
- begin
- for i := 0 to MDIChildCount - 1 do
- if MDIChildren[i].Caption = TabControl1.Tabs[TabControl1.TabIndex] then
- MDIChildren[i].Show;
- end;
-
- 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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|