AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Cursor an Raster schnappen wie dieser Code ?
Thema durchsuchen
Ansicht
Themen-Optionen

Cursor an Raster schnappen wie dieser Code ?

Ein Thema von thomas2009 · begonnen am 2. Feb 2009 · letzter Beitrag vom 5. Feb 2009
Antwort Antwort
thomas2009
(Gast)

n/a Beiträge
 
#1

Cursor an Raster schnappen wie dieser Code ?

  Alt 2. Feb 2009, 23:33
Hallo

ich habe diesen Code getestet. Der Code zwingt den Cursor nur auf den raster zu bewegen :
http://www.codeproject.com/KB/system...splay=PrintAll

könnte man den Code in Delphi umwandeln ?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Cursor an Raster schnappen wie dieser Code ?

  Alt 3. Feb 2009, 01:58
Ich sehe da auf die Schnelle keinen Befehl, den es in Delphi nicht direkt auch gibt. Insofern sollte das keine allzugroßen Schwierigkeiten bereiten.
Hast du es denn einmal versucht?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Cursor an Raster schnappen wie dieser Code ?

  Alt 3. Feb 2009, 05:11
Ich bin leider nicht bei Codeproject angemeldet und kann daher den Source nicht ansehen. Aber mit Delphi geht das einfach (schöner geht's immer):
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
const
   GridSize = 10;
var
   NewPos : TPoint;
   Changed : boolean;
begin
   NewPos := Point(X, Y);

   if (X mod GridSize <> 0) then
   begin
      if (X mod GridSize) > GridSize div 2 then
         NewPos.X := X + GridSize - (X mod GridSize)
      else
         NewPos.X := X - (X mod GridSize);

      Changed := True;
   end;

   if (Y mod GridSize <> 0) then
   begin
      if (Y mod GridSize) > GridSize div 2 then
         NewPos.Y := Y + GridSize - (Y mod GridSize)
      else
         NewPos.Y := Y - (Y mod GridSize);
      Changed := True;
   end;

   if Changed then
   begin
      NewPos := ClientToScreen(NewPos);
      Mouse.CursorPos := NewPos;
   end;
   Label1.Caption := Format('%d/%d', [NewPos.X, NewPos.Y]);
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Cursor an Raster schnappen wie dieser Code ?

  Alt 3. Feb 2009, 10:49
Der Code bei CodeProject zeigt nur ein Gitter an und man bewegt eine Markierung am Gitter entlang, nicht die Mausposition selbst wird am Gitter ausgerichtet.

Das ist also sogar noch einfacher.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Cursor an Raster schnappen wie dieser Code ?

  Alt 3. Feb 2009, 11:01
is eigentlich auch schöner ... stell dir mal vor dir zieht ständig wer die Maus unter den Fingern weg ... nicht unbedingt schön zu steuern.


Das Einzige, was noch funktional wäre, wenn man den Mauszeiger unsichtbar macht und selber einen Zeiger ausgibt, diesen kann man dann auch etwas anders Positionieren, ohne daß die Maussteuerung verändert wird.
$2B or not $2B
  Mit Zitat antworten Zitat
thomas2009
(Gast)

n/a Beiträge
 
#6

Re: Cursor an Raster schnappen wie dieser Code ?

  Alt 3. Feb 2009, 15:04
Zitat von Union:
Ich bin leider nicht bei Codeproject angemeldet und kann daher den Source nicht ansehen. Aber mit Delphi geht das einfach (schöner geht's immer):
die Source ist aber nicht für Delphi (siehe Anhang )

Dein Code habe ich getestet aber der Cursor bleibt leider gebremst, nur man die Maus schnell bewegt

...
Zitat von jaenicke:
Der Code bei CodeProject zeigt nur ein Gitter an und man bewegt eine Markierung am Gitter entlang, nicht die Mausposition selbst wird am Gitter ausgerichtet.

Das ist also sogar noch einfacher.
Hast du die Datei .exe getestet (siehe Anhang)

...
Zitat von himitsu:
Das Einzige, was noch funktional wäre, wenn man den Mauszeiger unsichtbar macht und selber einen Zeiger ausgibt, diesen kann man dann auch etwas anders Positionieren, ohne daß die Maussteuerung verändert wird.
Es geht nicht nur um den Mauszeiger nur auf Raster zeigen zu lassen, sondern beim Zeichnen soll der Cursor an Gitter schnappen
Angehängte Dateien
Dateityp: zip snapcursor_src_957.zip (2,7 KB, 11x aufgerufen)
Dateityp: zip snapcursor_exe_584.zip (9,4 KB, 17x aufgerufen)
Dateityp: zip snapcursor_demo_150.zip (33,5 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: Cursor an Raster schnappen wie dieser Code ?

  Alt 3. Feb 2009, 15:55
Zitat von thomas2009:
Es geht nicht nur um den Mauszeiger nur auf Raster zeigen zu lassen, sondern beim Zeichnen soll der Cursor an Gitter schnappen
jupp, drum genauso, wie es in deiner Demo (SnapCursor.exe) ist,
nur daß du jetzt noch den richtigen Mauszeiger unsichtbar machst und stattdessen an der gewünschten Position einen eigenen Zeiger zeichnest.

unsichtbar: Cursor = crNone

Zitat:
Dein Code habe ich getestet aber der Cursor bleibt leider gebremst, nur man die Maus schnell bewegt
genau deswegen nicht den "echten" Mauszeiger in Real verschieben, sondern diesen nur virtuell verschieben.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#8

Re: Cursor an Raster schnappen wie dieser Code ?

  Alt 5. Feb 2009, 11:25
mal fix zusammengetippt:
Delphi-Quellcode:
TForm1 = class(TForm)
...
  private
    { Private-Deklarationen }
    oldrect:Trect;
...
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
const
  gridwidth=10;
begin
  canvas.Pen.Mode:=pmXOR;
  canvas.Pen.color:=clBlue xor $FFFFFF; //xor damit die markierung auch wirklich blau wird
  canvas.Brush.Style:=bsClear; //keine füllung
  if oldrect.Left<>-1 then //altes Rechteck erst einmal löschen
  begin
    canvas.Rectangle(oldrect.left,oldrect.top,oldrect.right,oldrect.bottom);
  end;
  oldrect.left:=(x div gridwidth)*gridwidth;
  oldrect.top:=(y div gridwidth)*gridwidth;
  oldrect.Right:=oldrect.Left+gridwidth;
  oldrect.Bottom:=oldrect.Top+gridwidth;
  canvas.Rectangle(oldrect.left,oldrect.top,oldrect.right,oldrect.bottom);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  oldrect:=rect(-1,-1,-1,-1);
  cursor:=crNone;
end;
lässt sich evtl noch optimieren, aber ist ja nur ein beispiel.

Gruß Frank
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:52 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