|
Вопрос # 2 460/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
На форме есть компонент Panel. Изначально его параметры Height:=25,Top:=0. На Panel есть кнопка высотой 25. Надо плавно (т.ё. с шагом и паузой) увеличить Panel.Height до определённого размера, при этом кнопка всё время должна оставаться внизу Panel. Код программы внизу. Проблема в том, что кнопка при расширении Panel кнопка исчезает, а появляется только после выполнении процедуры. Как это исправить?
Приложение: Переключить в обычный режим- Hmin=25;
- dh=10;
- Hmax=550;
- Bh=25;
- // îòêðûâàåì
ïàíåëü
- x:=Hmin+dh;
- repeat
- FormF.PanelG.Height:=x;
- FormF.BitBtnG.Top:=x-Bh;
- sleep(1);
- x:=x+dh;
- until x>=Hmax;
- sleep(1);
- FormF.PanelG.Height:=Hmax-Bh;
- FormF.PanelG.Height:=Hmax;
 |
Вопрос задал: 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 (статус: Посетитель), 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 (статус: Посетитель), 1 марта 2009, 12:26 [#5]:
Как создать поток, который отвечал бы за обновление формы(т.е. в процедуре изменяется положение компонентов и т.п., и при этом все изменения сразу же отображались в форме)?
|
|
Вадим К (статус: Академик), 1 марта 2009, 12:34 [#6]:
Это не совсем хорошо, с потоков менять положение компонентов, хотя и возможно.
Почему не делаете через таймер?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
SKoch92 (статус: Посетитель), 1 марта 2009, 13:35 [#7]:
Сделал через Timer. Спасибо.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|