Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Сотресание формы


Автор: ShuVaS 23.1.2005, 12:41
Подскажи плизз как мне при старте моего приложения портясти форму около секунды в разные стороны (не сильно токо )
smile

Автор: s-mike 23.1.2005, 12:46
По таймеру случайно изменять позицию. SetBounds тебе поможет.

Автор: ProgrammistDelphi 23.1.2005, 13:20
Встряски формы можно добиться путем изменения движений по вертикали и горизонтали. Путем изменения свойств Form1.Top и Form1.Left

Код


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls;

type
 TForm1 = class(TForm)
   Timer1: TTimer;
   procedure Timer1Timer(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 I: Integer;
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);

begin
if i=0 then
form1.Timer1.Enabled:=false;
//form1.Height:=form1.Height div 2;
//sleep(5);
//form1.Width:=form1.Width div 2;
//sleep(1);
form1.Left:=form1.Left div 2;
sleep(20);
form1.Top:=form1.Top div 2;
sleep(20);
form1.Left:=form1.Left * 2;
sleep(20);
form1.Top:=form1.Top * 2;
sleep(20);
form1.Left:=form1.Left * 2;
sleep(20);
form1.Top:=form1.Top * 2;
sleep(20);
form1.Left:=form1.Left div 2;
sleep(20);
form1.Top:=form1.Top div 2;
sleep(20);
I:=I-1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
I:=10;
end;

end.

форму будет колбасить и плющить ровно столько: I:=10;

Автор: ShuVaS 23.1.2005, 14:57
Неее - а полегче нельзя ??Мне нада чтобы тряслось 1-2 см на екране

Автор: z-END 23.1.2005, 15:15
Код

//Sender - форма которую надо поколбасить
//Amplitude - сила "колбасения"
//DurationMS - время колбасения в 1/1000 секунды (мс)
//Speed - скорость колбасения 1-минимум 255-предел, 0 - максимальная скорость
procedure ShakeForm (Sender: TForm; Amplitude, DurationMS: Integer; Speed: Byte);
var S: Integer;
L,T: Integer;
begin
if not Assigned(Sender) then exit;
S:=GetTickCount;
L:=Sender.Left;
T:=Sender.Top;
with Sender do
while GetTickCount < (S+DurationMS) do
  begin
   Left := L + Random ((Amplitude*2) - (Amplitude div 2));
    Top := T + Random ((Amplitude*2) - (Amplitude div 2));
   Application.ProcessMessages;
   if speed in [1..255] then  sleep (255 div speed);
  end;
end;

Как пользоваться думаю разберешься

Автор: ShuVaS 23.1.2005, 17:13
Спасибо .... именно єто и нада

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)