Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » MDITab на основе TcxTabControl

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

AvGSoft

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мерцание это прикол управления MDI окнами в Windows, есть решение но пока не получается с mditab'ом реализовать, пробывал на событие onmdichildactivate, эффект мерцания не уходит.
TAdvOfficeMDITabSet при создании мерцал - этот метод помогал перед созданием LockClientUpdate(), после UnLockClientUpdate(), а при переключении между вкладками мерцания не было.

Всего записей: 262 | Зарегистр. 03-07-2006 | Отправлено: 12:35 12-08-2010
regkz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ещё нашёл такой вот баг
 

 
при задержке нажатия на кнопку закрытия у TAdvOfficeMDITabSet при нескольких открытых окнах появляется меню настройки
 
Добавлено:

Цитата:
TAdvOfficeMDITabSet при создании мерцал - этот метод помогал перед созданием LockClientUpdate(), после UnLockClientUpdate(), а при переключении между вкладками мерцания не было.

действительно работает, спасибо за решение

Всего записей: 1131 | Зарегистр. 16-01-2007 | Отправлено: 12:48 12-08-2010
Andryshok



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Присоединяйтесь к тестам и улучшению
MDITab - компонент для управления MDI окнами со вкладок доделывал я работает только при установленных DevExpress , так как является наследником cxTabControl, для Delphi 2010 под другие версии не сделал т.к. ими не обладаю, при установке появляется на вкладке Express Utilites  
ссылка хттп://www.onlinedisk.ru/file/493423/  
 
Очень помог мне с этой темой Frodo_Torbins , ему отдельное спасибо
 
Пока открыты вопросы в MDITab  
- устранение эффекта мерцания  
- не получается на него навешать скины - возможно придется дописывать девовские скины и добавлять туда элементы  
- нет обработчика события на нажатие кнопки закрыть на табе
 
Помогайте кто чем может и вместе создадим идеал
 
 
 
Добавлено:
Найду свободную минутку буду пробовать
Цитата:
есть решение но пока не получается с mditab'ом реализовать
, работы подволило много ..

Всего записей: 649 | Зарегистр. 03-06-2009 | Отправлено: 16:11 12-08-2010 | Исправлено: Andryshok, 16:17 12-08-2010
AvGSoft

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
- не получается на него навешать скины - возможно придется дописывать девовские скины и добавлять туда элементы

У меня скины нормально отрабатывают
 
Добавлено:
В зависимости от выбранного скина и mditab раскраску меняет
 
Добавлено:
Вроде мерцание при переключении победил

Код:
procedure TMDITab.Change;
var
  AChild: TForm;
  AParent: TForm;
begin
  if TabIndex > -1 then
  begin
    AChild := TForm(FChilds[TabIndex]);
    AParent := TForm(GetParentForm(Self));  // Ссылка на родительскую форму
    if FCurrentChild <> AChild then
    begin
      //FCurrentChild := AChild;
      //SendMessage(AChild.Handle, wm_NCActivate, wa_Active, 0);
      SendMessage(AParent.ClientHandle, WM_SETREDRAW, 0, 0); // Запрет ее отрисовки
      SendMessage(AChild.Handle, WM_CHILDACTIVATE, 0, 0);
      //AChild.SetFocus;
      //AChild.BringToFront;
      if AChild.WindowState = wsMinimized then
      begin
        if FCurrentChild.WindowState = wsMaximized then
          AChild.WindowState := wsMaximized
        else
          AChild.WindowState := wsNormal;
      end;
      SendMessage(AParent.ClientHandle, WM_SETREDRAW, 1, 0) ; // После перерисовываем родительскую форму
      RedrawWindow(AParent.ClientHandle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN or RDW_NOINTERNALPAINT)
    end;
  end;
end;
 

Осталось только теперь при создании нового child окна

Всего записей: 262 | Зарегистр. 03-07-2006 | Отправлено: 16:29 12-08-2010 | Исправлено: AvGSoft, 16:58 12-08-2010
AvGSoft

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пока пришел к промежуточному варианту при создании child окон делаем

Код:
    LockClientUpdate();
    TfrmChild* frmC = new TfrmChild(this);
    UnLockClientUpdate();
 
мерцания не наблюдалось.
Нашелся еще один баг, при открытии нескольких дочерних окон, а потом их закрытием всех, при попытке открыть дочернее окно оно открывается но не появляется для него закладка, может конечно проблема с Си Билдером буду разбираться

Всего записей: 262 | Зарегистр. 03-07-2006 | Отправлено: 18:46 12-08-2010
Andryshok



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Осталось только теперь при создании нового child окна

Братья, как только кто либо что улучшил - выкладывайте куда нибудь, чтоб другие могли нарабытывать на уже улучшенном коде

Всего записей: 649 | Зарегистр. 03-06-2009 | Отправлено: 08:22 13-08-2010 | Исправлено: Andryshok, 08:23 13-08-2010
regkz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
протестировал с изменениями AvGSoft, ищи причину того, что после закрытия всех вкладок, не создаются новые у себя, у меня на делфях всё работает нормально, вкладки создаются

Всего записей: 1131 | Зарегистр. 16-01-2007 | Отправлено: 08:59 13-08-2010
AvGSoft

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если отключить свойство AutoAdd и в ручном режиме вкладки создавать при создании окна и удалять при закрытии окна эфект
Цитата:
при открытии нескольких дочерних окон, а потом их закрытием всех, при попытке открыть дочернее окно оно открывается но не появляется для него закладка,
не наблюдается.

Всего записей: 262 | Зарегистр. 03-07-2006 | Отправлено: 09:31 13-08-2010
regkz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот ссылка проекта с изменениями AvGSoft
http://www.onlinedisk.ru/file/494729/
 
Добавлено:

Цитата:
Если отключить свойство AutoAdd и в ручном режиме вкладки создавать при создании окна и удалять при закрытии окна эффект не наблюдается.

вот в чём дело, я вручную вкладки добавлял, мой пример в архиве с компонентом лежит
 
Добавлено:
и, кстати, не появляется только первая вкладка, все остальные появляются, при их закрытии первая появляется после закрытия последней видимой вкладки

Всего записей: 1131 | Зарегистр. 16-01-2007 | Отправлено: 09:46 13-08-2010 | Исправлено: regkz, 09:46 13-08-2010
AvGSoft

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
regkz
она появляется и если все формы в normal режим перевести и переключиться на ту форму вкладки которой нет, она сразу появляется в общем надо в сторону AutoAdd будет посмотреть. Пока копать не когда.

Всего записей: 262 | Зарегистр. 03-07-2006 | Отправлено: 10:40 13-08-2010
regkz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
надо в сторону AutoAdd будет посмотреть

как раз сейчас этим занимаюсь

Всего записей: 1131 | Зарегистр. 16-01-2007 | Отправлено: 10:49 13-08-2010
Andryshok



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мужик, какие есть у кого соображения по поводу обработки события кнопки закрыть на табах?

Всего записей: 649 | Зарегистр. 03-06-2009 | Отправлено: 08:25 16-08-2010
regkz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
какие есть у кого соображения по поводу обработки события кнопки закрыть на табах?

нужно делать что-то типа этого:

Код:
procedure TMainForm.MDITab1CanClose(Sender: TObject; var ACanClose: Boolean);
begin
 MDITab1.RemoveTab(MDITab1.ActiveChild);
end;

но тогда удаляется сразу 2 вкладки, я так понимаю нужно перегрузить девовский обработчик закрытия вкладки
 
Добавлено:
хотя этот вариант тоже не избавляет от ошибки, от события OnTabRemove - эффект тот же, из списка вкладоки удаляются не корректно

Всего записей: 1131 | Зарегистр. 16-01-2007 | Отправлено: 11:07 16-08-2010
Andryshok



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так, так.... разгребу работу займусь... попробую ищо добавить и посылку сообщения о закрытии дочерней форме

Всего записей: 649 | Зарегистр. 03-06-2009 | Отправлено: 08:36 17-08-2010
regkz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
тоже пока занят, но функцию закрытия вкладки добавил, скачать можно здесь
http://www.onlinedisk.ru/file/498933/

Всего записей: 1131 | Зарегистр. 16-01-2007 | Отправлено: 10:44 20-08-2010
Andryshok



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
тоже пока занят, но функцию закрытия вкладки добавил, скачать можно здесь

Да, блин как только начинаешь что нибудь в своих интересах делать, обязательно нагрузят разной фигней

Всего записей: 649 | Зарегистр. 03-06-2009 | Отправлено: 09:13 24-08-2010
SIgor33

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Да, блин как только начинаешь что нибудь в своих интересах делать, обязательно нагрузят разной фигней

Ты конечно извини то хочется как лучше. Чтобы  с пользой для всех а то зачем было размещать здесь

Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 09:20 25-08-2010
regkz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
любопытная ссылочка  
http://64.237.51.139/blogs/thinking/archive/2010/08/16/vcl-tabbed-mdi-multiple-document-interface.aspx по теме
ждём нового релиза девок...

Всего записей: 1131 | Зарегистр. 16-01-2007 | Отправлено: 07:06 27-08-2010
Andryshok



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да похоже на то..., в net эта фишка есть, видимо разрабы тож ходят на форум и возможно увидели наши телодвижения, ну и как говорится спрос рождает предложение, видимо не зря мы тут ж....пы напрягаем,  им тоже не наплевать
 

Цитата:
Ты конечно извини то хочется как лучше. Чтобы  с пользой для всех а то зачем было размещать здесь
Ты меня неправильно понял - в смысле фигней - это на работе в смысле надают работы

Всего записей: 649 | Зарегистр. 03-06-2009 | Отправлено: 14:33 27-08-2010 | Исправлено: Andryshok, 00:40 29-08-2010
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » MDITab на основе TcxTabControl


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru