Hi,
ich versuche die BeginDrag Methode zu implementieren um andere MouseEvents abfangen zu können siehe folgende Quelltext:
TImage* FUPImage;
<snip>
void __fastcall TMDIChild::PaintBox1DragOver(TObject *Sender, TObject *Source,
int X, int Y, TDragState State, bool &Accept)
{
/*Only Accept Events from Class with Name TTreevie and TImage*/
Accept = Source->ClassNameIs("TTreeView") | Source->ClassNameIs("TImage");
}
<snip>
void __fastcall TMDIChild::PaintBox1DragDrop(TObject *Sender, TObject *Source,
int X, int Y)
{
if ((Sender == PaintBox1 && Source == MainForm->TreeView1)&&
(MainForm->TreeView1->Selected->Level == 1))
{
stcFupEntry* pk = new stcFupEntry;
pk->asFUName = MainForm->TreeView1->Selected->Text;
if ( pk->asFUName.AnsiCompare("In\0")== 0)
{
FUPImage = new TImage(this);
FUPImage->Parent = this;
FUPImage->DragKind = dkDrag;
FUPImage->DragMode = dmAutomatic;
FUPImage->DragCursor = crDrag;
FUPImage->BeginDrag(false, 10);
FUPImage->Enabled = true;
FUPImage->Visible = true;
FUPImage->Center = false;
FUPImage->Stretch = false;
pk->ui16FUType = LOG_INPUT;
pk->i16XposFupEntry = X;
pk->i16YposFupEntry = Y;
pk->i16FupEntryWidth = 45;
pk->i16FupEntryHeight = 20;
pk->ui16xPosOf1Out = X-10;
pk->ui16yPosOf1Out = Y-10;
}
else return;
}
drawFUPImage(Canvas, pk, FUPImage);
}
<snip>
else if (Sender == PaintBox1 )
{
if (Sender != PaintBox1) // stelle dies gans am anfang deiner routine
return;
TImage *HelpImage = dynamic_cast<TImage*>(Source);
if ( HelpImage )
{
HelpImage->Top = Y;
HelpImage->Left = X-10;
}
}
}
auf diese Weise bekomme ich nach dem ablegen des FUPImage und anschließendem Bewegen der Mouse einen Laufzeitfehler in vcl100.bpl. Warum? Wenn ich FUPImage->BeginDrag (false, 10); auskommentiere funktioniert es wunderbar allerdings kann ich dann andere Mouseaktionen nicht abfangen.
Kann mir jemand auf die Sprünge helfen ?
Grüße
Sascha
ich versuche die BeginDrag Methode zu implementieren um andere MouseEvents abfangen zu können siehe folgende Quelltext:
TImage* FUPImage;
<snip>
void __fastcall TMDIChild::PaintBox1DragOver(TObject *Sender, TObject *Source,
int X, int Y, TDragState State, bool &Accept)
{
/*Only Accept Events from Class with Name TTreevie and TImage*/
Accept = Source->ClassNameIs("TTreeView") | Source->ClassNameIs("TImage");
}
<snip>
void __fastcall TMDIChild::PaintBox1DragDrop(TObject *Sender, TObject *Source,
int X, int Y)
{
if ((Sender == PaintBox1 && Source == MainForm->TreeView1)&&
(MainForm->TreeView1->Selected->Level == 1))
{
stcFupEntry* pk = new stcFupEntry;
pk->asFUName = MainForm->TreeView1->Selected->Text;
if ( pk->asFUName.AnsiCompare("In\0")== 0)
{
FUPImage = new TImage(this);
FUPImage->Parent = this;
FUPImage->DragKind = dkDrag;
FUPImage->DragMode = dmAutomatic;
FUPImage->DragCursor = crDrag;
FUPImage->BeginDrag(false, 10);
FUPImage->Enabled = true;
FUPImage->Visible = true;
FUPImage->Center = false;
FUPImage->Stretch = false;
pk->ui16FUType = LOG_INPUT;
pk->i16XposFupEntry = X;
pk->i16YposFupEntry = Y;
pk->i16FupEntryWidth = 45;
pk->i16FupEntryHeight = 20;
pk->ui16xPosOf1Out = X-10;
pk->ui16yPosOf1Out = Y-10;
}
else return;
}
drawFUPImage(Canvas, pk, FUPImage);
}
<snip>
else if (Sender == PaintBox1 )
{
if (Sender != PaintBox1) // stelle dies gans am anfang deiner routine
return;
TImage *HelpImage = dynamic_cast<TImage*>(Source);
if ( HelpImage )
{
HelpImage->Top = Y;
HelpImage->Left = X-10;
}
}
}
auf diese Weise bekomme ich nach dem ablegen des FUPImage und anschließendem Bewegen der Mouse einen Laufzeitfehler in vcl100.bpl. Warum? Wenn ich FUPImage->BeginDrag (false, 10); auskommentiere funktioniert es wunderbar allerdings kann ich dann andere Mouseaktionen nicht abfangen.
Kann mir jemand auf die Sprünge helfen ?
Grüße
Sascha
Comment