Entwickler-Ecke
Sonstiges (Delphi) - auf mausklick reagieren
Gitzi15 - Fr 27.05.05 21:10
Titel: auf mausklick reagieren
Hallo, ich brauche einen ausdruck, womit ich, wenn ich mit der Maus klicke die dazugehörigen koordinaten einlesen kann, damit dies dann in einem paint - programm benutzen kann, um z.b. eine liene von einem klich zum anderen zu ziehen, ist wirklich dringend, bin für jede hilfe dankbar.
Moderiert von
Christian S.: Topic aus Programmierwerkzeuge verschoben am Fr 27.05.2005 um 22:16
retnyg - Fr 27.05.05 21:21
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var p:tpoint; begin
getcursorpos(p);
showmessage(inttostr(p.x) + ' ' + inttostr(p.y));
end; |
Gitzi15 - Sa 28.05.05 19:38
Danke schon mal, hat mich ein wenig weiter gebracht, jedoch habe ich jetzt das problem, dass ich nicht wirklich weiß, wie ich die prozedur anwenden soll, da ich es legendlich hinbekomme, die prozedur beim klick auf einen button, auszulösen, mein ziel ist es, die koordinaten in einen speicher, (sichtbar oder nicht ist egal)zu bekommen, um dann damit eine linie zu erzeugen, währe echt super, wenn mir da noch jemand helfen könnte.
teebee - Sa 28.05.05 21:31
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94:
| unit main;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private public Start: TPoint; Last: TPoint; Procedure ResetPoints; end;
var Form1: TForm1;
implementation
{$R *.DFM}
Procedure TForm1.ResetPoints; Begin Last.X := -1; Last.Y := -1; Start.X := -1; Start.Y := -1; End;
Procedure TForm1.Button1Click(Sender: TObject); Begin Canvas.FillRect(ClientRect); End;
Procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Begin Start.X := X; Start.Y := Y; End;
Procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Begin ResetPoints; End;
Procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); Begin If (Start.X>=0) Then Begin If (Last.X>=0) Then Begin Canvas.MoveTo(Start.X,Start.Y); Canvas.LineTo(Last.X,Last.Y); End; Last.X := X; Last.Y := Y; Canvas.MoveTo(Start.X,Start.Y); Canvas.LineTo(X,Y); End; End;
Procedure TForm1.FormCreate(Sender: TObject); Begin ResetPoints; Canvas.Pen.Color := clRed; Canvas.Pen.Mode := pmNotXor; Canvas.Brush.Color := clBtnFace; End;
end. |
Einfach einen Button auf ein leeres Formular und die Ereignisse zuweisen.
Gruß, teebee
Gitzi15 - So 29.05.05 12:49
Sorry, aber das funktioniert nun überhauptnicht, ich kann das zwar ein fürgen, aber wenn ich das programm starten lasse, dann malt er gar nix. ich habe delphi 7, kann das damit zu tun haben?, wäre echt dankbar, für weiter tips.
retnyg - So 29.05.05 16:01
teebee hat folgendes geschrieben: |
Einfach einen Button auf ein leeres Formular und die Ereignisse zuweisen. |
um den code von teebee nutzen zu können musst du noch alle ereignise zuweisen, das wären
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
also formular aufmachen, einen button drauftun, doppelklick auf den button (damit das onClick ereignis zugewisen wird)
danach das form1 im objektinspektor öffnen und bei ereignise jeweils bei OnCreate OnMouseDown usw einen doppelklick machen...
wenn alle ereignise zugewiesen sind, kannst du den kompletten code mit dem obigen ersetzen.
Gitzi15 - So 29.05.05 17:13
Hi super vielen dank, habe es jetzt hinbekommen zumindestens so ziemlich, jetzt habe ich nur leider das kleine problem noch, dass delphi die koordinaten falsch ließt, bei getcursorpoint, wenn mir da noch jemand helfen könnte, wäre ich rud um glücklich.
retnyg - So 29.05.05 17:31
am einfachsten nimmst du das MouseMove event der form oder deiner zeichenfläche, da sind x und y bereits relativ zur linken oberen ecke der zeichenfläche.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var p: tpoint; begin label1.Caption := inttostr(x) + '; ' + inttostr(y); getcursorpos(p); label2.caption := inttostr(p.x) + '; ' + inttostr(p.y); label3.caption := inttostr(p.x - form1.Left) + '; ' + inttostr(p.y - form1.top); end; |
Gitzi15 - So 29.05.05 18:03
jo super vielen dank
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!