Einzelnen Beitrag anzeigen

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
Miniaturansicht angehängter Grafiken
fertig_954.jpg  
Angehängte Dateien
Dateityp: zip gen_delphi_643.zip (287,8 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat