| Autor |
Beitrag |
bfelix
      
Beiträge: 61
WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
|
Verfasst: 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 Narses: Topic aus Multimedia / Grafik verschoben am Do 13.01.2011 um 17:19
|
|
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: 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:
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 
      
Beiträge: 61
WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
|
Verfasst: Do 13.01.11 17:35
Hallo,
wie sähen die Ifs dann ungefähr aus?
LG
Felix
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 13.01.11 17:36
Für diesen Beitrag haben gedankt: bfelix
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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 
      
Beiträge: 61
WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
|
Verfasst: 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 Narses: Beiträge zusammengefasst---
Wie kann ich das in PointVar1 und 2 speichern v.a. mit dem 2-Mal
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 13.01.11 18:10
Dann deklariere dir unter private das alles und damit hast du doch schon fast alles. Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| private FFirstClick: Boolean; FMValueX, ...: Integer;
...
if FFirstClick then begin FMValueX := X; FMValueY := Y; else begin FKValueX := X; ... |
Für diesen Beitrag haben gedankt: bfelix
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 13.01.11 18:14
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 
      
Beiträge: 61
WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
|
Verfasst: 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 13.01.11 18:26
was davon
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 
      
Beiträge: 61
WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
|
Verfasst: Do 13.01.11 18:34
Ich habs jetzt verstanden aber was bedeutet FClickEven?
|
|
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: 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
bummi hat folgendes geschrieben : | 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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 
      
Beiträge: 61
WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
|
Verfasst: 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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 13.01.11 19:55
bfelix hat folgendes geschrieben : | 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 
      
Beiträge: 61
WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
|
Verfasst: Do 13.01.11 20:10
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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 61
WIN 2000 Prof., Win XP Prof., Win 7 Starter und Prof., SuSe Linux 11.3,
Delphi 7 Pers.
|
Verfasst: 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)
|
|