Thema: Delphi Form1 vibrien lassen

Einzelnen Beitrag anzeigen

Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#3

Re: Form1 vibrien lassen

  Alt 24. Nov 2005, 15:50
hallo, da ich für mein Programm Simple Timer eine ähnliche Funktion brauchte, poste ich dir mal hier das Ergebnis:

Delphi-Quellcode:
procedure TMainForm.ShakeWindow(const aAmount, aLevel: Integer);
var
  hWindow: HWnd;
  R: TRect;
  E, I, WindowWidth, WindowHeight: Integer;
begin

  hWindow := GetForeGroundWindow;

  // Get metrics
  GetWindowRect(hWindow, R);

  WindowWidth := R.Right - R.Left;
  WindowHeight := R.Bottom - R.Top;

  // big earthquake
  for E := 1 to aAmount do
   begin

    // small quick shaking
    for I := 1 to 10 do
     begin
      MoveWindow(hWindow, R.Left + Random(aLevel), R.Top + Random(aLevel), WindowWidth, WindowHeight, True);
      Application.ProcessMessages;
      Sleep(50 + Random(30));
     end;

    Sleep(300 + Random(500));
   end;

  // Restore old position
  MoveWindow(hWindow, R.Left, R.Top, WindowWidth, WindowHeight, True);
end;
Der Aufruf erfolgt z. B. via ShakeWindow(3, 25). Du kannst das "for I := 1 to 10" natürlich auch noch durch einen variablen Wert ersetzen.

Falls dir was besseres/schöneres einfällt, wäre ich natürlich auch interessiert.

Achja, wg. Taskbar blinken lassen gibt es das hier:

Delphi-Quellcode:
procedure TMainForm.FlashAppWindow;
var
  FWI: FlashWInfo;
begin
  with FWI do
   begin
    cbSize := SizeOf(FWI);
    hwnd := Application.Handle;
    dwFlags := FLASHW_ALL; // and FLASHW_TIMERNOFG; //FLASHW_CAPTION;
    SystemParametersInfo(SPI_GETFOREGROUNDFLASHCOUNT, 0, @FWI.uCount, 0);
    dwTimeout := GetCaretBlinkTime; // div 8;
   end;
  FlashWindowEx(FWI);
end;
  Mit Zitat antworten Zitat