vielen dank für deine antwort doch leider geht es immer noch nicht sorecht:
die objekte springen bzw. das muster der objekte verändert sich.
ich habe mich an deinen anweinsungen gehlaten:
Delphi-Quellcode:
Shift: TShiftState; X, Y: Integer);
begin
startChange:=True;
objList.itemindex:=objlist.GetItemIndex(x,y,objlist.objList,shift);
Checklistbox1.itemindex:=objList.itemindex;
mx:=x; my:=y;
oldpos.x:=x; oldpos.Y:=y;
if objList.itemindex =-1 then
if ListBox1.itemindex > 0 then
if ssLeft in Shift then begin
objList.AddObj(ListBox1.itemindex-1,mx,my,20,20,'');
end;
objList.DrawObj;
end;
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
i,dx,dy:integer;
begin
if objlist.itemindex > -1 then begin
if ssCtrl in Shift then begin
TPaint2Obj(objList.objList[objlist.itemindex]).Size:=Point(x-mx,y-my);
objList.DrawObj;
end
else begin
if ssleft in Shift then begin
oldpos:=GetDiffObj(objlist.objList,x,y,objlist.ItemIndex);
for i:=0 to objlist.objList.Count-1 do begin
if (TPaint2Obj(objList.objList[i]).Sel = true) then begin
with TPaint2Obj(objList.objList[i]) do begin
if objlist.ItemIndex <> i then begin
// if position.x-oldpos.x > -1 then
dx:=position.x-oldpos.x;
// else
// dx:=oldpos.x-position.x;
// if position.Y-oldpos.y > -1 then
dy:=position.Y-oldpos.y;
// else
// dy:=oldpos.y-position.Y;
position:=Point(dx+x,dy+y);
caption:=IntTostr(dx) + '\' + IntTostr(dY);
end
else
Position:=Point(X,Y);
objList.DrawObj;
end;
end;
end;
end;
// objList.DrawObj;
end;
end;
oldpos.x:=x;
oldpos.y:=y;
in position wird nur die position gepseichert also nicht die objekte größe !
die wird in size gepseichert und es auch ein Tpoint