Как отображать созданные формы в статусбаре?

Vitaliy Os
Дата: 20.11.2007 18:00:10
Есть таблица с объектами базы данных. При двойном клике хочу открывать карточку объекта (новую форму) и чтобы в статусбаре (StatusBar) появлялась соответсвующая панелька с названием формы (можно id, к примеру). При убивании формы панелька должна пропадать.
Подскажите, как это реализовать!
Хочу, своего рода, свою панель задач! Если уже где-то такое обсуждалось тыцните носом! )
Спасибо!
mvb
Дата: 21.11.2007 07:05:18
Не знаю, как сделать в статусбаре, я обычно делаю на TabControl, растянутый по нижнему краю, в списке Tabs сохраняю указатели на открытые формы, на событие TabsChange активируем нужную форму:
TForm(Tabs.Objects[TabIndex]).Show;
Альт
Дата: 21.11.2007 07:16:59
mvb
Не знаю, как сделать в статусбаре, я обычно делаю на TabControl, растянутый по нижнему краю, в списке Tabs сохраняю указатели на открытые формы, на событие TabsChange активируем нужную форму:
TForm(Tabs.Objects[TabIndex]).Show;

а обратно? активируем любую форму... переключается таб... если 50 форм... и хочу открыть первую с самого конца... как быть?
mvb
Дата: 21.11.2007 08:30:54
в форме на OnActivate по Caption (или Self формы) ищем форму в Tabs, устанавливаем TabIndex... На OnClose надо добавить удаление формы из списка...

Я использую такой механизм в MDI приложении, все немодальные формы (MDIChild) унаследованы от одной базовой, в которой все эти движения с Tab'ами прописаны один раз...
Vitaliy Os
Дата: 21.11.2007 15:21:04
mvb
Не знаю, как сделать в статусбаре, я обычно делаю на TabControl, растянутый по нижнему краю, в списке Tabs сохраняю указатели на открытые формы, на событие TabsChange активируем нужную форму:
TForm(Tabs.Objects[TabIndex]).Show;

А можно по подробнее про указатели. Когде, где и как создается и присваивается? И, как уничтожаются табы с уничтожением формы? Маленький пример был бы очень к стати! )
mvb
Дата: 21.11.2007 15:44:18
fTabCtrl - TTabControl
procedure TForm1.AddTab(Fm: TForm);
var idx: integer;
begin
     with fTabCtrl do
     begin
       idx := Tabs.IndexOfObject(Fm);
       if idx < 0 then
        idx := Tabs.AddObject(Fm.Caption, Fm) else
        Tabs[idx] := Fm.Caption;
       TabIndex := idx;
     end;
end;

procedure TForm1.DeleteTab(Fm: TForm);
var idx: integer;
begin
     with fTabCtrl do
     begin
       idx := Tabs.IndexOfObject(Fm);
       if idx >= 0 then
        Tabs.Delete(idx);
       if idx < Tabs.Count then
        TabIndex := idx else
       if (idx-1 > 0) and (idx-1 < Tabs.Count) then
        TabIndex := idx-1;
     end;
end;

function TForm1.ActivateTab(const aCaption: string): boolean;
var idx: integer;
begin
     Result := false;
     with fTabCtrl do
     begin
       idx := Tabs.IndexOf(aCaption);
       if idx >= 0 then
        TabIndex := idx else
        exit;
       TabsChange(nil);
     end;
     Result := true;
end;
в OnShow формы:
AddTab(Self);
OnClose:
DeleteTab(Self);
OnActivate
ActivateTab(Caption);
Vitaliy Os
Дата: 21.11.2007 16:19:09
Супер! Спасибо, буду кодить! )
Johnmen
Дата: 21.11.2007 16:29:38
> Супер! Спасибо, буду кодить! )

Именно словом "кодить" на современном IT-жаргоне называется непростое действие Copy-Paste.