AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi screenToClient liefert komische Werte
Thema durchsuchen
Ansicht
Themen-Optionen

screenToClient liefert komische Werte

Ein Thema von SimonRap · begonnen am 6. Mai 2010 · letzter Beitrag vom 6. Mai 2010
Antwort Antwort
Benutzerbild von SimonRap
SimonRap

Registriert seit: 17. Okt 2009
Ort: Mahlow
147 Beiträge
 
Delphi 6 Personal
 
#1

screenToClient liefert komische Werte

  Alt 6. Mai 2010, 20:39
hi leute,
wie der titel sagt:
Delphi-Quellcode:
procedure bla(blabla);
VAR x,x2,y,y2:INTEGER; xy:TPoint;
  min4.ScreenToClient(xy);//min4=Timage;
  x:=xy.X;
  y:=xy.Y;
  x2:=mouse.CursorPos.X;
  y2:=mouse.CursorPos.Y;
showmessage(its(x)+' '+ its(y)+' '+its(x2)+' '+its(y2));
// its ist nur:
function its(n:INTEGER):STRING;
  begin
    result:=inttostr(n);
  end;
//bissel schreiben sparen ;-)
Joa, so weit so gut aber als ergebnis der ShowMessage kommt:
'1242332 4208231 864 134'
Hm... bei einer Auflösung von 1024x768 ist 1242332 doch sehr unwahrscheinlich
Die Mauspositionen stimmen...
Außerdem ändern sich die ersten beiden (ScreenToClient) Werte nie...
Habe ich da einen Denkfehler oder etwas vergessen?
Hoffe ihr könnt mir helfen
Simon
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#2

Re: screenToClient gibt komische Werte

  Alt 6. Mai 2010, 20:46
Ganz davon abgesehen, dass dein Code sich vermutlich nicht kompilieren lässt:

Delphi-Quellcode:
var
  x,x2,y,y2:INTEGER;
  xy:TPoint;
min4.ScreenToClient(xy);//min4=Timage; // Wo ist hiervor das begin? Oder braucht man das nicht!?
falls vor min4..... ein "begin" wäre, wäre xy nicht initialisiert. Deshalb kommt so ein komischer Wert raus. Also so:

Delphi-Quellcode:
var
  xy: TPoint;
begin
  xy := Mouse.CursorPos;
  xy := ScreenToClient(xy);
  // Jetzt ShowMessage
end;
HTH
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#3

Re: screenToClient gibt komische Werte

  Alt 6. Mai 2010, 20:46
Hi SimonRap,

ScreenToClient ist eine Funktion und liefert einen Wert zurück.
Versuch mal
xy := min4.ScreenToClient(Point(0,0)) oder so ähnlich....

Grüße,
blauweiss
  Mit Zitat antworten Zitat
Benutzerbild von SimonRap
SimonRap

Registriert seit: 17. Okt 2009
Ort: Mahlow
147 Beiträge
 
Delphi 6 Personal
 
#4

Re: screenToClient gibt komische Werte

  Alt 6. Mai 2010, 20:56
Zitat von SimonRap:
...

Delphi-Quellcode:
procedure bla(blabla);
VAR x,x2,y,y2:INTEGER; xy:TPoint;
  min4.ScreenToClient(xy);//min4=Timage;
  x:=xy.X;
...
...
ähm ich dachte an den "BLAs" sieht man, dass ich das auf die Schnelle getippt hab... Hab begin^^
(glaub sogar, wenn ichs nich hätte würde er meckern)
...
xy := min4.ScreenToClient(Point(0,0))
...
Klar.. mist... sag ich doch: denkfehler^^
Is ja ne Function...
...
aber nun die Showmessage:
'-794 -128 866 134'
Hm... irgendwas stimmt da nich^^
(also ich hab jetzt:
Delphi-Quellcode:
{GAANZ WICHTIG:} begin {*zwinker* @ wicht ;-)}
xy := min4.ScreenToClient(Point(0,0));
x:=xy.X;
 y:=xy.Y;
)
Wie kommt der denn jetzt auf minus?
mfg simon
Simon
  Mit Zitat antworten Zitat
Benutzerbild von SimonRap
SimonRap

Registriert seit: 17. Okt 2009
Ort: Mahlow
147 Beiträge
 
Delphi 6 Personal
 
#5

Re: screenToClient gibt komische Werte

  Alt 6. Mai 2010, 21:23
oder hab ich die funktion koplett falsch verstanden?
Meinem Verständnis nach wäre
Image1.screentoclient(form1.screentoclient);
das selbe wie
image1.left und image1.height
oder?

Ich verstehs nichmehr...
Kann mir jemand helfen?
need help simon
Simon
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: screenToClient liefert komische Werte

  Alt 6. Mai 2010, 21:46
ClientToScreen() und ScreenToClient() fragen die Mausposition nicht selbsttätig ab, das musst du schon noch selber tun. Dafür ist ja der Parameter vom Typ TPoint gedacht. Die Funktionen sind dazu gedacht, dass wenn man z.B. mit Mouse.CursorPos die Bildschirmkoordinaten erfragt hat, man aber die relativen Koords zu einem Formular braucht, diese mit
Delphi-Quellcode:
var
  formRelativePos: TPoint;
begin
  formRelativePos := Form1.ScreenToClient(Mouse.CursorPos);
bekommen kann. Umgekehrt liefern manche Ereignisse/Berechnungen auch relative Koordinaten, und wenn man dann aber die Bildschirmkoordinaten braucht, nimmt man sich die Gegenfunktion ClientToScreen() her. Der wichtige Teil ist aber, dass DU selber die Mausposition nicht übergibst, und deswegen keine sinnvollen Werte bekommst.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von SimonRap
SimonRap

Registriert seit: 17. Okt 2009
Ort: Mahlow
147 Beiträge
 
Delphi 6 Personal
 
#7

Re: screenToClient liefert komische Werte

  Alt 6. Mai 2010, 22:03
also zeigt die funktion die position gesehen von der mauspos (der gegebene TPoint)...
wenn ich aber anstatt die Maus position ne 0,0 gebe, müsste dann nicht die position des bildes direkt rauskommen?
also image1.ScreenToClient(0,0)
Dann gibt der doch die Position relativ zum Punkt 0,0 aus oder?
[edit=völlig durcheinander]
quatsch...
er rechnet ja dann die position des 0,0 vom image 1 aus gesehen aus[/edit]
Simon
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: screenToClient liefert komische Werte

  Alt 6. Mai 2010, 22:09
Nein. Die Funktion interpretiert (0,0) als Bildschirmkoordinate, und gibt dir diese relativ zu (Image.Left, Image.Top).

Ein Image ist schon ein bischen komplizierter, aber tun wir das mal:

Annahmen:
Image.Top = 80
Image.Left = 100

Image liegt auf Form (und nicht innerhalb eines weiteren Panels oder sonstiges, einfach nackt aufm Form).

Form.Top = 50
Form.Left = 250

Image.ScreenToClient(Point(0,0)) gibt dann einen Point: TPoint zurück:
Point.X = 0-80-50 = -130
Point.Y = 0-100-250 = -350

Zu interpretieren als: Bildschirmpunkt (0,0) liegt 130 Pixel links vom, und 350 Pixel oberhalb der oberen linken Ecke von Image.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von SimonRap
SimonRap

Registriert seit: 17. Okt 2009
Ort: Mahlow
147 Beiträge
 
Delphi 6 Personal
 
#9

Re: screenToClient liefert komische Werte

  Alt 6. Mai 2010, 22:14
mist is mir auch grad klar geworden (edit, deswegen kam auch minus raus, jetzt versteh ich das...glaub ich)
aber naja zu spät...
wiedermal denkfehler sry
Kann man denn (ohne die form.left und top auf 0 zu setzen) die position von 0 aus berechnen?
also so tun, als ob ein Object bei 0,0 ist und dann dieses object.screentoclient??
Gibt es da ne Möglichkeit?
Simon
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: screenToClient liefert komische Werte

  Alt 6. Mai 2010, 22:24
Ähm, was hast du überhaupt vor? Also was genau hast du, und wo willst du hin? Ich glaube, du bist hier auf einem höheren Level aufm falschen Dampfer.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz