Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi die 0,0 koordinate in der PB verändert sich ständig (https://www.delphipraxis.net/12909-die-0-0-koordinate-der-pb-veraendert-sich-staendig.html)

danielkussin 6. Dez 2003 11:52


die 0,0 koordinate in der PB verändert sich ständig
 
hi...

wir haben ein kleines problem mit unserer prozedur.
unsere paintbox ist 300x300 gross. und in dieser sollen wir verschiedene geometrische figuren erstellen können. diese sollen nur dann dargestellt werden wenn diese auch ganz in die box passen.
in der unten eingefügten prozedur kann man sehen wie wir die position in der paintbox berechnen.
die x-position -242 und die y-position -153 ist die 0,0 koordinate in der paintbox.
und genau da steckt das problem. die werte -242 und -153 passen machmal nicht mehr.
man kann das programm einige male starten und immer stimmen die koordinaten. doch dann passiert es immer wieder das man die werte veränder muss damit die koordinaten stimmen.... dies passiert auch, wenn man am quellcode nichts weiter verändert hat.



procedure THURecords.PaintBoxMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

var
a, b : integer;
begin
resetPaintBox;
a := mouse.CursorPos.x-242;
b := mouse.CursorPos.y-153;
HURecords.lbXpos.Caption := IntToStr(a);
HURecords.lbYpos.Caption := IntToStr(b);
if RandChecked then
Zeichnen;
end;



vielen dank schon mal...

jbg 6. Dez 2003 12:28

Re: die 0,0 koordinate in der PB verändert sich ständig
 
Zitat:

Zitat von danielkussin
resetPaintBox;

Jetzt sollte man noch wissen, was resetPaintBox so alles anstellt.

Zitat:

a := mouse.CursorPos.x-242;
b := mouse.CursorPos.y-153;
Auch eine Möglichkeit um von Screen-Koordinaten auf die Client-Koordinaten zu schließen. Dafür gibt es aber die ScreenToClient Methode von TControl, die auch die PaintBox besitzt.
Warum benutzt du eigentlich nicht den X und Y Parameter, der bereits als Client-Koordinate vorliegt?

danielkussin 6. Dez 2003 12:45

Re: die 0,0 koordinate in der PB verändert sich ständig
 
mit resetPaintbox wird ans ich nicht viel gemacht:

Delphi-Quellcode:
procedure THURecords.ResetPaintBox;
begin
  Paintbox.canvas.brush.color := clWhite;
  PaintBox.Canvas.FillRect(Rect(0,0,Paintbox.Width,Paintbox.Height));
end;
habe mir eben mal die hilfe in delphi zu "ScreenToClient" angeschaut. aber irgendwie werde ich daraus nicht so wirklich schlau :oops:

Zitat:

Warum benutzt du eigentlich nicht den X und Y Parameter, der bereits als Client-Koordinate vorliegt?
meinst du damit diese werte: mouse.CursorPos.x ; mouse.CursorPos.y ?

jbg 6. Dez 2003 13:02

Re: die 0,0 koordinate in der PB verändert sich ständig
 
Zitat:

Zitat von danielkussin
PaintBox.Canvas.FillRect(Rect(0,0,Paintbox.Width,P aintbox.Height));

Das liese sich auch so schreiben:
Delphi-Quellcode:
PaintBox.Canvas.FillRect(Paintbox.ClientRect);

Zitat:

habe mir eben mal die hilfe in delphi zu "ScreenToClient" angeschaut. aber irgendwie werde ich daraus nicht so wirklich schlau :oops:
Also die Hilfe die ich zu TControl.ScreenToClient habe ist eigentlich sehr einleuchtend. Aber vielleicht hast du ja eine andere :roll:
Delphi-Quellcode:
var pt: TPoint;
begin
  Pt := PaintBox.ScreenToClient(Mouse.CursorPos);
  // mit Pt.X, Pt.Y arbeiten
end;


Zitat:

meinst du damit diese werte: mouse.CursorPos.x ; mouse.CursorPos.y ?
Nein.
Damit meine ich
Zitat:

procedure THURecords.PaintBoxMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

danielkussin 6. Dez 2003 13:24

Re: die 0,0 koordinate in der PB verändert sich ständig
 
Zitat:

PaintBox.Canvas.FillRect(Paintbox.ClientRect);
supi... das klappt echt wunderbar. so ist die zeile um einiges besser... danke :thuimb:

Zitat:

Also die Hilfe die ich zu TControl.ScreenToClient habe ist eigentlich sehr einleuchtend. Aber vielleicht hast du ja eine andere
hehe... nee liegt eher am anwender als an der version :stupid:
weiss immernoch nicht so ganz wie ich das in mein programm einbauen soll. aber ich probiere da einfach nochmal bischen rum.
muss bloss mit meinen variablen so weiterarbeiten (a,b) da ich die im rest des progs auch verwende und das nicht alles nochmal umschreiben möchte :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:35 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