Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
Delphi 7 Architect
|
Re: Mouseover bei einem Formular...?
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!
|
|
Zitat
|