Einzelnen Beitrag anzeigen

neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#8

Re: Mouseover bei einem Formular...?

  Alt 4. Sep 2003, 18:31
Du musst dem Fenster auch die Möglichkeit zum neuzeichnen geben.

einfachsten:
Application.ProcessMessages; professionel:
SetWindowPos
UpdateWindow
verwenden


Ein Beispiel:

Delphi-Quellcode:
procedure SlideWindow(ahwndWin : HWND; arcEnd : TRect; adwTimerInterval : Cardinal);
var rcStart : TRect;
    dwTimerStart,
    dwTimerEnd,
    dwTime : Cardinal;
    iX,
    iY,
    iHeight,
    iWidth : Integer;
    fPos : Double;
begin
  GetWindowRect(ahwndWin, rcStart);

  if fPWApp.smFullDrag and not PWRect.Compare(rcStart, arcEnd) then
     begin
       dwTimerStart := GetTickCount;
       dwTimerEnd := GetTickCount + adwTimerInterval;
       dwTime := GetTickCount;

       while dwTime < dwTimerEnd do
         begin
           fPos := (dwTime - dwTimerStart) / adwTimerInterval;

           iX := rcStart.Left - Round((rcStart.Left - arcEnd.Left) * fPos);
           iY := rcStart.Top - Round((rcStart.Top - arcEnd.Top) * fPos);
           iWidth := PWRect.Width(rcStart) - Round((PWRect.Width(rcStart) - PWRect.Width(arcEnd)) * fPos);
           iHeight := PWRect.Height(rcStart) - Round((PWRect.Height(rcStart) - PWRect.Height(arcEnd)) * fPos);

           SetWindowPos(ahwndWin, 0, iX, iY, iWidth, iHeight,
             SWP_NOZORDER or SWP_NOACTIVATE or SWP_DRAWFRAME);
           UpdateWindow(ahwndWin);
           dwTime := GetTickCount;
         end;
     end;

  SetWindowPos(ahwndWin, 0,
    arcEnd.Left, arcEnd.Top,
    PWRect.Width(arcEnd), PWRect.Height(arcEnd),
    SWP_NOZORDER or SWP_NOACTIVATE or SWP_DRAWFRAME);
  UpdateWindow(ahwndWin);
end;
adwTimerInterval setze ich meist auf 400
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat