Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с отображением форм DevExpress 
V
    Опции темы
Voyager
Дата 13.4.2007, 18:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



Здравствуйте!

Проблема вот в чём: форма(XtraForm или RibbonForm), на которой расположены DevExpress-овские компоненты или Ribbon c закладочками и т.п., прорисовывается достаточно медленно и по-частям, что совсем не радует глаз. Причем происходит это даже на "мощных" компах.

Пытался решить эту проблему с помощью св-ва Opacity (прозрачность формы).
Перепробывал несколько вариантов, но у всех из них есть свои недостатки:

1) не работает как надо, если в MainForm_Load произойдет Exeption
Код

    public partial class MainForm : DevExpress.XtraBars.Ribbon.RibbonForm
    {
        public MainForm()
        {
            InitializeComponent();
            if (!DesignMode)
            {
                this.Opacity = 0.0;
                Application.Idle += new EventHandler(Application_Idle);
            }
        }

        void Application_Idle(object sender, EventArgs e)
        {
            if (this.Opacity != 1.0)
            {
                this.Opacity = 1.0;
            }
        }
}



2) если вообще не будет контролов, то куда цеплять Paint ?
Код

 public partial class SimpleRibbon : DevExpress.XtraBars.Ribbon.RibbonForm
    {
        public SimpleRibbon()
        {
            InitializeComponent();
            for (int i = Controls.Count-1; i >= 0; i--)
            {
                if (Controls[i].GetType().GetProperty("Painter") == null)
                {
                    Opacity = 0;
                    Controls[i].Paint += new PaintEventHandler(MyPaint);
                    break;
                }

            }
        }

       private void MyPaint(object sender, PaintEventArgs e)
        {
            Opacity = 1;
        }

    }


Если кто-нибудь уже решал и решил эту проблему поделитесь пожалуйста. 
Заранее спасибо
PM   Вверх
mr.DUDA
Дата 14.4.2007, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Изврат, но на таких же "медленных" формах из DotNetBar у меня работало:

Код

           // if true, no form painting will be allowed
           bool _paintDisabled;

...

           public MainForm()
           {
                      if (!this.DesignMode)
                                 _paintDisabled = true;

                      InitializeComponent();
           }


...

           protected override void OnLoad(EventArgs e)
           {
                      base.OnLoad(e);

                      if (this.DesignMode) return;

                      // force form to be refreshed once, but because it flickers - do it via WM_PRINT WinAPI message
                      using (Graphics gr = this.CreateGraphics())
                      {
                                 IntPtr hdc = gr.GetHdc();
                                 try
                                 {
                                            int parameters = (int)(PRF_CHILDREN | PRF_NONCLIENT | PRF_CLIENT);
                                            SendMessage(this.Handle, WM_PRINT, hdc, parameters);
                                 }
                                 finally
                                 {
                                            gr.ReleaseHdc(hdc);
                                            _paintDisabled = false;
                                 }
                      }
           }

...

        protected override void WndProc(ref Message m)
        {
            if (_paintDisabled)
            {
                int msg = m.Msg;
                if (msg == WM_PAINT || msg == WM_PAINTCLIPBOARD || msg == WM_PAINTICON
                    || msg == WM_ERASEBKGND)
                {
                    m.Result = IntPtr.Zero;
                    return;
                }
            }

            base.WndProc(ref m);
        }

        private const UInt32 WM_PAINT = 0x000F;
        private const UInt32 WM_NCPAINT = 0x0085;
        private const UInt32 WM_PAINTCLIPBOARD = 0x0309;
        private const UInt32 WM_PAINTICON = 0x0026;
        private const UInt32 WM_ERASEBKGND = 0x0014;
        private const UInt32 WM_PRINT = 0x0317;
        private const UInt32 WM_PRINTCLIENT = 0x0318;
        const int WM_SYSKEYDOWN = 260;

        private const uint PRF_CHECKVISIBLE = 0x00000001;
        private const uint PRF_NONCLIENT = 0x00000002;
        private const uint PRF_CLIENT = 0x00000004;
        private const uint PRF_ERASEBKGND = 0x00000008;
        private const uint PRF_CHILDREN = 0x00000010;
        private const uint PRF_OWNED = 0x00000020;

        [DllImport("User32.dll")]
        public static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, int lParam);

...




--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.