AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Schüttel-Funktion / Fenster hin und her schütteln /Windows 7
Thema durchsuchen
Ansicht
Themen-Optionen

Schüttel-Funktion / Fenster hin und her schütteln /Windows 7

Ein Thema von Muchacho · begonnen am 9. Okt 2009 · letzter Beitrag vom 21. Okt 2009
Antwort Antwort
Seite 3 von 3     123   
Muchacho

Registriert seit: 9. Okt 2009
60 Beiträge
 
Delphi 2010 Enterprise
 
#21

Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo

  Alt 9. Okt 2009, 23:48
Zitat von Sir Rufo:
Wäre auch ein nettes kleines offenes Projekt, wo diese Titelleisten-Gimmicks von Win7 für ältere Win-Versionen zugänglich gemacht werden.
Hi Sir Rufo

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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#22

Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo

  Alt 10. Okt 2009, 07:56
sollte das ganze nicht auch ohne Timer gehen in dem man wm_moving abfängt und darin auswertet ob eine links/rechts Bewegung stattfindet?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#23

Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo

  Alt 10. Okt 2009, 10:01
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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#24

Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo

  Alt 10. Okt 2009, 10:06
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"?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#25

Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo

  Alt 10. Okt 2009, 11:25
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]
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Muchacho

Registriert seit: 9. Okt 2009
60 Beiträge
 
Delphi 2010 Enterprise
 
#26

Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo

  Alt 10. Okt 2009, 12:24
Zitat von Sir Rufo:
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.
Jawohl!

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 von Sir Rufo:
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.
Das könnte man auch… quasi mitentwickeln, weil dies ist auch nur geil


Gruß

Muchacho
  Mit Zitat antworten Zitat
Muchacho

Registriert seit: 9. Okt 2009
60 Beiträge
 
Delphi 2010 Enterprise
 
#27

Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo

  Alt 10. Okt 2009, 12:43
Zitat von SirThornberry:
sollte das ganze nicht auch ohne Timer gehen in dem man wm_moving abfängt und darin auswertet ob eine links/rechts Bewegung stattfindet?
Ausschlaggebend hier muss die Zeitspanne sein, da nur so kann man
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
  Mit Zitat antworten Zitat
Benutzerbild von Bambuti2000
Bambuti2000

Registriert seit: 11. Okt 2007
Ort: Troisdorf
44 Beiträge
 
Delphi XE2 Architect
 
#28

Re: Schüttel-Funktion / Fenster hin und her schütteln /Windo

  Alt 21. Okt 2009, 08:29
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:
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.
Ich hoffe das regt ein wenig an.

Gruß
Bambuti2000
Angehängte Dateien
Dateityp: exe shakeyourform_520.exe (365,5 KB, 21x aufgerufen)
Stefan
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz