F
Also, Ich habe das mal auf einem anderen Weg probiert:
Auf einer Form habe ich ein Großes Panel1 = alClient, ein kleines Panel2 (zum Verschieben) und ein Image1. Die können jetzt mit einer beliebigen Rastergröße verschoben werden:
*.h
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
double Round(double dWert, int iGen);
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // Von der IDE verwaltete Komponenten
TPanel *Panel1;
TPanel *Panel2;
TImage *Image1;
void __fastcall Panel2MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y);
private: // Anwender-Deklarationen
public: // Anwender-Deklarationen
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
*.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <math.h> // für Power()
#include <math.hpp> // für floor()
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Panel2MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
int Raster = 50;
if (Shift.Contains(ssLeft))
{
TPoint P = Mouse->CursorPos; // Globale Cursorpos rausfinden
P = Panel1->ScreenToClient(P); // in Pos auf dem Panel1 umrechnen
AnsiString TempStr = Sender->ClassName();
if (TempStr == "TPanel")
{
Panel2->Top = Round(P.y/Raster, 1)*Raster;
Panel2->Left = Round(P.x/Raster, 1)*Raster;
}
else if (TempStr == "TImage")
{
Image1->Top = Round(P.y/Raster, 1)*Raster;
Image1->Left = Round(P.x/Raster, 1)*Raster;
}
}
}
//---------------------------------------------------------------------------
double Round(double dWert, int iGen);
{
int dlPower10 = Power(10.0, iGen);
return dWert >= 0 ? floor(dWert * dlPower10 + 0.5) / dlPower10 : ceil(dWert * dlPower10 - 0.5) / dlPower10;
}
[ Dieser Beitrag wurde am 31.01.2003 um 08:25 Uhr von F98 editiert. ]