Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2008, 11:42   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тоже вариант.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.04.2008, 11:54   #12
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию Stilet - только вариант не работающий

Stilet - только вариант не работающий. А что с ошибкой Вашего варианта? Ее можно исправить? спасибо.
SkAndrew вне форума Ответить с цитированием
Старый 10.04.2008, 11:57   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если чесно у меня никаких ошибок не выдает, даже не представляю что там за чепуха.
Попробуй посмотри какие параметры принимает CreateThread Может в 7-рке они ее изменили.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.04.2008, 12:06   #14
SkAndrew
Форумчанин
 
Регистрация: 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
SkAndrew вне форума Ответить с цитированием
Старый 10.04.2008, 12:15   #15
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 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.
mutabor вне форума Ответить с цитированием
Старый 10.04.2008, 19:33   #16
Surgeon
Форумчанин
 
Регистрация: 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 статей!!! удобный поиск, оффлайн сборник, рекомендую всем
Surgeon вне форума Ответить с цитированием
Старый 14.04.2008, 15:59   #17
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение

У меня код от Stilet работает.
___________________________________ _________________________
Delphi 7
Alter вне форума Ответить с цитированием
Старый 14.04.2008, 18:55   #18
SkAndrew
Форумчанин
 
Регистрация: 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?
И как будет выглядеть код если нужно сделать обратную процедуру -свернуть кнопку?
Спасибо всем!
SkAndrew вне форума Ответить с цитированием
Старый 14.04.2008, 21:20   #19
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 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)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 14.04.2008, 22:41   #20
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

mutabor - я имено так и делал, но выдается ранее описанная ошибка. если не сложно приведеитпе пример, чтобы визуально можно было понять ошибку. Спасибо
SkAndrew вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано четырехзначное число, заданное в символьном виде, например, '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