Архив исходников программ, модулей и компонентов на Delphi


Начальная страница

Поиск по базе



Операционная система
Настройка приложения
Взаимодействия приложений
Файлы и директории
Строки и символы
Математика
Базы данных
Интернет и сеть
Мультимедиа
Аппаратная часть
VCL
Другие разделы [0]
 

Количество записей в базе - 537
Сегодня добавлено – 0

Внешний вид компонентов



Вернуться к списку функций
 Пошаговый(плавный) переход (перетекание) размеров виз. компонента в указанные размеры

 Прислал: VID (Махачкала) ( 26 апреля 2004 г. )
©  Собственное написание (VID)
 Описание:
Процедура плавно, с шагом Step и с интервалом Interval (мс) между шагами, преобразует размер и положение виз. компонента Control в координаты заданные в P.

 Зависимости:
Windows, Controls, Forms

 Ограничения:
Проверено в D5, Win2k/XP

 Исходный текст:
{ **** UBPFD *********** by http://kladovka.net.ru/delphibase/ ****
>> Пошаговый(плавный) переход (перетекание) размеров виз. компонента в указанные размеры

Процедура плавно, с шагом Step и с интервалом Interval (мс) между шагами, преобразует размер и положение виз. компонента Control в координаты заданные в P.

Зависимости: Windows, Controls, Forms
Автор:       VID, ICQ:132234868, Махачкала
Copyright:   Собственное написание (VID)
Дата:        26 апреля 2004 г.
***************************************************************** }

Procedure ChangeControlRect(Control:TControl; P:TRect; Step:Integer; Interval:Cardinal);
Var Actualstep:Integer;
    Rect:TRect;
  function GetStep(I1, I2, Step:Integer):Integer;
  begin
    //I1 - Start, I2 - Finish
    Result := 0;
    IF I1 > I2 then
    begin
      I1 := I1 - Step;
      IF I1 < I2 then Result := (I1 - I2)*(-1) else Result := Step * (-1);
    end else
    IF I1 < I2 then
    begin
      I1 := I1 + Step;
      IF I1 > I2 then Result := I2 - I1 else Result := Step;
    end;
  end;

  procedure Delay(ms:DWORD);
  var TheTime : DWORD;
  begin
    TheTime := GetTickCount + ms;
    while GetTickCount < TheTime do Application.ProcessMessages;
  end;

begin
  IF Control = nil then exit;
  Repeat
    Rect := Control.BoundsRect;

    ActualStep:=GetStep(Rect.Top, P.Top, Step);
    IF Actualstep <> 0 then Rect.Top := Rect.Top + Actualstep;

    ActualStep:=GetStep(Rect.Bottom, P.Bottom, Step);
    IF Actualstep <> 0 then Rect.Bottom := Rect.Bottom + ActualStep;

    ActualStep:=GetStep(Rect.Left, P.Left, Step);
    IF ActualStep <> 0 then Rect.Left := Rect.Left + ActualStep;

    ActualStep:=GetStep(Rect.Right, P.Right, Step);
    IF ActualStep <> 0 then Rect.Right := Rect.Right + ActualStep;

    Control.BoundsRect := Rect;
    Delay (Interval);
    Application.ProcessMessages;
  Until (Control.BoundsRect.Top = P.Top) and (Control.BoundsRect.Bottom = P.Bottom)
    and (Control.BoundsRect.Left = P.Left) and (Control.BoundsRect.Right = P.Right);
end;

 Пример использования:
Допустим на форме лежит Panel1 и Panel2.
Panel1 расположен в верхнем левом углу формы а Panel2 в правом нижнем.

делаем так:
ChangeControlRect(Panel1, Panel2.BoundsRect, 2, 1);


Вернуться к списку функций

Наверх ▲