powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (.Label.Caption) Не присваивается значение в цикле
19 сообщений из 19, страница 1 из 1
(.Label.Caption) Не присваивается значение в цикле
    #33583140
JuniorFoxik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста!
Столкнулась тут с непонятным явлением...
Суть проблемы: реализован прием данных из Excel - в цикле просто перебираем все ячейки сверху вниз, слева направо. В екселевском листе 32 колонки- параметр и его значение за каждый день месяца. На форме есть ПрогрессБар (MS ProgressBarControl) и Label.
А в теле цикла вот такой код:
Код: plaintext
1.
2.
ThisForm.ProgressBar.Value=ThisForm.ProgressBar.Value+ 1 
ThisForm.Label.Caption=m.lcCell1
Так вот ПргрессБар бежит, все нормально, а Лейбл не меняется (а в нем должно выводиться как раз название параметра). И только когда прием заканчивается, там появляется значение самой последней ячейки.
VFP9,WinXPSP2,Office2003.
Спасибо.
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33583155
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавь строку после ThisForm.Label.Caption=m.lcCell1:

DOEVENTS FORCE

С уважением, Алексей
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33583174
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для обновления Label`а нужно выполнять его Рефрешь
Например:
Код: plaintext
1.
2.
3.
ThisForm.ProgressBar.Value=ThisForm.ProgressBar.Value+ 1 
ThisForm.Label.Caption=m.lcCell1
ThisForm.Label.Refresh()

Но я бы тебе посоветовал вместо Label использовать TextBox
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33583189
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Refresh тут не причем. Тем более для Lable, который не имеет ControlSource.
С уважением, Алексей
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33583219
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KДобавь строку после ThisForm.Label.Caption=m.lcCell1:

DOEVENTS FORCE

С уважением, Алексей
Согласен с тобой.
Hi, JuniorFoxik ! Аналогичный вопрос я задавал. Смотри тут.
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33583240
JuniorFoxik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять я дискуссию замутила...
Спасибо большое, Алексей. После DOEVENTS FORCE все заработало!

А Refresh здесь действительно непричем. Я пробовала.
И с Refresh ТекстБокса тоже не получается, я тоже пыталась.

Ладно, меня сейчас в целях общего ликбеза интересует с чем это связано. Ведь в русской помощи к VFP3 я не нашла DOEVENTS FORCE. Там-то как выкручивались?
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33583251
JuniorFoxik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Владимир! Ну не шмогла я найти эту ссылку! Ключевое слово DOEVENTS, но его-то я и не знала...

С чем это связано, теперь понятно. А как раньше выкручивались, до DOEVENTS?
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33583664
JuniorFoxik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Н-да, а скорость упала на пару-тройку порядков - файл стал приниматься раза в три медленнее :( Видимо, придется обойтись без такой "визуализации".

Еще раз всем спасибо!
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33583681
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorFoxikН-да, а скорость упала на пару-тройку порядков - файл стал приниматься раза в три медленнее :( Видимо, придется обойтись без такой "визуализации".

Еще раз всем спасибо!
Я в таком случае делаю индикатор прогресса через:
Код: plaintext
1.
2.
3.
4.
5.
6.
THISFORM.LockScreen = .T.
WAIT WINDOW ... NOWAIT NOCLEAR AT WROWS()/ 2 , WCOLS()/ 2 
...
ЦИКЛ.
...
WAIT CLEAR
THISFORM.LockScreen = .F.
С уважением, Алексей.
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33583727
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorFoxikН-да, а скорость упала на пару-тройку порядков - файл стал приниматься раза в три медленнее :( Видимо, придется обойтись без такой "визуализации"...Что-то уж очень резко у тебя упала скорость. Да же не верится. Что там такое ты крутишь?
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33583750
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorFoxikН-да, а скорость упала на пару-тройку порядков - файл стал приниматься раза в три медленнее :( Видимо, придется обойтись без такой "визуализации".
Не обязательно. Просто надо поставить "таймер". Обновление "кратинки" не на каждом шаге, а, например, раз в 5 секунд. Примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
LOCAL lnSeconds, lnDelta
lnDelta =  5 
lnSeconds = Seconds()
FOR ...

...
ThisForm.ProgressBar.Value=ThisForm.ProgressBar.Value+ 1 
ThisForm.Label.Caption=m.lcCell1
IF Seconds() - m.lnSeconds >= m.lnDelta
	DOEVENTS FORCE
	m.lnSeconds = Seconds()
ENDIF
...

ENDFOR

Можно задать "шаг" обновления не по времени, а, например, по проценту выполнения. Через каждые 5%.

Вообще-то, если индикотор прогресса - это отдельный класс, то весь этот код, включая DOEVENTS можно встроить в сам класс.
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33583789
JuniorFoxik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СА JuniorFoxikН-да, а скорость упала на пару-тройку порядков - файл стал приниматься раза в три медленнее :( Видимо, придется обойтись без такой "визуализации"...Что-то уж очень резко у тебя упала скорость. Да же не верится. Что там такое ты крутишь?

Если упрощенно, то см. мой первый топик. Лист Excel в нем, помимо всяких заголовков, подзаголовков и прочей красоты имеется собственно информация- 400 с небольшим строк- в первой колонке - название некоего параметра, а в столбцах со 2-го по 32-й - значения этого параметра с 1-го по 31 число месяца (ну, или, там по 30-е). Вот. Чтобы отмести все, что не нужно, сначала кручу строки, начиная с "А", как только нахожу строчку с параметром, кручу столбцы по дням. Вот и все. Можно принимать частями, за один или несколько дней и т.п. Excel-файл формирует КИПовская машина, там свой софт, разработка сторонняя.
Вот. Без DOEVENT, с одним прогессБаром все летает. А сним - тормоза.
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33583823
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorFoxik !
Ну ВладимирМ показал тебе, что можно было бы сделать. Так что есть простор для экспериментов.
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33583944
JuniorFoxik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, все понятно.
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33591309
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi JuniorFoxik!

laData =
loXL.Workbooks(какой_надо).Sheets(какой_надо).Range("A1:AG400").Value
Данные из Excel вынимает очень быстро (ты удивишься насколько это быстрее
чем по одной ячейке читать) - потом уже в самом фоксе обрабатывай массив.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33643554
JuniorFoxik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
Hi JuniorFoxik!

laData =
loXL.Workbooks(какой_надо).Sheets(какой_надо).Range("A1:AG400").Value
Данные из Excel вынимает очень быстро (ты удивишься насколько это быстрее
чем по одной ячейке читать) - потом уже в самом фоксе обрабатывай массив.

Posted via ActualForum NNTP Server 1.3

Hi, Igor!

Что-то у меня не получается так :(. Можно чуть поподробней. Вот я создала
Код: plaintext
loXL=CreateObject("Excel.Application")
А дальше как?
Я никогда так не делала...
Спасибо.
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33644901
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, для примера:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
* Создаем объект Excel
loXL=CreateObject("Excel.Application")
* Делаем его видимым (для отладки)
loXL.Visible = .T.
* Создаем новую рабочую книгу
loXL.Workbooks.Add()
* Напоняем ее данными
loXL.Cells( 1 , 1 ).Value =  1 
loXL.Cells( 2 , 1 ).Value =  2 
loXL.Cells( 1 , 2 ).Value =  3 
loXL.Cells( 2 , 2 ).Value =  4 
* Считываем эти данные в массив FoxPro
LOCAL laArray( 1 )
laArray=loXL.Range("A1:B2").Value
* Смотрим, что получили в массиве
?laArray[ 1 , 1 ]
?laArray[ 2 , 1 ]
?laArray[ 1 , 2 ]
?laArray[ 2 , 2 ]

Это просто пример. Показать как работает. Здесь использовано ряд "умолчаний", поэтому в рабочей проге так писать не стоит.

Можно сразу загнать массив в таблицу командой APPEND FROM ARRAY.

PS: Проверял в VFP6SP5.
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33644950
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi JuniorFoxik!

> А дальше как?

А дальше открыть имеющуюся книжку через
loXL.Workbooks.Open('C:\чего_надо.xls'), после чего обращаться как указано
выше, или сразу "запомнить" то что возвращает loXL.Workbooks.Open() в
переменную loBook - тогда обращение сократиться. Листы можно указывать
просто по их индексу (порядковому номеру) - если он первый, то будет
....Sheets(1)...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
(.Label.Caption) Не присваивается значение в цикле
    #33654161
JuniorFoxik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир, Игорь, спасибо, все понятно, все получилось.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (.Label.Caption) Не присваивается значение в цикле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]