Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 460

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
На форме есть компонент Panel. Изначально его параметры Height:=25,Top:=0. На Panel есть кнопка высотой 25. Надо плавно (т.ё. с шагом и паузой) увеличить Panel.Height до определённого размера, при этом кнопка всё время должна оставаться внизу Panel. Код программы внизу. Проблема в том, что кнопка при расширении Panel кнопка исчезает, а появляется только после выполнении процедуры. Как это исправить?

Приложение:
  1. Hmin=25;
  2. dh=10;
  3. Hmax=550;
  4. Bh=25;
  5. // îòêðûâàåì ïàíåëü
  6. x:=Hmin+dh;
  7. repeat
  8. FormF.PanelG.Height:=x;
  9. FormF.BitBtnG.Top:=x-Bh;
  10. sleep(1);
  11. x:=x+dh;
  12. until x>=Hmax;
  13. sleep(1);
  14. FormF.PanelG.Height:=Hmax-Bh;
  15. FormF.PanelG.Height:=Hmax;


SKoch92 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: SKoch92 (статус: Посетитель)
Вопрос отправлен: 26 февраля 2009, 17:29
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Ученый

Здравствуйте, SKoch92! Предложу свое решение....
Кидаем на форму Timer и в обработчеке для него пишем такой код:

procedure TForm1.Timer1Timer(Sender: TObject);
var
shag:integer;
begin
shag:=20;
panel1.Height:= panel1.Height+shag;
button1.Top:= button1.Top+shag;
  if panel1.Height>160 then timer1.Enabled:=false;
   end;
Будет пошаговое движение, причем кнопка будет постоянно снизу....



P.S. Удачи)))

Ответ отправил: Ученый (статус: 8-ой класс)
Время отправки: 26 февраля 2009, 17:44
Оценка за ответ: 5

Комментарий к оценке: Но можно ли это сделать без Timer?

Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 1 марта 2009, 13:35; участников в обсуждении: 4.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 26 февраля 2009, 18:38 [#1]:

для того, чтобы кнопка была постоянно внизу совсем необязательно высчитывать ее положение. Достаточно для кнопки поставить свойство Anchors: top=false, bottom=true
SKoch92

SKoch92 (статус: Посетитель), 28 февраля 2009, 23:55 [#2]:

Можно ли заставить нормально работать компоненты формы во время выполнения процедур.(К примеру если во время больших вычислений в Image рисовать полоски(как полоса загрузки), то полоски нарисуются только после всех вычислений)
Ученый

Ученый (статус: 8-ой класс), 1 марта 2009, 09:39 [#3]:

SKoch92 зачем вам рисовать полосу загрузки????? есть же готовый компонент ProgressBar... Или вы не ищете легких путей ?:)
Вадим К

Вадим К (статус: Академик), 1 марта 2009, 10:12 [#4]:

to SKoch92
Можно использовать костыль с Application.ProcessMessage;, но правильно и красиво - использовать потоки (те, что thread)
Галочка "подтверждения прочтения" - вселенское зло.
SKoch92

SKoch92 (статус: Посетитель), 1 марта 2009, 12:26 [#5]:

Как создать поток, который отвечал бы за обновление формы(т.е. в процедуре изменяется положение компонентов и т.п., и при этом все изменения сразу же отображались в форме)?
Вадим К

Вадим К (статус: Академик), 1 марта 2009, 12:34 [#6]:

Это не совсем хорошо, с потоков менять положение компонентов, хотя и возможно.
Почему не делаете через таймер?
Галочка "подтверждения прочтения" - вселенское зло.
SKoch92

SKoch92 (статус: Посетитель), 1 марта 2009, 13:35 [#7]:

Сделал через Timer. Спасибо.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:42
Выполнено за 0.02 сек.