Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Vernünftiges resitzverhalten ala Winamp (https://www.delphipraxis.net/89123-vernuenftiges-resitzverhalten-ala-winamp.html)

EWeiss 26. Mär 2007 20:01


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:
procedure Tfrm_Gen.MouseTrap_Release;
begin
  ClipCursor(nil);
end;
Egal wo ich die 20 pixel addiere das resitzverhalten entspricht nicht dem von Winamp...
Wäre schön wenn jemand eine besser lösung kennen würde.

gruss Emil

Aike 29. Mai 2007 22:01

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 :-)

EWeiss 29. Mai 2007 22:23

Re: Vernünftiges resitzverhalten ala Winamp
 
Zitat:

Zitat von Aike
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 :-)

Ist zwar schon alt aber gelößt habe ic hes immer noch nicht ;)

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

gothic_mike 30. Mai 2007 10:11

Re: Vernünftiges resitzverhalten ala Winamp
 
Hi,

viell. so irgendwie in der richtung:

Delphi-Quellcode:
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;
des macht zwar nicht 100% des, was es soll, aber irgendwie is des schon in die richtung...
muss halt noch etwas verbessert werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 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