![]() |
Vernünftiges resitzverhalten ala Winamp
Hallo
Ich möchte ein vernünftiges Resitzverhalten wie bei Winamp realisieren. Also stepweise. Je nach richtung x,y + 20 Pixel. So sieht es im moment aus..
Delphi-Quellcode:
procedure Tfrm_Gen.picFormResizeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: integer); begin if FormFlag = False then begin FX := picFormResize.Left + (picFormResize.Width div 2); FY := picFormResize.Top + (picFormResize.Height div 2); AX := x; AY := y; FormFlag := True; FormFirst := True; end; end;
Delphi-Quellcode:
procedure Tfrm_Gen.picFormResizeMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: integer); var posW: Dword; posH: Dword; formW: Dword; formH: Dword; begin if FormFlag = True then begin // Maus in picFormResize einfangen. MouseTrap(picFormResize, x, y); if FormFirst = True then begin posW := (FX + x) - x; end else posW := (FX + x) - AX; if FormFirst = True then begin posH := (FY + y) - y; end else posH := (FY + y) - AY; if posW < 261 then posW := 261; if posH < 99 then posH := 99; if FormFirst = True then begin FX := FX; end else FX := posW; if FormFirst = True then begin FY := FY; end else FY := posH; if FormFirst = False then begin picFormResize.Left := FX; picFormResize.Top := FY; formW := FX+14; formH := FY+14; frm_Gen.Width := formW; frm_Gen.Height := formH; end; // Maus wieder freigeben MouseTrap_Release; FormFirst := False; end; end;
Delphi-Quellcode:
procedure Tfrm_Gen.picFormResizeMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: integer); begin FormFlag := False; end;
Delphi-Quellcode:
procedure Tfrm_Gen.MouseTrap(Sender: TObject; X, Y: integer);
var R: TRECT; Image: TImage; begin Image := (Sender as TImage); // Image-Koordinaten in Bildschirmkoordinaten umrechnen R := Image.ClientRect; with Image.ClientOrigin do OffsetRect(R, X, Y); // Bewegung des Mauszeigers einschränken ClipCursor(@R); end;
Delphi-Quellcode:
Egal wo ich die 20 pixel addiere das resitzverhalten entspricht nicht dem von Winamp...
procedure Tfrm_Gen.MouseTrap_Release;
begin ClipCursor(nil); end; Wäre schön wenn jemand eine besser lösung kennen würde. gruss Emil |
Re: Vernünftiges resitzverhalten ala Winamp
Bin grade ein bisschen faul, jetzt noch über Code nachzudenken, aber ich stelle mir das so vor:
Du hast deine Form und vergrößerst, sagen wir mal ... in der Vertikalen nach unten. Dann speicherst du erstmal den y-Wert. Sobald die Maus 20 Pixel weiter unten/ob ist, lässt du dann ein Resize zu. So würd's ich machen :-) |
Re: Vernünftiges resitzverhalten ala Winamp
Zitat:
Naja ganz so einfach ist das ja auch nicht. Du mußt 3 Punkte dabei berücksichtigen. x oder y und 'x plus y' gruss Emil |
Re: Vernünftiges resitzverhalten ala Winamp
Hi,
viell. so irgendwie in der richtung:
Delphi-Quellcode:
des macht zwar nicht 100% des, was es soll, aber irgendwie is des schon in die richtung...
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean);
begin if NewHeight > OldH then NewHeight := OldH + 20; if NewHeight < OldH then NewHeight := OldH - 20; if NewWidth > OldW then NewWidth := OldW + 20; if NewWidth < OldW then NewWidth := OldW - 20; OldW := NewWidth; OldH := NewHeight; Resize := True; end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin OldH := Height; OldW := Width; end; muss halt noch etwas verbessert werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 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