Autor |
Beitrag |
Robii
      
Beiträge: 236
|
Verfasst: Fr 29.05.09 16:32
Hey
Ich habe eine Funktion in meinem Programm, mit der man eine Distanza auf einer Karte messen kann.
Wenn man den Knopf klickt, soll sich der Corsur verändern und man muss 2 verschiedene Punkte auf der Karte anklicken.
Ist dies geschehen, wird die Entfernung zwischen den beiden Punkten angezeigt.
Folgendes Problem:
Ich habe meinen Ansatz so gestaltet, das es bei der Karte ein OnKlick gibt, und das wenn Punkt 1 (Tpoin) ungleich 0 ( x & y ) ist, die MauszeigerPosition = Punkt2 gesetzt wird. Das Problem ist nur, das so, immer wenn man auf die Karte klickt der Punkt gespeichert wird, er soll aber nur gespeichert werden, nachdem man auf den Knopf um die Mess-Funktion zu aktiveren, geklickt hat. Wie löse ich dieses Problem?
Grüße.
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 29.05.09 16:44
Erstelle unter private eine Eigenschaft vom Typ Boolean, die dir angibt, dass der Distanzmessmodus aktiv ist. Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| TFormX = class(TForm) ... private FDistanceMode: Boolean;
...
procedure TFormX.btnDistanceModeClick(Sender: TObject); begin FDistanceMode := True; end;
procedure ...MapClick begin if FDistanceMode then ... end; | Nebenbei: Dein Titel sagt nicht gerade viel über das Thema des Beitrags aus, findest du nicht, dass da ein etwas sinnvollerer Titel passender wäre?
Zuletzt bearbeitet von jaenicke am Fr 29.05.09 16:50, insgesamt 3-mal bearbeitet
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Fr 29.05.09 16:45
Zuletzt bearbeitet von thepaine91 am Fr 29.05.09 16:59, insgesamt 1-mal bearbeitet
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Fr 29.05.09 16:48
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Fr 29.05.09 16:51
naja Formular global ^^ war gemeint hab mich ungeschickt ausgedrückt.
Außerdem kann man den Status bei Jeanicke nicht mehr mit einem Klick auf False setzen.
Zuletzt bearbeitet von thepaine91 am Fr 29.05.09 16:54, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 29.05.09 16:54
Eine globale Variable schwirrt lose in der Unit herum.
Ein Feld eines Formulars ist innerhalb des Formulares, z.B. unter private, deklariert. Eine solches Feld gehört dementsprechend zu der aktuellen Instanz des Formulars und funktioniert also z.B. auch, wenn man das selbe Formular mehrfach anzeigt.
Insofern ist es schlecht das zu verwechseln bzw. falsch zu bezeichnen.
// EDIT: Ja, Feld
Zuletzt bearbeitet von jaenicke am Fr 29.05.09 17:34, insgesamt 1-mal bearbeitet
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Fr 29.05.09 16:56
hmm, ja hast auch recht die Bezeichnung ist eigentlich falsch. In meinem Kopf sind sie eben Formular Global. Das versteht leider keiner außer mir.
@Threadersteller
Ob du nun Jaenickes o. meinen Vorschlag übernimmst bleibt dir überlassen.
Anfangs Post abgeändert.
|
|
Robii 
      
Beiträge: 236
|
Verfasst: Fr 29.05.09 17:11
jaenicke hat folgendes geschrieben : | Erstelle unter private eine Eigenschaft vom Typ Boolean, die dir angibt, dass der Distanzmessmodus aktiv ist. Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| TFormX = class(TForm) ... private FDistanceMode: Boolean;
...
procedure TFormX.btnDistanceModeClick(Sender: TObject); begin FDistanceMode := True; end;
procedure ...MapClick begin if FDistanceMode then ... end; | Nebenbei: Dein Titel sagt nicht gerade viel über das Thema des Beitrags aus, findest du nicht, dass da ein etwas sinnvollerer Titel passender wäre? |
Das ist was ich gebraucht habe, habe aber noch ein Problem beim erweitern.
Undzwar soll, nachdem die 2 Klicks ausgeführt worden sind, ein Srich ( Canvas ) von P1 zu P2 gezogen werden.
Wo füge ich den diese funktion ein ?
Denn bei dem OnClick weiß ich nicht wo ich das einfügen sollte.
Bzw ich müsste überprüfen ob beide Punkte belegt sind und dann den Strich ziehen oder wenn der erste belegt ist und ich den zweiten abspeichere danach die Linien ziehen..!
Grüße
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt, Zitat kenntlich gemacht.
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Fr 29.05.09 17:14
Hast es im Prinzip selbst beantwortet nach der Speicherung des 2. Wertes gleich im Anschluss.
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 29.05.09 17:19
Du solltest dir einfach ein zweites Feld benutzen. Und dann im OnClick: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| if FDistanceMode then begin if FFirstPoint then begin ... FFirstPoint := False; end else begin ... ImageX.Canvas.MoveTo... ImageX.Canvas.LineTo... end; end; | // EDIT: Ja, Feld
Zuletzt bearbeitet von jaenicke am Fr 29.05.09 17:34, insgesamt 1-mal bearbeitet
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Fr 29.05.09 17:22
Hm jo aber solte er die Variable FFirstPoint nicht wieder auf True setzen?
Und jaenicke genau was du geschrieben hast hab ich doch bereits gesagt.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Fr 29.05.09 17:28
Kleine BankFußnote:
jaenicke hat folgendes geschrieben : | Eine Eigenschaft eines Formulars ist innerhalb des Formulares, z.B. unter private, deklariert. |
Wenn du es mit Namen so genau nimmst: Das, was du meinst, ist ein Feld, und keine Eigenschaft.
Eigenschaften sind nur die Dinger, die man mit property einleitet. Sie selbst reservieren keinerlei Speicher sondern verweisen nur auf Methoden oder Felder.
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 29.05.09 17:29
Äh, ja stimmt, da hab ich selbst nicht aufgepasst. 
|
|
Robii 
      
Beiträge: 236
|
Verfasst: Sa 30.05.09 20:10
Vielen Dank für die Hilfe,
Problem gelöst.
|
|
|