AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Welcher Cursor ist gerade aktiv

Ein Thema von EWeiss · begonnen am 18. Jun 2007 · letzter Beitrag vom 22. Jun 2007
 
EWeiss
(Gast)

n/a Beiträge
 
#8

Re: Welcher Cursor ist gerade aktiv

  Alt 21. Jun 2007, 03:14
Hi

Hier nun mal meine selbstgebastelte Methode eine Form so in der größe zu verändern wie Winamp es tut.

1. Problem .. TImage kann man nicht verwenden da dieses kein reales THandle besitzt.
Ka was man damit überhaupt machen kann.. eigentlich sinnlos das Teil.
Habe deshalb picFormResize mit einem Panel ersetzt nur mal so zum testen.

2. Der Code ist nicht so schön klein wie der ursprüngliche den ich verwenden wollte.
Damit kann man aber so wie ich festgestellt habe das Resitz verhalten ala Winamp nicht verwirklichen
wenn Skins auf der Oberfläsche sind.

Deshalb das neue hier.

Testen kann man das mit Gen_Bitmap hier im Forum einfach die Funktionen ersetzen.

Delphi-Quellcode:
Var
  mRightStep : Integer = 25;
  mHeightStep : Integer = 29;
  mDrag : boolean;

procedure Tfrm_Gen.picFormResizeMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin

    If ssLeft in Shift Then
        mDrag := True

end;



procedure Tfrm_Gen.picFormResizeMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);

Var
  L : Integer; //Form links
  T : Integer; //Form Top
  W : Integer; //form weite
  H : Integer; //Form Höhe

  mPBRec : TRECT; //Record der PicBox
  POINT : TPOINT; //Maus Position

begin

    L := self.left;
    T := self.top;
    W := self.Width;
    H := self.Height;

    //MouseDown ereignis ausgelößt?
    If mDrag = True Then
      begin
        //Aktuelle Position der PictureBox ermitteln
        GetWindowRect(picFormResize.Handle, mPBRec);
        //Aktuelle Cursor Position ermitteln
        GetCursorPos(POINT);

        //******* Form Schrittweise Diagonal nach unten rechts verschieben abhängig von der Cursor Position *******
        If (POINT.x >= mPBRec.Right - 5) And (POINT.y >= mPBRec.Bottom - 5) Then
          begin
            self.left := L;
            self.top := T;
            self.Width := W + mRightStep;
            self.Height := H + mHeightStep;

            //Neue Position der PictureBox ermitteln. Alte wurde verändert
            GetWindowRect(picFormResize.Handle, mPBRec);
            //Cursor Position setzen auf die mitte der PicBox
            //damit nicht die nächste abfrage ausgelößt wird
            SetCursorPos(mPBRec.Left + ((mPBRec.Right - mPBRec.Left) div 2) - 3,
                                        mPBRec.Top + ((mPBRec.Bottom - mPBRec.Top) div 2) - 3 );
            //Raus hier
            exit;
          end;
        
        //******* Form Schrittweise Diagonal nach oben links verschieben abhängig von der Cursor Position *******
        If (POINT.x <= mPBRec.left) And (POINT.y <= mPBRec.top) Then
          begin
            //Standard weite erzwingen wenn Formweite unter 4125
            If w < 275 Then
                w := 275;
            
            //Standard höhe erzwingen wenn Formhöhe unter 1740
            If h < 116 Then
                h := 116;

            self.left := L;
            self.top := T;
            self.Width := W - mRightStep;
            self.Height := H - mHeightStep;

            //Neue Position der PictureBox ermitteln. Alte wurde verändert
            GetWindowRect(picFormResize.Handle, mPBRec);
            //Cursor Position setzen auf die mitte der PicBox
            //damit nicht die nächste abfrage ausgelößt wird
            SetCursorPos( mPBRec.left + ((mPBRec.Right - mPBRec.left) div 2) - 3,
                                        mPBRec.Top + ((mPBRec.Bottom - mPBRec.Top) div 2) - 3);
            //Raus hier
            exit;
          end;

        //******* Form Schrittweise nach Rechts verschieben abhängig von der Cursor Position *******
        If (POINT.x >= (mPBRec.left + (mPBRec.Right - mPBRec.left))) Then
          begin
            self.left := L;
            self.top := T;
            self.Width := W + mRightStep;
            self.Height := H;

            //Neue Position der PictureBox ermitteln. Alte wurde verändert
            GetWindowRect(picFormResize.Handle, mPBRec);
            //Cursor Position setzen auf die mitte der PicBox
            //damit nicht die nächste abfrage ausgelößt wird
            SetCursorPos( mPBRec.left + ((mPBRec.Right - mPBRec.left) div 2) - 3,
                                        mPBRec.Top + ((mPBRec.Bottom - mPBRec.Top) div 2) - 3);

        //******* Form Schrittweise nach Unten verschieben abhängig von der Cursor Position *******
        end else
        If (POINT.y >= (mPBRec.tOp + (mPBRec.Bottom - mPBRec.tOp))) Then
          begin
            self.left := L;
            self.top := T;
            self.Width := W;
            self.Height := H + mHeightStep;

            //Neue Position der PictureBox ermitteln. Alte wurde verändert
            GetWindowRect(picFormResize.Handle, mPBRec);
            //Cursor Position setzen auf die mitte der PicBox
            //damit nicht die nächste abfrage ausgelößt wird
            SetCursorPos(mPBRec.left + ((mPBRec.Right - mPBRec.left) div 2) - 3,
                                        mPBRec.Top + ((mPBRec.Bottom - mPBRec.Top) div 2) - 3);

        //******* Form Schrittweise nach Links verschieben abhängig von der Cursor Position *******
        end else
        If (POINT.x <= (mPBRec.Right + (mPBRec.left - mPBRec.Right) - 6)) Then
          begin
            //Standard weite erzwingen wenn Formweite unter 4125
            If w < 275 Then
                w := 275;

            self.left := L;
            self.top := T;
            self.Width := W - mRightStep;
            self.Height := H;

            //Neue Position der PictureBox ermitteln. Alte wurde verändert
            GetWindowRect(picFormResize.Handle, mPBRec);
            //Cursor Position setzen auf die mitte der PicBox
            //damit nicht die nächste abfrage ausgelößt wird
            SetCursorPos(mPBRec.left + ((mPBRec.Right - mPBRec.left) div 2) - 3,
                                        mPBRec.Top + ((mPBRec.Bottom - mPBRec.Top) div 2) - 3);

        //******* Form Schrittweise nach Oben verschieben abhängig von der Cursor Position *******
        end else
        If (POINT.y <= (mPBRec.Bottom + (mPBRec.Top - mPBRec.Bottom)) - 6) Then
          begin
            //Standard höhe erzwingen wenn Formhöhe unter 1740
            If h < 116 Then
                h := 116;

            self.left := L;
            self.top := T;
            self.Width := W ;
            self.Height := H - mHeightStep;

            //Neue Position der PictureBox ermitteln. Alte wurde verändert
            GetWindowRect(picFormResize.Handle, mPBRec);
            //Cursor Position setzen auf die mitte der PicBox
            //damit nicht die nächste abfrage ausgelößt wird
            SetCursorPos(mPBRec.left + ((mPBRec.Right - mPBRec.left) div 2) - 3,
                                        mPBRec.Top + ((mPBRec.Bottom - mPBRec.Top) div 2) - 3);

          end;
      end;
end;

procedure Tfrm_Gen.picFormResizeMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  If mDrag Then
    mDrag := False;

end;
gruss Emil
Angehängte Grafiken
Dateityp: jpg fertig_954.jpg (87,3 KB, 13x aufgerufen)
Angehängte Dateien
Dateityp: zip gen_delphi_643.zip (287,8 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
 


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 00:14 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