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
 
alzaimar
(Moderator)

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

Re: Welcher Cursor ist gerade aktiv

  Alt 21. Jun 2007, 09:33
Hi Emil,

Ach, es war nur sehr früh heute und irgendwo meinte ich, 10 pixel gesehen zu haben. Ist ja auch egal, jedenfalls ist 10 die Granularität, mit der die Größe in X- bzw. Y-Richtung verändert werden soll.
Zitat von EWeiss:
Zitat von alzaimar:
Würde es nicht reichen, im OnMouseMove (wenn die Form vergrößert wird) einfach das hier zu machen:

Delphi-Quellcode:
  Width := 10 * ((Mouse.X-Left) Div 10);
  Height:= 10 * ((Mouse.Y-Top) Div 10);
A...
Weiss jetzt nicht genau was du meinst und an welcher stelle....
Ich auch nicht

Aber hier mal ein Beispiel, wie ich das eigentlich dachte.
Delphi-Quellcode:
Unit Unit1;

Interface

Uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

Type
  THitTest = (htMove, htSizeGrip, htNone);

  TForm1 = Class(TForm)
    Shape: TShape;
    lbInfo: TLabel;
    Procedure ShapeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    Procedure ShapeMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    Procedure ShapeMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    Procedure FormCreate(Sender: TObject);
  private
    fDragHitTest: THitTest;
    fDragStartX, fDragStartY: Integer;
    Function GetHitTest(aPt: TPoint): THitTest;
  End;

Var
  Form1: TForm1;

Implementation

{$R *.dfm}

Const
  ccGap = 4; // Hot Zone Rahmen
  ccHorzGranulation = 21;
  ccVertGranulation = 29;

Function TForm1.GetHitTest(aPt: TPoint): THitTest;
  Function Between(a, b, c: Integer): Boolean; // True, wenn a zwischen b und c liegt
  Begin
    Result := (a >= b) And (a <= c)
  End;

Begin
// untere rechte Ecke (Kann man natürlich besser definieren)
  If Between(aPt.X, Width - ccGap + 1, Width) And Between(aPt.Y, Height - ccGap + 1, Height) Then
    Result := htSizeGrip
// Sonst irgendwo am Rand (geht auch besser)
  Else If Between(aPt.X, 0, ccGap) Or Between(aPt.X, Width - ccGap + 1, Width)
    Or Between(aPt.Y, 0, ccGap) Or Between(aPt.Y, Height - ccGap + 1, Height) Then
    Result := htMove
  Else
    Result := htNone
End;

Procedure TForm1.ShapeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y:
  Integer);
Begin
  fDragHitTest := GetHitTest(Point(X, Y));
  fDragStartX := X;
  fDragStartY := Y;
End;

Procedure TForm1.ShapeMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
Var
  P: TPoint;
Begin
  P := ClientToScreen(Point(X, Y));
  Case fDragHitTest Of
    htMove: Begin
        Left := P.X - fDragStartX;
        Top := P.Y - fDragStartY;
      End;
    htSizeGrip: Begin
        Width := (1 + X Div ccVertGranulation) * ccVertGranulation; // Hier, das meinte ich in
        Height := (1 + Y Div ccHorzGranulation) * ccHorzGranulation; // meiner Schlaftrunkenheit
      End;
  End;
End;

Procedure TForm1.ShapeMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Begin
  fDragHitTest := htNone;
End;

Procedure TForm1.FormCreate(Sender: TObject);
Begin
  fDragHitTest := htNone;
  Shape.Pen.Width := ccGap;
End;

End.
Das simuliert in etwa WinAmp. Man muss aber unten rechts sehr genau zielen, damit man den kleinen 4x4pxl großen Bereich trifft, der die Größe verändert.. das kann man bestimmt besser machen
Angehängte Dateien
Dateityp: rar movablesizableform_103.rar (167,4 KB, 7x aufgerufen)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 15:11 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