![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Тоже вариант.
I'm learning to live...
|
![]() |
![]() |
![]() |
#12 |
Форумчанин
Регистрация: 05.04.2008
Сообщений: 244
|
![]()
Stilet - только вариант не работающий. А что с ошибкой Вашего варианта? Ее можно исправить? спасибо.
|
![]() |
![]() |
![]() |
#13 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Если чесно у меня никаких ошибок не выдает, даже не представляю что там за чепуха.
Попробуй посмотри какие параметры принимает CreateThread Может в 7-рке они ее изменили.
I'm learning to live...
|
![]() |
![]() |
![]() |
#14 |
Форумчанин
Регистрация: 05.04.2008
Сообщений: 244
|
![]()
просто CreateThread есть модуле Windows (в справке ее нет, хотя ошибку компилятор пишет выделяя @t), но вот что я нашел в delphi 2007:
SHCreateThread Function -------------------------------------------------------------------------------- Creates a thread. Syntax BOOL SHCreateThread( LPTHREAD_START_ROUTINE pfnThreadProc, VOID *pData, DWORD dwFlags, LPTHREAD_START_ROUTINE pfnCallback ); Parameters pfnThreadProc [in] Pointer to an application-defined function of the LPTHREAD_START_ROUTINE type. If a new thread was successfully created, this application-defined function is called in the context of that thread. SHCreateThread does not wait for the function pointed to by this parameter to complete before returning to its caller. The application-defined function's return value is the exit code of the thread. pData [in] Pointer to an application-defined data structure that contains initialization data. It is passed to the function pointed to by pfnThreadProc and, optionally, pfnCallback. dwFlags [in] Flags that control the behavior of the function. One or more of the CTF constants. pfnCallback [in] Pointer to an optional application-defined function of the LPTHREAD_START_ROUTINE type. This function is called in the context of the created thread before the function pointed to by pfnThreadProc is called. It will also receive pData as its argument. SHCreateThread will wait for the function pointed to by pfnCallback to return before returning to its caller. The return value of the function pointed to by pfnCallback is ignored. Return Value Returns TRUE if the thread is successfully created, or FALSE otherwise. Remarks The function pointed to by pfnThreadProc and pfnCallback must take the following form. DWORD WINAPI ThreadProc(LPVOID pData) { ... } The function name is arbitrary. The pData parameter points to an application-defined data structure with initialization information. Function Information Minimum DLL Version shlwapi.dll version 5.0 or later |
![]() |
![]() |
![]() |
#15 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
Код Стилета у меня работает без проблем, только кнопку нужно большую сделать чтобы заценить, он только уменьшает. Ничего в нем особенного, кроме того что он поток создает, принцип анимации все тот же.
Тут главное правильно подобрать интервал и шаг, тогда будет красиво. Если высчитать формулу (пример с формой приводили), можно сделать с замедлением тогда еще красивее будет.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 10.04.2008 в 15:52. |
![]() |
![]() |
![]() |
#16 |
Форумчанин
Регистрация: 04.10.2007
Сообщений: 106
|
![]()
Нужно определиться с термином "плавно". Это означает что значения скорости изменяются (ускорение либо равно нулю лиюбо изменяется монотонно) равномерно.
Но ускорение - производная от скорости, а скорость есть первая производная от координаты. А значение координаты описывается некоторой функцией времени. значения времени мы будем перебирать используя TTimer, задавая различные значения Interval мы лишь изменяем "масштаб". далее x=t, или количеству интервалов (конкретные значения интревалов не важны). Рассмотрим и сравним некоторые простые функции, пытаясь найти подходящую нам. --- линейная функция общий вид: y=k*x+b графиком является прямая скорость величина постоянная, следовательно ускорение равно нулю Решение: такая функция подходит. частный случай: y=x (k=1, b=0) //t-счетчик таймера t:integer; //y-используемая функция y:double; ... y=t; Panel1.Height :=Round(y); //в зависимости от Interval может выглядеть достаточно быстро //на каждый проход таймера есть увеличение высоты ... частный случай: y=0,05*x +30 (k=0,05, b=30) //t-счетчик таймера t:integer; //y-используемая функция y:double; ... y=0,05*t+20; Panel1.Height :=Round(y); //если хотим уменьшать высоту то нужно ввести некоторое максимальное значение высоты и от него отнимать y: //MaxHeight:integer; переменная(можно константу) задающая максимальное значение высоты // Panel1.Height :=MaxHeight - Round(y); //на каждые 20 проходов таймера (0,05=1/20) увеличивается значение высоты, //30 - начальное значение высоты (в момент времени t=0) //можно использовать не только функцию Round ... --- квадратичная функция общий вид: y=a*x^2+b*x+c график функции: парабола (U-образный график) a-определяет наклон ветвей параболы (чем больше тем больше ускорение) b-определяет наклон ветвей параболы (чем больше тем больше ускорение) c-начальное смщение графика по оси х (минимальное значение) скорость меняется, ускорение сначала снижается, затем растет Решение: не подходит к данным условиям задачи, но можно использовать для получения "фишки" - панель сначала медленно, а затем все быстрее растет в размерах, но приближась к макисмуму замедляется и медленно останавливается. частный случай: y=x^2+x+50 (a=1, b=1, c=50) //t-счетчик таймера t:integer; //y-используемая функция y:double; ... y=t*t+t+50; Panel1.Height :=Round(y); //если хотим уменьшать высоту то нужно ввести некоторое максимальное значение высоты и от него отнимать y: //MaxHeight:integer; переменная(можно константу) задающая максимальное значение высоты // Panel1.Height :=MaxHeight - Round(y); //50 - начальное значение высоты (в момент времени t=0) ... частный случай: y=0,05*x^2+x+50 (a=0,05, b=1, c=50) //t-счетчик таймера t:integer; //y-используемая функция y:double; ... y=0,05*t*t+t+50; Panel1.Height :=Round(y); //если хотим уменьшать высоту то нужно ввести некоторое максимальное значение высоты и от него отнимать y: //MaxHeight:integer; переменная(можно константу) задающая максимальное значение высоты // Panel1.Height :=MaxHeight - Round(y); //50 - начальное значение высоты (в момент времени t=0) //на каждые 20 проходов таймера (0,05=1/20) увеличивается значение высоты, ... --- экспоненциальная функция общий вид: y=exp(k*x) график: экспонента (возрастающая кривая) скорость меняется(растет), ускорение растет Решение: не подходит к данным условиям задачи, но можно использовать ... частный случай: y=exp(x) (k=1) //t-счетчик таймера t:real; //y-используемая функция y:double; ... y=exp(t); Panel1.Height :=Round(y); //если хотим уменьшать высоту то нужно ввести некоторое максимальное значение высоты и от него отнимать y: //MaxHeight:integer; переменная(можно константу) задающая максимальное значение высоты // Panel1.Height :=MaxHeight - Round(y); === :) типа школа, типа алгебра, типа 9класс...
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем |
![]() |
![]() |
![]() |
#17 |
Старожил
Регистрация: 06.08.2007
Сообщений: 2,183
|
![]()
У меня код от Stilet работает.
___________________________________ _________________________ Delphi 7 |
![]() |
![]() |
![]() |
#18 |
Форумчанин
Регистрация: 05.04.2008
Сообщений: 244
|
![]()
У меня на delphi 2007 код от Stilet тоже уже работает. Вся "петрушка" в том, что процедуру t нельзя объявлять ни где кроме как:
private { Private declarations } public { Public declarations } end; procedure t; var Form1: TForm1; А я ее поставил изначально, чтобы не писать постоянно перед кнопкой Form1 в процедуре t в private. если объявить эту процедуру перед var то все работает. Только вот вопрос почему ее нельзя отнести ни в private, ни в public? И как будет выглядеть код если нужно сделать обратную процедуру -свернуть кнопку? Спасибо всем! |
![]() |
![]() |
![]() |
#19 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
Чтобы засунуть ее в private или в public, она должна быть методом класса TForm1. Для этого ее нужно оформить так (уже в коде, после implimentation): procedure TForm1.t; В описание формы либо вручную поместить, либо поставить курсор в заголовок и в контекстном меню нажать Complete class at cursor.
p.s. Книги по Дельфи рулят
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
![]() |
![]() |
![]() |
#20 |
Форумчанин
Регистрация: 05.04.2008
Сообщений: 244
|
![]()
mutabor - я имено так и делал, но выдается ранее описанная ошибка. если не сложно приведеитпе пример, чтобы визуально можно было понять ошибку. Спасибо
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Дано четырехзначное число, заданное в символьном виде, например, '1954'. Напечатать его текстом, например | gred | Помощь студентам | 13 | 31.03.2008 22:24 |
Внедрить контрол в FlexGrid | beryllium | Общие вопросы .NET | 0 | 21.02.2008 01:09 |
Плавно выпадающее меню для Mozilla Firefox | мЕхаил =) | JavaScript, Ajax | 6 | 22.12.2007 23:46 |
Как создать программу-панель (как панель Msoffice), чтобы была поверх всех окон | Romanbl4 | Общие вопросы Delphi | 6 | 27.06.2007 17:23 |
Как плавно поменять цвет формы | гера | Помощь студентам | 1 | 20.04.2007 15:35 |