Autor Beitrag
Gitzi15
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 27.05.05 21:10 
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 user profile iconChristian S.: Topic aus Programmierwerkzeuge verschoben am Fr 27.05.2005 um 22:16
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 27.05.05 21:21 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var p:tpoint;
begin

  getcursorpos(p);

  showmessage(inttostr(p.x) + ' ' + inttostr(p.y));

end;

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Gitzi15 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 109


D6 Prof
BeitragVerfasst: Sa 28.05.05 21:31 
ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Start: TPoint; // Startpunkt der neu begonnenen Linie
    Last: TPoint;  // letzter gespeicherter Endpunkt
    Procedure ResetPoints;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

Procedure TForm1.ResetPoints;
Begin
  // Startpunkt und letzten Endpunkt ungültig setzen
  Last.X := -1;
  Last.Y := -1;
  Start.X := -1;
  Start.Y := -1;
End;

Procedure TForm1.Button1Click(Sender: TObject);
Begin
  // Form löschen
  Canvas.FillRect(ClientRect);
End;

Procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Begin
  // Mausknopf gedrückt -> Startpunkt merken
  Start.X := X;
  Start.Y := Y;
End;

Procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Begin
  // Mausknopf losgelassen -> Punkte ungültig setzen, letzte gezeichnete Linie bleibt
  ResetPoints;
End;

Procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Begin
  // nur wenn ein gültiger Startpunkt vorhanden, Linie zeichnen
  If (Start.X>=0Then Begin
   // wenn ein letzter Endpunkt gespeichert ist, die Linie durch nochmaliges Zeichnen löschen
    If (Last.X>=0Then Begin
      Canvas.MoveTo(Start.X,Start.Y);
      Canvas.LineTo(Last.X,Last.Y);
    End;
    // neuen Endpunkt speichern
    Last.X := X;
    Last.Y := Y;
    // und Linie erstmalig zeichnen
    Canvas.MoveTo(Start.X,Start.Y);
    Canvas.LineTo(X,Y);
  End;
End;

Procedure TForm1.FormCreate(Sender: TObject);
Begin
  ResetPoints;
  // Canvas vorbereiten
  Canvas.Pen.Color := clRed;
  Canvas.Pen.Mode := pmNotXor; // dieser Modus löscht eine Linie, wenn sie ein zweites Mal gezeichnet wird
  Canvas.Brush.Color := clBtnFace;
End;

end.
Einfach einen Button auf ein leeres Formular und die Ereignisse zuweisen.

Gruß, teebee
patrick
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: So 29.05.05 12:44 
wenn du interesse hast, hier sind ein paar algemeine delphi-tutorials. damit bekommst du einiges an grundlagen mit :wink:
www.dsdt.info/tutorials/index.php?cat=1

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
Gitzi15 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: So 29.05.05 16:01 
user profile iconteebee 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
ausblenden 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.

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Gitzi15 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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.

ausblenden 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); // aktuelle x, y pos auf dem formular
 getcursorpos(p);
 label2.caption := inttostr(p.x) + '; ' + inttostr(p.y); // systemweite x,y pos
 label3.caption := inttostr(p.x - form1.Left) + '; ' + inttostr(p.y - form1.top);
 // 3 variante ist etwas verschoben, da die borders und die titelleiste nicht miteinbezogen werden 
end;

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Gitzi15 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 29.05.05 18:03 
jo super vielen dank