Autor Beitrag
bfelix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61

WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
BeitragVerfasst: Do 13.01.11 17:13 
Hallo Community,
ich würde gerne in einem Bild (TImage) an zwei Stellen klicken, worauf dann die Koordinaten der Mauspositionen im Bild in von mir gewählten Variablen gespeichert werden. Gibt es da einen Befehl o.ä., mit dem sowas möglich ist. Ich habe schon die Suchfunktion und Google bemüht, hier auch was gefunden aber das war relativ unverständlich für mich.
LG
Felix


Moderiert von user profile iconNarses: Topic aus Multimedia / Grafik verschoben am Do 13.01.2011 um 17:19
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Do 13.01.11 17:17 
Naja ich würde das jetzt mal so probieren, dass ich direkt nach dem Klick, die aktuelle Mausposition abfrage.
Das geht mit:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var MausPos : TPoint;
begin
  getcursorpos(MausPos);
  label1.caption:=(inttostr(Mauspos.X)+'   ' +inttostr(Mauspos.y));
end;


Dann kannst du mit Ifs auf verschiedene Bereiche abfragen.

Lg

Für diesen Beitrag haben gedankt: bfelix
bfelix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61

WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
BeitragVerfasst: Do 13.01.11 17:35 
Hallo,
wie sähen die Ifs dann ungefähr aus?
LG
Felix
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 13.01.11 17:36 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
private // des Formulars
  FCurrentPos: TPoint;
// in ImageXMouseDown:
  FCurrentPos := Point(X, Y);
Denn du bekommst die Koordinaten direkt übergeben, brauchst die also gar nicht erst bestimmen.

user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Naja ich würde das jetzt mal so probieren, dass ich direkt nach dem Klick, die aktuelle Mausposition abfrage.
Wobei das die globale Position auf dem Bildschirm ist, nicht auf dem Image.

user profile iconbfelix hat folgendes geschrieben Zum zitierten Posting springen:
wie sähen die Ifs dann ungefähr aus?
Kommt ja darauf an was du damit machen willst. :nixweiss:

Für diesen Beitrag haben gedankt: bfelix
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 13.01.11 17:41 
OnMouseDown bei ersten mal X,Y in PointVar1
bei zweiten mal X,Y in PointVar2
speichern.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: bfelix
bfelix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61

WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
BeitragVerfasst: Do 13.01.11 18:06 
Ich will die Koordinaten in Variablen speichern, um sie dann abzurufen.
1. Klick: xm(X-Wert),ym(Y-Wert)
2. Klick: xk(X-Wert),yk(Y-Wert)

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Wie kann ich das in PointVar1 und 2 speichern v.a. mit dem 2-Mal
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 13.01.11 18:10 
Dann deklariere dir unter private das alles und damit hast du doch schon fast alles.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
private
  FFirstClick: Boolean;
  FMValueX, ...: Integer;

...

// in OnMouseDown:
if FFirstClick then
begin
  FMValueX := X;
  FMValueY := Y;
else
begin
  FKValueX := X;
  ...

Für diesen Beitrag haben gedankt: bfelix
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 13.01.11 18:14 
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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    FClickEven: Boolean;
    FClickCount: Integer;
    FXM, FYM, FXK, FYK: Integer;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  inc(FClickCount);
  if NOT FClickEven then
  begin
    FXM := X;
    FYM := Y;
  end
  else
  begin
    FXK := X;
    FYK := Y;
  end;
  if (FClickCount AND 1) = 0 then
    Showmessage('(schon wieder) zwei ma geklickt');
  FClickEven := not FClickEven;
end;

end.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS


Zuletzt bearbeitet von bummi am Do 13.01.11 18:41, insgesamt 1-mal bearbeitet

Für diesen Beitrag haben gedankt: bfelix
bfelix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61

WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
BeitragVerfasst: Do 13.01.11 18:17 
@jaenicke: Und dann die Variable FFirstclick auf false setzen?
@bummi: Sind dann die Koordinaten in FXM, FYM bzw. FXK, FYK gespeichert?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 13.01.11 18:26 
was davon
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  if FClickEven then
  begin
    FXM := X;
    FYM := Y;
  end
  else
  begin
    FXK := X;
    FYK := Y;
  end;

hast Du nicht verstanden?

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: bfelix
bfelix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61

WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
BeitragVerfasst: Do 13.01.11 18:34 
Ich habs jetzt verstanden aber was bedeutet FClickEven?
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Do 13.01.11 18:38 
Guck mal hier rein.
Das ist die Variable, die er benutzt um zu speichern ob schonmal geklickt wurde. Nach dem ersten Klick wird die false.

Lg

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    FClickEven: Boolean;
    FClickCount: Integer;
    FXM, FYM, FXK, FYK: Integer;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  inc(FClickCount);
  if FClickEven then
  begin
    FXM := X;
    FYM := Y;
  end
  else
  begin
    FXK := X;
    FYK := Y;
  end;
  if (FClickCount AND 1) = 0 then
    Showmessage('(schon wieder) zwei ma geklickt');
  FClickEven := not FClickEven;
end;

end.

Für diesen Beitrag haben gedankt: bfelix
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Do 13.01.11 18:39 
Oups, da ist ein Logikdreher von mir drin

FClickEven ist als Klassenvariable initial false und wird bei jedem Klick getoggelt
true
false
true
false

allerdings hätte es entweder (not ClickEven) heißen müssen, oder

FXM := X;
FYM := Y;
und
FXK := X;
FYK := Y;
müssen ausgetauscht werden, sorry :-(

EDIT:

ich habe es im Originalpost korrigiert

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: bfelix
bfelix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61

WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
BeitragVerfasst: Do 13.01.11 19:49 
Ich habs jetzt mal mit deinem Code probiert! Allerdings zeigt es gleich beim zweiten Klick an "Zu oft geklickt"
Was kann da des Problem sein?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 13.01.11 19:55 
user profile iconbfelix hat folgendes geschrieben Zum zitierten Posting springen:
Allerdings zeigt es gleich beim zweiten Klick an "Zu oft geklickt"
Was kann da des Problem sein?
Da in dem Code bisher diese Meldung nicht auftaucht, musst du selbst irgendetwas dazu geschrieben haben. Und was das ist, hast du nicht dazu geschrieben. Woher sollen wir das also wissen?

Für diesen Beitrag haben gedankt: bfelix
bfelix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61

WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
BeitragVerfasst: Do 13.01.11 20:10 
ausblenden Delphi-Quelltext
1:
2:
  if (FClickCount AND 1) = 0 then
    Showmessage('(schon wieder) zwei ma geklickt');


Das mein ich: (schon wieder) zwei ma geklickt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 13.01.11 20:25 
Naja, da der Wert bereits auf 1 erhöht wurde, ist klar, dass auch direkt die Meldung kommt. Lösung: Mit -1 initialisieren oder eben nur die boolsche Variable benutzen.

Für diesen Beitrag haben gedankt: bfelix
bfelix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61

WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
BeitragVerfasst: Do 13.01.11 20:35 
Gut danke für alle antworten! Ich habs nun geschafft!
(Die Meldung einfach in eine nächste Anweisung verwandelt)