StatusBar repaint problem
Printed From: Codejock Forums
Category: Codejock Products
Forum Name: Command Bars
Forum Description: Topics Related to Codejock Command Bars
URL: http://forum.codejock.com/forum_posts.asp?TID=10551
Printed Date: 21 December 2024 at 9:49pm Software Version: Web Wiz Forums 12.04 - http://www.webwizforums.com
Topic: StatusBar repaint problem
Posted By: AndreiKr
Subject: StatusBar repaint problem
Date Posted: 08 May 2008 at 5:14am
Привет, Олег. Имею такую проблему, причем именно в 12 версии. 1. Открываю ADO recordset в асинхронном режиме. Когда я зачитываю данные, такой recordset порождает событие FetchData. В процедуру обработки события FetchData передается параметр Progress, который я вывожу в виде текста в статусбаре. В 11.2.2 было все нормально, текст изменялся в процессе зачитки данных. В 12.0.0 не смотря на то, что событие нормально генерится (я это наблюдаю по Debug.print), статусбар в процессе обработки мертвый. Очевидно, изменен алгоритм прорисовки? 2. На всякий случай делаю следующую вещь - модифицирую функцию вывода текста в статусбар для получения отладочной информации.
Function WriteStatusBarText(InputText As String) On Error GoTo err1 Dim Pane As StatusBarPane Set Pane = tcu.CommandBars.StatusBar.Pane(0) Pane.Text = InputText Set Pane = tcu.CommandBars.StatusBar.Pane(0) Debug.Print Pane.Text Exit Function err1: ErrorReport "WriteStatusBarText" End Function
После вывода в панель текста, на всякий случай перечитываю данные
Вот кусок из Immediate Window Records Affected: 2225 All Records: 34601 Records Affected: 2240 All Records: 34601 Records Affected: 2255 All Records: 34601 Records Affected: 2270 All Records: 34601 Records Affected: 2285 All Records: 34601 Records Affected: 2300 All Records: 34601 Records Affected: 2315 All Records: 34601 Records Affected: 2330 All Records: 34601 Records Affected: 2345 All Records: 34601 Records Affected: 2360 All Records: 34601 Records Affected: 2375 All Records: 34601 Records Affected: 2390 All Records: 34601 Records Affected: 2405 All Records: 34601 Records Affected: 2420 All Records: 34601 Records Affected: 2435 All Records: 34601 Records Affected: 2450 All Records: 34601 Records Affected: 2465 All Records: 34601 Records Affected: 2480 All Records: 34601 Records Affected: 2495 All Records: 34601 Records Affected: 2510 All Records: 34601 Records Affected: 2525 All Records: 34601 Records Affected: 2540 All Records: 34601 Records Affected: 2555 All Records: 34601 Records Affected: 2570 All Records: 34601 Records Affected: 2585 All Records: 34601 То есть мы наблюдаем, что вывод данных в панель статуса происходит, происходит их сохранение, если их можно прочитать из панели. Но прорисовка в статусе в это время не происходит.
Но при этом в статусбаре текст не изменяется, остается содержимое, которое было до начала обработки. Если сделать Ctrl+Break, и посмотреть в статус, то в этот момент данные будут отображены(те, что оказались в момент прерывания).
К сожалению, я не нашел никакого метода, чтобы принудительно вызвать прорисовку панели, что-то вроде Refresh или Repaint.
Что еще интересно. Если я подвешиваю стандартный прогресс в статусбар, то все работает нормально, прогресс идет, все хорошо Set Pane = CommandBars.StatusBar.AddPane(1) Pane.Handle = Me.ProgressBar1.hwnd
Но если я делаю прогресс через Dim ProgressPane As StatusBarProgressPane Set ProgressPane = CommandBars.StatusBar.AddProgressPane(2)
То потом наблюдается та же картина, что и при прорисовке текста. Подскажите, как эту проблему порешать, очень хочется иметь нормальный рабочий статусбар.
|
Replies:
Posted By: Aaron
Date Posted: 08 May 2008 at 6:41am
Hi,
My russian is a little rusty. Think you better try this in english
------------- Product: Xtreme SuitePro (ActiveX) version 15.0.2
Platform: Windows XP (32bit) - SP 2
Language: Visual Basic 6.0
Zero replies is not an option....
|
Posted By: younicke
Date Posted: 08 May 2008 at 7:09am
yeah right!
i didnt understand a word he said.
if you cant speak english maybe you could try some translator over the web so that we may be able to understand what your concerns are
|
Posted By: AndreiKr
Date Posted: 08 May 2008 at 8:17am
Ok, Fellows, I may translate. This question was for Oleg Chernyahovsky, as you know, he speak Russian. My problem in delayed repaint of StatusBar in version 12.0.0, when I write text in StatusBarPane. Problem occured, when application write text intensively, for example, in cycle, or when events follow one for others often.
In version 11.2.2 all works fine.
If I use standard progressbar in statusbar (ControlCustom), all works fine in both versions. If I use ProgressBarPane, I have same problem.
If I use Timer (function, not a control), and write text to statusbar with interval 0.1 sec, it's works, if I write text more frequently, statusbar is frozen before ending execution.
|
Posted By: Oleg
Date Posted: 08 May 2008 at 9:24am
Hi,
try call DoEvents after you set text.
------------- Oleg, Support Team CODEJOCK SOFTWARE SOLUTIONS
|
Posted By: AndreiKr
Date Posted: 08 May 2008 at 10:14am
Yes, Oleg, it's work in usual cycles, and I am very pleased. But in fetch_data event procedure it worsk very strange. Sometimes works, sometimes no...
Now, for this case I'm use timer function, for estimation time, when I may put my text. If delay more then 0.01 sec, it's works normally.
|
Posted By: AndreiKr
Date Posted: 08 May 2008 at 12:49pm
Now I tested my application throuth slowly internet connection. Acyncronous Recordsets with progress in StatusBar works normally without DoEvents. May be, that's right... If connection is fast, for what progress on 2 seconds?..
|
|