![]() |
Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo
Zitat:
Also jetzt weiß ich wirklich nicht was ich sagen sollte. Einerseits kommt jetzt die Windows 7, anderseits weiß ich, dass viele Anwender noch viele Jahre mit z.b. Windows XP arbeiten werden. Natürlich wollte ich das Global lösen. Also werde ich jetzt mit Spannung dieses Theard beobachten, und falls jemand an einem kleinem Projekt interessiert sein sollte, würde ich natürlich gerne mitmachen, da diese Funktion finde ich wirklich geil. Vielleicht zeigt hier jemand wie kann man das „Schnappen“ eines Fenster abfangen Gruß Muchacho |
Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo
sollte das ganze nicht auch ohne Timer gehen in dem man wm_moving abfängt und darin auswertet ob eine links/rechts Bewegung stattfindet?
|
Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo
Oder WM_WINDOWPOSCHANGING, WM_WINDOWPOSCHANED ...
Die Werte aufzeichnen und abgleichen. Zudem könnte man nun noch die positiven und negativen Positionsänderungen untersuchen und eine ggf. Begrenzung vornehmen. Davon mal abgesehen, tuh ich mir das nicht an und nutze lieber das Feature von Win7. ;) |
Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo
Ich stell mir dieses Feature gerade an meinem Laptop vor. So ganz ohne Maus, aber dafür mit Touchpad...
Das ganze Gesture-Rumgehüppe in Ehren, aber wieso nicht einfach in System-Menü: "Alle anderen minimieren"? |
Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo
Um das Licht einzuschalten reicht auch ein Schalter, aber schöner ist es doch, wenn es überall dort einen Schalter gibt, wo ich den brauchen könnte. Das nennt man dann Komfort.
Bei einem Laptop mag das vielleicht anders sein, aber es gibt ja nicht nur Laptops. Zudem ist es ja nicht nur das Schüttel-Feature an was ich so denke. Zieht man das Fenster an der Titelliste an den linken Rand, dann wird das Fenster auf den halben Bildschirm maximiert. Das Gleiche passiert auf der rechten Seite. Blöd ist: Bei mehr als einem Monitor funktioniert das nur an den Desktop Rändern. Das könnte man in dem Zug auch gleich verbessern. cu Oliver [edit]Soeben gelernt, die Funktionen heißen Aero Shake und Snap[/edit] |
Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo
Zitat:
Es ist was anderes, wenn in einem Program es eine Funktion gibt’s die man nicht benutzt und doch was anderes, wenn eine Funktion nicht vorhanden ist. Es gibt’s Leute die sich an solchen Kleinigkeiten begeistern, wie ich z.B. Zitat:
Gruß Muchacho |
Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo
Zitat:
feststellen ob die Bewegungen schnell oder langsam sind. Also, wie ich bis jetzt denke, einer TTimer wäre hier sinnvoll. Darüber hinaus muss man auch die Anzahl solcher Bewegungen auswerten. Also: Ab einer Ausgangs Position (bevor die erste „schnelle“ Bewegung kommt) fängt die Zeitmessung an und die (was äußerst wichtig ist): Links/Rechts/Oben/Unten-Auswertung. Dieses Teil würde ich gerne programmieren: Auswertung und Beeinflussung der anderen offenen Fenster (egal ob minimiert oder maximiert). Ich muss allerdings diese TForm.Top- Werte aus einer anderen Routine bekommen. Ich hoffe, dass irgend jemand eben diese andere Routine (z.B. mit Hilfe von Hoot) programmieren kann oder zumindest die alles entscheidende Tipps gibt. Gruß Muchacho |
Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo
Liste der Anhänge anzeigen (Anzahl: 1)
Hi allerseits.
Ich finde die Idee recht gut hab mich mal an was ran gewagt. Ist vielleicht noch nicht ganz rund, gerade mit den Schüttel-Variablen, aber sieht meiner Meinung schon mal so aus als ob es in die richtige Richtung gehen könnte. Ich hab mal einen Auszug meines Quellcodes und im Anhang die Exe:
Delphi-Quellcode:
Ich hoffe das regt ein wenig an.
unit MainForm;
interface uses Windows, Messages, Classes, Graphics, Forms; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private r, _r, Ticker, OldXPos, OldYPos: Integer; sTime: Int64; procedure DrawCanvas(Text: String); procedure CheckIfShaking(xPos, yPos: Integer; StartTime: Int64); procedure WMWindowPosChanging(var Message: TWMWINDOWPOSCHANGING);message WM_WINDOWPOSCHANGING; { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} {*** Das Auge isst mit ***} procedure TForm1.DrawCanvas(Text: String); var tWidth, tHeight: Integer; begin with Canvas do begin tWidth:=TextWidth(Text); tHeight:=TextHeight(Text); Font.Style:=[fsBold]; Brush.Color:=clWhite; TextOut((Width div 2)-(tWidth div 2), (Height div 3), Text); Brush.Color:=clRed; FrameRect(Rect((Width div 2)-(tWidth div 2)-2, (Height div 3)-2, (Width div 2)+(tWidth div 2)+2, (Height div 2)-5)); FrameRect(Rect((Width div 2)-(tWidth div 2)-1, (Height div 3)-1, (Width div 2)+(tWidth div 2)+1, (Height div 2)-6)); end; end; procedure TForm1.CheckIfShaking(xPos, yPos: Integer; StartTime: Int64); begin if (sTime < (StartTime + 2000)) then begin if xPos < OldXPos then r := 1 else r := 0; if yPos < OldYPos then Inc(r, 2); if r <> _r then Inc(Ticker) else Ticker := 0; end else begin sTime := StartTime; Ticker:=0; end; if Ticker > 2 then DrawCanvas(' !!! SHAKIN'' !!! '); _r := r; OldXPos:=xPos; OldYPos:=yPos; end; Procedure TForm1.WMWindowPosChanging(Var Message: TWMWINDOWPOSCHANGING); Var MoniRect, DistRect: TRect; Begin { Abmessungen des Monitors, auf dem sich das Fenster befindet } MoniRect := Screen.Monitors[Monitor.MonitorNum].WorkareaRect; With Message Do With DistRect Do Begin CheckIfShaking(WindowPos.X, WindowPos.Y, GetTickCount); {*** Ab hier wird der SnapEffect bearbeitet (ist für den Schütteleffekt nicht notwendig, nur ein AddOn)***} { Abweichungen vom Monitorrand } Top := WindowPos.Y - MoniRect.Top; Bottom := WindowPos.Y + Height - MoniRect.Bottom; Left := WindowPos.X - MoniRect.Left; Right := WindowPos.X + Width - MoniRect.Right; { Obere Fensterkante } If (Top <= SnapBuffer) And (Top >= -SnapBuffer) Then WindowPos.Y := MoniRect.Top { Untere Fensterkante } Else If (Bottom <= SnapBuffer) And (Bottom >= -SnapBuffer) Then WindowPos.Y := MoniRect.Bottom - Height; { Linke Fensterkante } If (Left <= SnapBuffer) And (Left >= -SnapBuffer) Then WindowPos.X := MoniRect.Left { Rechte Fensterkante } Else If (Right <= SnapBuffer) And (Right >= -SnapBuffer) Then WindowPos.X := MoniRect.Right - Width; End; End; procedure TForm1.FormCreate(Sender: TObject); begin sTime:=GetTickCount; OldXPos:=Left; OldYPos:=Top; end; end. Gruß Bambuti2000 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz