![]() |
Re: Image
Oder du nimmst onmouseup von dem Image...
|
Re: Image
tja das is mir auch klar. ganz doof bin ich ja auch nicht. aber ich wollte halt wissen obs nicht nen befehl gibt der mir die position von der mouse auf dem image gibt. waren übrigens die koordinaten von der mouse auf dem desktop und nicht auf dem form.
|
Re: Image
Ähm, also die Koordinaten die du über Mouse.CursorPos bekommst sind natürlich auf den Bildschirm bezogen. Die x und y, die aber als Parameter an die OnMouseMove, OnMouseUp, OnMouseDown, etc übergeben werden, geben dir direkt die Koordinaten auf dem Form an.
Das gilt aber auch nur für die Events des Forms. Wie aber atreju2oo0 bereits festgestellt hat, besitzt auch das Image an sich diese Events. |
Re: Image
In deiner Beispielprozedur ist eckpunkte lokal definiert, d.h. die variable wird immer wieder gelöscht.
Du musst die Variable entsprechend im public/privat Abschnitt deklarieren (oder halt ganz global - das mögen hier einige aber nicht :) ) Edit: Mal ein schneller Test. Ok, nun gehts (Nachteil ist noch, dass nach dem Zeichnen eines Dreiecks ein Mausklick "leer" ist und dann erst 3 neue folgen. Und dass man das Fenster nicht minimieren sollte ;)) Aber nur zu Testzwecken
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) PaintBox1: TPaintBox; procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); private // Variable für Ecken ecke: integer; // Variable für Array d. Punkte points: array[0..2] of TPoint; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin points[ecke-1].X := X; points[ecke-1].Y := Y; Inc(ecke); if ecke = 4 then begin with Form1.PaintBox1 do begin Canvas.MoveTo(points[0].X, points[0].Y); Canvas.LineTo(points[1].X, points[1].Y); Canvas.MoveTo(points[1].X, points[1].Y); Canvas.LineTo(points[2].X, points[2].Y); Canvas.MoveTo(points[2].X, points[2].Y); Canvas.LineTo(points[0].X, points[0].Y); end; ecke := 1; end; end; procedure TForm1.FormCreate(Sender: TObject); begin ecke := 1; end; end. |
Re: Image
Jede Komponente hat
ClientToScreen und ScreenToClient zum Umrechnen! |
Re: Image
Nur zur Vollständigkeit:
Die Daten von Mouse.CursorPos (also global) kannst du mittels TControl.ScreenToClient in lokale Koordinaten umrechnen. [edit] @Kroko1999: Jedes Control :wink: [/edit] |
Re: Image
vielen dank schonmal für den quelltext. wie würde ich das denn jetzt beispielsweise machen wenn ich sowas wie bei paint haben wollte, dass ich bspw. auf einen punkt eines images drücke, die mouse gedrückt lasse irgendwohin den cursor bewege und der mir immer die gerade von dem drückpunkt bis zu dem aktuellen cursorpunkt macht. also praktisch wie die strichversion bei paint. hab da schon dran rumprobiert ohne hilfe. aber da ich nicht so wirklich viel kann kam da auch nicht wirklich viel bei rum :-(. ich hoffe da mal stark auf eure hilfe. schonmal danke dafür
gruß stefan |
Re: Image
diese methode heisst "gummiband" und ist in der delphi7-pe OH ausführlich beschrieben.
genial oder? ob es beim d2005 auch noch drin ist, weiss ich nicht. EDIT: ebenso. einfach Suche->Gummiband EDIT: ich will ja nicht so sein: Die Grundmethode: 1.das aktuelle Bild in einen Puffer speichern 2.im onmousedown die koords speichern 3.im onmousemove zuerst das bild zeichnen und dann eine linie von den gespeicherten koords zu der aktuellen ziehen 4.im onmouseup die linie auch in den puffer zu speichern. 5.fertig. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 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