ReversibleFrame, problemer med at tegne i korrekt position
Hejsa jeg har længe siddet og rodet med et lille tegne program som skal tegne nogle komponenter på et panel, jeg vil gerne have min frame tegnet (og flyttet) midt under markøren, dette virker også fint så længe jeg arbejder med abolutte skærmkordinater det går galt i det øjeblik jeg omsætter det til relative kordinater, så tegnes framen et helt andet sted end under min markør, håber nogen kan gennemskue min brøler, og nu 2 km. kodepublic class GUIhandler
{
float left; // x-værdi i venstre kant af tegnepanelet
float top; // y-værdi i venstre kant af tegnepanelet
float pixelM; // scaleringsfaktor: Pixel pr. meter
float rHeight, rWidth;
bool ReverseVisible = false;
RectangleF ReverseRect = new RectangleF(0, 0, 0, 0);
public GUIhandler(float left, float top, float pixelM)
{
this.left=left;
this.top=top;
this.pixelM=pixelM;
}
public Point RealToLocal(PointF p)
{
Point pl = new Point();
pl.X = (int)((p.X - left) * pixelM + 0.5);
pl.Y = (int)((p.Y - top) * pixelM + 0.5);
return pl;
}
public Rectangle RealToLocal(RectangleF r)
{
Rectangle rl = new Rectangle();
rl.Location = RealToLocal(r.Location);
rl.Width = (int)(r.Width * pixelM + 0.5);
rl.Height = (int)(r.Height * pixelM + 0.5);
return rl;
}
public PointF LocalToReal(Point p)
{
PointF pr = new PointF();
pr.X = p.X / pixelM + left;
pr.Y = p.Y / pixelM + top;
return pr;
}
public RectangleF LocalToReal(Rectangle r)
{
RectangleF rr = new RectangleF();
rr.Location = LocalToReal(r.Location);
rr.Width = r.Width / pixelM;
rr.Height = r.Height / pixelM;
return rr;
}
public void ClearReversible()
{
if (ReverseVisible)
{
ControlPaint.DrawReversibleFrame(RealToLocal(ReverseRect), Color.Cyan, FrameStyle.Dashed);
ReverseVisible = false;
}
}
public void DrawReversible(float x, float y)
{
x = x - rWidth / 2.0F;
y = y - rHeight / 2.0F;
ReverseRect = new RectangleF(x, y, rWidth, rHeight);
ControlPaint.DrawReversibleFrame(RealToLocal(ReverseRect), Color.Cyan, FrameStyle.Dashed);
ReverseVisible = true;
}
public void knapKlik(string type)
{
ClearReversible();
switch (type)
{
case "hylde":
rHeight = 2.2F;
rWidth = 60.0F;
break;
}
}
}
og den kalende kode:
private void skabsPanel_MouseMove(object sender, MouseEventArgs e)
{
Point ps = skabsPanel.PointToScreen(new Point(e.X, e.Y));
gui.ClearReversible();
gui.DrawReversible(ps.X,ps.Y);
}
/Martin
