Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нет прорисовки нормальной, как сделать? 
:(
    Опции темы
MacTep
Дата 19.1.2005, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



Всем привет! У меня такой вопрос: как сделать так, чтобы после выполнения какого-либо действия в программе, происходило сохранение данных в ini-файл, но так, чтобы процесс сохранения этих данных был виден пользователю. Сам процесс сохранения данных и работа с ini-файлами не вызывает никаких затруднений, но вот визуализация данного процесса... В момент сохранения данных я показываю форму, на которой лежит компонент ProgressBar. Выполняю увеличение свойства Position у данного компонента. Но вот беда, у меня во время выполнения процесса сохранения данных виден только ProgressBar, а два лейбла, в которых написано пояснения для пользователя о том, что же в данный момент происходит, не отображаются. Они становятся видимыми только после того, как цикл заполнения ProgressBar'а закончит свою работу! Как мне сделать так, чтобы перед заполнением ProgressBar'а были видны лейблы? Спасибо!


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
_hunter
Дата 19.1.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



делай Application.ProcessMessages()


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
z-END
Дата 19.1.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



или Label.Update;


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
_hunter
Дата 19.1.2005, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



тоже вариант, но обновленые метки и прогресс бар на необновленной форме выглядят довольно странно smile


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
MacTep
Дата 19.1.2005, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



Цитата
делай Application.ProcessMessages()
а что это вообще? Можно подробнее?
Добавлено @ 14:14
Вот код:
Код

procedure Save;
var i:integer;
   s:string;
begin
 //сохранение настроек таблицы данных в ini-файл
 SaveChange.ProgressBar1.Max:=26;
 SaveChange.ProgressBar1.Position:=0;
 for i:=0 to 25 do
   begin
     s:='Col'+IntToStr(i)+'Width';
     WriteIni('TableOptions',s,IntToStr(Form3.DBGridEh1.Columns[i].Width));
     SaveChange.ProgressBar1.Position:=SaveChange.ProgressBar1.Position+1;
   end;
end;

procedure TSaveChange.FormPaint(Sender: TObject);
begin
 Application.ProcessMessage;
 Save;
end;


Но это не помогает!


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
z-END
Дата 19.1.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



_hunter а если использовать его, то можно наткнуться на неприятности, а именно:
другие контролы смогут быть задействованы во время выполнения цикла, а если на форме есть контролы влияющие на цикл то, какой-нить злобный Ю-зверь кликнув на онный котрол получит ошибку, чем будет удивлен.

Цитата(_hunter @ 19.1.2005, 14:04)
обновленые метки и прогресс бар на необновленной форме выглядят довольно странно

тады можно Form.Update;

Добавлено @ 14:17
Application.ProcessMessage в цикл засунь


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
_hunter
Дата 19.1.2005, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



вызов этого метода заставляет Application все, посланные ему, сообщения
Добавлено @ 14:20
z-END, контролы, могущие повлиять на процесс, следует блокировать smile ( дабы соблазна у пользователя даже не возникло )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
MacTep
Дата 19.1.2005, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



Поместил в цикл, все работает. Только вот теперь не соображу, как же такую форму закрыть? Простомы методом Close она не закрывается, просто никак не реагирует! Вот лажа! А в каком обработчике событий писать, не знаю. Плиз, подскажите! smile


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
_hunter
Дата 19.1.2005, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



останови цикл -- дожна закрыться


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
z-END
Дата 19.1.2005, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Попробуй так (код непроверял но должно быть зер гуд)
Код

procedure SaveIni;
begin
Screen.Cursor := crHourGlass;
SaveChange := TSaveChange.Create(Application);
SaveChange.Show;
SaveChange.DoSave;
FreeAndNil (SaveChange);
Screen.Cursor := crDefault;
end;
...
{далее в SaveChange public процедура}
procedure TSaveChange.DoSave;
var i: Integer;
begin
SaveChange.ProgressBar1.Max := 26;
SaveChange.ProgressBar1.Position := 0;
for i := 0 to 25 do
  begin
    s:='Col'+IntToStr(i)+'Width';
    WriteIni('TableOptions',s,IntToStr(Form3.DBGridEh1.Columns[i].Width));
    SaveChange.ProgressBar1.Position:=SaveChange.ProgressBar1.Position+1;
    Application.ProccessMessages;
  end;
end;



--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Akella
Дата 19.1.2005, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Application.ProccessMessages
в этот момент программа приостанавливает, например цикл и дает системе возможность отработать все сообщения, прорисовки, и не только твоего приложения.
Код

For i:=0 to 100000 do begin
//что-то делаем
ProcessBar1.Position:=i;//выводим процесс
Application.ProccessMessages;//без этой строки ProcessBar будет стоять на месте
and;

PM MAIL   Вверх
MacTep
Дата 19.1.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



Цитата
останови цикл -- дожна закрыться
как это должна закрыться? ведь никто же не вызывал метод закрытия окна! как так? поясните, пожалуйста. Прорисовывает уже нормально, но вот закрыть после прорисовки окно не могу! спасибо!


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
_hunter
Дата 19.1.2005, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



должна закрыться при вызове соотв. метода smile

ты, лучше, код покажи -- явно там косяки


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Rakhim
Дата 19.1.2005, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Процедуру Save надо убрать из метода FormPaint (а то эта процедура постоянно вызывается при прорисовке )
PM MAIL   Вверх
MacTep
Дата 19.1.2005, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



Я выяснил причину ошибки. Форма была модальной! Я убрал этот косяк и все нормально работает. Но вот беда, нельзя ли сделать так, чтобы и модальная форма нормально закрывалась? А то получается, только немодальной пользоваться, да?


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

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


 




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


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

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