ScreenToClient liefert seltsame Ergebnisse

Rund um die LCL und andere Komponenten
Antworten
Hartkern
Beiträge: 69
Registriert: Sa 5. Dez 2015, 20:03
OS, Lazarus, FPC: Win10 IDE 1.6
CPU-Target: 64Bit
Wohnort: Leipzig

ScreenToClient liefert seltsame Ergebnisse

Beitrag von Hartkern »

Hallo,

ich erzeuge ein TImage in einer TScrollbox zur Laufzeit. Das OnClickEvent soll eigentlich die Position des Mauszeigers in Relation zum TImage anzeigen. Jedoch erhalt ich Werte die jenseits von Gut und Böse sind und nicht ansatzweise meinem Gitter welches ich als Test lade entsprechen.

Code: Alles auswählen

procedure TMap.FKarteClick(Sender: TObject);
begin
  pt:=FKarte.ScreenToClient(pt); //pt = tpoint und wurde in der private der class vereinbart
  showmessage('X = '+IntToStr(pt.x)+', Y = '+IntToStr(pt.y));
end;
 
{ TMap }
constructor TMap.create(aOwner: TComponent);
begin
  //Scrollbox erzeugen
  SScrBox :=TScrollbox.Create(aOwner);
  SScrBox.Parent :=(aOwner as TWinControl);
  SScrBox.AutoScroll:=true;
  SScrBox.Align:=alClient;
  //Hintergrundkarte erzeugen
  FKarte :=TImage.Create(aOwner);
  FKarte.Parent :=SScrBox;
  FKarte.Picture.LoadfromFile('gittertest.bmp');//später auslagern in eigene Variable filename
  FKarte.AutoSize:=true;
  FKarte.AntialiasingMode:=amON;
  FKarte.Visible := True;
  FKarte.enabled := True;
  //On Click Event
  FKarte.OnClick:=@FKarteClick;
  //ab hier wird alles angezeigt, später auslagern in eine Procedure
  FKarte.show;
end;                         

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: ScreenToClient liefert seltsame Ergebnisse

Beitrag von Komoluna »

Ich vermute mal, wenn du mehrmals klickst, wird jedes mal ein anderer Wert angezeigt(auch wenn du den Cursor nicht verschiebst).
Immer wenn du klickst, wird pt als Mausposition auf dem Bildschirm angesehen und in den lokalen Koordinatenraum von deinem TMap konvertiert(es werden Werte von x und y subtrahiert oder addiert).

ScreenToClient verwendet man normalerweise so:

Code: Alles auswählen

procedure TMap.FKarteClick(Sender: TObject);
begin
  pt := FKarte.ScreenToClient(Mouse.CursorPos); //nicht ganz sicher wie der Bezeichner genau heißt, kann grad nicht nachgucken
  Showmessage('X = '+IntToStr(pt.x)+', Y = '+IntToStr(pt.y));
end;
Dieser Code nimmt sich jedes mal die Mausposition auf dem Bildschirm, und konvertiert sie in den Koordinatenraum deiner Map.

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Hartkern
Beiträge: 69
Registriert: Sa 5. Dez 2015, 20:03
OS, Lazarus, FPC: Win10 IDE 1.6
CPU-Target: 64Bit
Wohnort: Leipzig

Re: ScreenToClient liefert seltsame Ergebnisse

Beitrag von Hartkern »

Vielen Dank!

ich bin so blöd!! :D :wink:

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: ScreenToClient liefert seltsame Ergebnisse

Beitrag von Komoluna »

Kenn ich, manchmal sieht man den Baum vor lauter Wäldern nicht ;-)

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Antworten